{{ i18n.ts.pageLoadError }}
{{ i18n.ts.pageLoadErrorDescription }}
@@ -30,6 +30,7 @@ import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
import { miLocalStorage } from '@/local-storage';
import { defaultStore } from '@/store';
+import { serverErrorImageUrl } from '@/instance';
const props = withDefaults(defineProps<{
error?: Error;
diff --git a/packages/frontend/src/pages/admin/branding.vue b/packages/frontend/src/pages/admin/branding.vue
new file mode 100644
index 0000000000..65ce9e0068
--- /dev/null
+++ b/packages/frontend/src/pages/admin/branding.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+ {{ i18n.ts.iconUrl }}
+
+
+
+
+ {{ i18n.ts.bannerUrl }}
+
+
+
+
+ {{ i18n.ts.backgroundImageUrl }}
+
+
+
+
+ {{ i18n.ts.notFoundDescription }}
+
+
+
+
+ {{ i18n.ts.nothing }}
+
+
+
+
+ {{ i18n.ts.somethingHappened }}
+
+
+
+ {{ i18n.ts.themeColor }}
+
+
+
+ {{ i18n.ts.instanceDefaultLightTheme }}
+ {{ i18n.ts.instanceDefaultThemeDescription }}
+
+
+
+ {{ i18n.ts.instanceDefaultDarkTheme }}
+ {{ i18n.ts.instanceDefaultThemeDescription }}
+
+
+
+
+
+
+
+ {{ i18n.ts.save }}
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue
index 5cbbcaa44c..8b083bc896 100644
--- a/packages/frontend/src/pages/admin/index.vue
+++ b/packages/frontend/src/pages/admin/index.vue
@@ -143,6 +143,11 @@ const menuDef = $computed(() => [{
text: i18n.ts.general,
to: '/admin/settings',
active: currentPage?.route.name === 'settings',
+ }, {
+ icon: 'ti ti-paint',
+ text: i18n.ts.branding,
+ to: '/admin/branding',
+ active: currentPage?.route.name === 'branding',
}, {
icon: 'ti ti-shield',
text: i18n.ts.moderation,
diff --git a/packages/frontend/src/pages/admin/roles.role.vue b/packages/frontend/src/pages/admin/roles.role.vue
index 4ed6abf200..6cbe7ae658 100644
--- a/packages/frontend/src/pages/admin/roles.role.vue
+++ b/packages/frontend/src/pages/admin/roles.role.vue
@@ -23,7 +23,7 @@
-
+
{{ i18n.ts.noUsers }}
@@ -69,6 +69,7 @@ import MkButton from '@/components/MkButton.vue';
import MkUserCardMini from '@/components/MkUserCardMini.vue';
import MkInfo from '@/components/MkInfo.vue';
import MkPagination, { Paging } from '@/components/MkPagination.vue';
+import { infoImageUrl } from '@/instance';
const router = useRouter();
diff --git a/packages/frontend/src/pages/admin/settings.vue b/packages/frontend/src/pages/admin/settings.vue
index 39d5ae8607..4c2fe46f28 100644
--- a/packages/frontend/src/pages/admin/settings.vue
+++ b/packages/frontend/src/pages/admin/settings.vue
@@ -29,41 +29,6 @@
{{ i18n.ts.pinnedUsersDescription }}
-
- {{ i18n.ts.theme }}
-
-
-
-
- {{ i18n.ts.iconUrl }}
-
-
-
-
- {{ i18n.ts.bannerUrl }}
-
-
-
-
- {{ i18n.ts.backgroundImageUrl }}
-
-
-
- {{ i18n.ts.themeColor }}
-
-
-
- {{ i18n.ts.instanceDefaultLightTheme }}
- {{ i18n.ts.instanceDefaultThemeDescription }}
-
-
-
- {{ i18n.ts.instanceDefaultDarkTheme }}
- {{ i18n.ts.instanceDefaultThemeDescription }}
-
-
-
-
{{ i18n.ts.files }}
@@ -145,12 +110,6 @@ let name: string | null = $ref(null);
let description: string | null = $ref(null);
let maintainerName: string | null = $ref(null);
let maintainerEmail: string | null = $ref(null);
-let iconUrl: string | null = $ref(null);
-let bannerUrl: string | null = $ref(null);
-let backgroundImageUrl: string | null = $ref(null);
-let themeColor: any = $ref(null);
-let defaultLightTheme: any = $ref(null);
-let defaultDarkTheme: any = $ref(null);
let pinnedUsers: string = $ref('');
let cacheRemoteFiles: boolean = $ref(false);
let enableServiceWorker: boolean = $ref(false);
@@ -163,12 +122,6 @@ async function init() {
const meta = await os.api('admin/meta');
name = meta.name;
description = meta.description;
- iconUrl = meta.iconUrl;
- bannerUrl = meta.bannerUrl;
- backgroundImageUrl = meta.backgroundImageUrl;
- themeColor = meta.themeColor;
- defaultLightTheme = meta.defaultLightTheme;
- defaultDarkTheme = meta.defaultDarkTheme;
maintainerName = meta.maintainerName;
maintainerEmail = meta.maintainerEmail;
pinnedUsers = meta.pinnedUsers.join('\n');
@@ -184,12 +137,6 @@ function save() {
os.apiWithDialog('admin/update-meta', {
name,
description,
- iconUrl,
- bannerUrl,
- backgroundImageUrl,
- themeColor: themeColor === '' ? null : themeColor,
- defaultLightTheme: defaultLightTheme === '' ? null : defaultLightTheme,
- defaultDarkTheme: defaultDarkTheme === '' ? null : defaultDarkTheme,
maintainerName,
maintainerEmail,
pinnedUsers: pinnedUsers.split('\n'),
diff --git a/packages/frontend/src/pages/favorites.vue b/packages/frontend/src/pages/favorites.vue
index 460bf65d1e..21c306148b 100644
--- a/packages/frontend/src/pages/favorites.vue
+++ b/packages/frontend/src/pages/favorites.vue
@@ -5,7 +5,7 @@
-
+
{{ i18n.ts.noNotes }}
@@ -26,6 +26,7 @@ import MkNote from '@/components/MkNote.vue';
import MkDateSeparatedList from '@/components/MkDateSeparatedList.vue';
import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
+import { infoImageUrl } from '@/instance';
const pagination = {
endpoint: 'i/favorites' as const,
diff --git a/packages/frontend/src/pages/follow-requests.vue b/packages/frontend/src/pages/follow-requests.vue
index 1452942a1e..a70a4894a5 100644
--- a/packages/frontend/src/pages/follow-requests.vue
+++ b/packages/frontend/src/pages/follow-requests.vue
@@ -5,7 +5,7 @@
-
+
{{ i18n.ts.noFollowRequests }}
@@ -39,6 +39,7 @@ import { userPage, acct } from '@/filters/user';
import * as os from '@/os';
import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
+import { infoImageUrl } from '@/instance';
const paginationComponent = shallowRef>();
diff --git a/packages/frontend/src/pages/list.vue b/packages/frontend/src/pages/list.vue
index f92c06d1c5..40934fb71d 100644
--- a/packages/frontend/src/pages/list.vue
+++ b/packages/frontend/src/pages/list.vue
@@ -3,7 +3,7 @@
-
+
{{ i18n.ts.nothing }}
@@ -36,6 +36,7 @@ import { i18n } from '@/i18n';
import MkUserCardMini from '@/components/MkUserCardMini.vue';
import MkButton from '@/components/MkButton.vue';
import { definePageMetadata } from '@/scripts/page-metadata';
+import { serverErrorImageUrl } from '@/instance';
const props = defineProps<{
listId: string;
diff --git a/packages/frontend/src/pages/not-found.vue b/packages/frontend/src/pages/not-found.vue
index 2c9d949017..43dc41e7cc 100644
--- a/packages/frontend/src/pages/not-found.vue
+++ b/packages/frontend/src/pages/not-found.vue
@@ -1,7 +1,7 @@
-
+
{{ i18n.ts.notFoundDescription }}
@@ -10,6 +10,7 @@
diff --git a/packages/frontend/src/pages/settings/apps.vue b/packages/frontend/src/pages/settings/apps.vue
index fbb78200d4..cadce49230 100644
--- a/packages/frontend/src/pages/settings/apps.vue
+++ b/packages/frontend/src/pages/settings/apps.vue
@@ -3,7 +3,7 @@
-
+
{{ i18n.ts.nothing }}
@@ -47,6 +47,7 @@ import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
import MkKeyValue from '@/components/MkKeyValue.vue';
import MkButton from '@/components/MkButton.vue';
+import { infoImageUrl } from '@/instance';
const list = ref(null);
diff --git a/packages/frontend/src/pages/settings/mute-block.vue b/packages/frontend/src/pages/settings/mute-block.vue
index 3d0463f708..e0785ab9fe 100644
--- a/packages/frontend/src/pages/settings/mute-block.vue
+++ b/packages/frontend/src/pages/settings/mute-block.vue
@@ -10,7 +10,7 @@
-
+
{{ i18n.ts.noUsers }}
@@ -38,7 +38,7 @@
-
+
{{ i18n.ts.noUsers }}
@@ -68,7 +68,7 @@
-
+
{{ i18n.ts.noUsers }}
@@ -107,6 +107,7 @@ import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
import MkUserCardMini from '@/components/MkUserCardMini.vue';
import * as os from '@/os';
+import { infoImageUrl } from '@/instance';
let tab = $ref('renoteMute');
diff --git a/packages/frontend/src/pages/settings/other.vue b/packages/frontend/src/pages/settings/other.vue
index 0b73780a8b..3d8bb59277 100644
--- a/packages/frontend/src/pages/settings/other.vue
+++ b/packages/frontend/src/pages/settings/other.vue
@@ -26,8 +26,6 @@
{{ i18n.ts.registeredDate }}
-
- {{ i18n.ts.statistics }}
diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue
index 58217d0475..81f0518a06 100644
--- a/packages/frontend/src/pages/settings/profile.vue
+++ b/packages/frontend/src/pages/settings/profile.vue
@@ -127,7 +127,6 @@ const profile = reactive({
lang: $i.lang,
isBot: $i.isBot,
isCat: $i.isCat,
- showTimelineReplies: $i.showTimelineReplies,
});
watch(() => profile, () => {
@@ -151,7 +150,7 @@ while (fields.value.length < 4) {
addField();
}
-function deleteField(index: number) {
+function deleteField(index: number) {
fields.value.splice(index, 1);
}
@@ -176,7 +175,6 @@ function save() {
lang: profile.lang || null,
isBot: !!profile.isBot,
isCat: !!profile.isCat,
- showTimelineReplies: !!profile.showTimelineReplies,
});
claimAchievement('profileFilled');
if (profile.name === 'syuilo' || profile.name === 'しゅいろ') {
diff --git a/packages/frontend/src/router.ts b/packages/frontend/src/router.ts
index 6b11137d79..fe9bc5938e 100644
--- a/packages/frontend/src/router.ts
+++ b/packages/frontend/src/router.ts
@@ -177,10 +177,6 @@ export const routes = [{
path: '/accounts',
name: 'profile',
component: page(() => import('./pages/settings/accounts.vue')),
- }, {
- path: '/account-stats',
- name: 'other',
- component: page(() => import('./pages/settings/account-stats.vue')),
}, {
path: '/other',
name: 'other',
@@ -392,6 +388,10 @@ export const routes = [{
path: '/settings',
name: 'settings',
component: page(() => import('./pages/admin/settings.vue')),
+ }, {
+ path: '/branding',
+ name: 'branding',
+ component: page(() => import('./pages/admin/branding.vue')),
}, {
path: '/moderation',
name: 'moderation',
diff --git a/packages/frontend/src/stream.ts b/packages/frontend/src/stream.ts
index 9cae58a26a..a7e4ecd42d 100644
--- a/packages/frontend/src/stream.ts
+++ b/packages/frontend/src/stream.ts
@@ -12,5 +12,14 @@ export function useStream(): Misskey.Stream {
token: $i.token,
} : null));
+ window.setTimeout(heartbeat, 1000 * 60);
+
return stream;
}
+
+function heartbeat(): void {
+ if (stream != null && document.visibilityState === 'visible') {
+ stream.heartbeat();
+ }
+ window.setTimeout(heartbeat, 1000 * 60);
+}
diff --git a/packages/frontend/src/ui/deck.vue b/packages/frontend/src/ui/deck.vue
index c828731773..bd5d5beb84 100644
--- a/packages/frontend/src/ui/deck.vue
+++ b/packages/frontend/src/ui/deck.vue
@@ -254,6 +254,28 @@ async function deleteProfile() {
}
+
+
+