From d609f41f61d82d64cb8b01a0f4e52fb1af2c893e Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Tue, 18 Mar 2025 17:31:25 +0900
Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../frontend/src/components/MkPageWindow.vue | 7 +-
.../src/components/global/MkPageHeader.vue | 4 +-
.../components/global/NestedRouterView.vue | 65 ++++++
.../src/components/global/RouterView.vue | 60 +++---
.../components/global/StackingRouterView.vue | 191 ++++++++++++++++++
packages/frontend/src/components/index.ts | 6 +
packages/frontend/src/di.ts | 1 +
packages/frontend/src/page.ts | 11 +-
.../frontend/src/pages/admin/_header_.vue | 8 +-
packages/frontend/src/pages/admin/index.vue | 6 +-
.../frontend/src/pages/settings/index.vue | 4 +-
.../frontend/src/pages/settings/other.vue | 4 +
packages/frontend/src/pages/timeline.vue | 8 +-
packages/frontend/src/preferences/def.ts | 4 +
packages/frontend/src/ui/deck/main-column.vue | 5 +-
packages/frontend/src/ui/minimum.vue | 2 +-
packages/frontend/src/ui/universal.vue | 5 +-
packages/frontend/src/ui/visitor.vue | 2 +-
packages/frontend/src/ui/zen.vue | 2 +-
.../utility/autogen/settings-search-index.ts | 2 +-
20 files changed, 324 insertions(+), 73 deletions(-)
create mode 100644 packages/frontend/src/components/global/NestedRouterView.vue
create mode 100644 packages/frontend/src/components/global/StackingRouterView.vue
diff --git a/packages/frontend/src/components/MkPageWindow.vue b/packages/frontend/src/components/MkPageWindow.vue
index 51f19faf29..eae2ccec4a 100644
--- a/packages/frontend/src/components/MkPageWindow.vue
+++ b/packages/frontend/src/components/MkPageWindow.vue
@@ -22,8 +22,10 @@ SPDX-License-Identifier: AGPL-3.0-only
-
-
+
+
+
+
@@ -44,6 +46,7 @@ import { useRouterFactory } from '@/router/supplier.js';
import { mainRouter } from '@/router/main.js';
import { analytics } from '@/analytics.js';
import { DI } from '@/di.js';
+import { prefer } from '@/preferences.js';
const props = defineProps<{
initialPath: string;
diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue
index 69bbd88cb6..b353269fef 100644
--- a/packages/frontend/src/components/global/MkPageHeader.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.vue
@@ -49,9 +49,9 @@ import type { Tab } from './MkPageHeader.tabs.vue';
import type { PageHeaderItem } from '@/types/page-header.js';
import type { PageMetadata } from '@/page.js';
import { globalEvents } from '@/events.js';
-import { injectReactiveMetadata } from '@/page.js';
import { openAccountMenu as openAccountMenu_ } from '@/accounts.js';
import { $i } from '@/i.js';
+import { DI } from '@/di.js';
const props = withDefaults(defineProps<{
overridePageMetadata?: PageMetadata;
@@ -69,7 +69,7 @@ const emit = defineEmits<{
(ev: 'update:tab', key: string);
}>();
-const injectedPageMetadata = injectReactiveMetadata();
+const injectedPageMetadata = inject(DI.pageMetadata);
const pageMetadata = computed(() => props.overridePageMetadata ?? injectedPageMetadata.value);
const hideTitle = computed(() => inject('shouldOmitHeaderTitle', false) || props.hideTitle);
diff --git a/packages/frontend/src/components/global/NestedRouterView.vue b/packages/frontend/src/components/global/NestedRouterView.vue
new file mode 100644
index 0000000000..eb7192d8e0
--- /dev/null
+++ b/packages/frontend/src/components/global/NestedRouterView.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/components/global/RouterView.vue b/packages/frontend/src/components/global/RouterView.vue
index 25a29a4ae7..b01e355c5e 100644
--- a/packages/frontend/src/components/global/RouterView.vue
+++ b/packages/frontend/src/components/global/RouterView.vue
@@ -4,18 +4,20 @@ SPDX-License-Identifier: AGPL-3.0-only
-->
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/components/index.ts b/packages/frontend/src/components/index.ts
index 66ac871f7d..c28c457e33 100644
--- a/packages/frontend/src/components/index.ts
+++ b/packages/frontend/src/components/index.ts
@@ -16,6 +16,8 @@ import MkTime from './global/MkTime.vue';
import MkUrl from './global/MkUrl.vue';
import I18n from './global/I18n.vue';
import RouterView from './global/RouterView.vue';
+import NestedRouterView from './global/NestedRouterView.vue';
+import StackingRouterView from './global/StackingRouterView.vue';
import MkLoading from './global/MkLoading.vue';
import MkError from './global/MkError.vue';
import MkAd from './global/MkAd.vue';
@@ -38,6 +40,8 @@ export default function(app: App) {
export const components = {
I18n: I18n,
RouterView: RouterView,
+ NestedRouterView: NestedRouterView,
+ StackingRouterView: StackingRouterView,
Mfm: Mfm,
MkA: MkA,
MkAcct: MkAcct,
@@ -65,6 +69,8 @@ declare module '@vue/runtime-core' {
export interface GlobalComponents {
I18n: typeof I18n;
RouterView: typeof RouterView;
+ NestedRouterView: typeof NestedRouterView;
+ StackingRouterView: typeof StackingRouterView;
Mfm: typeof Mfm;
MkA: typeof MkA;
MkAcct: typeof MkAcct;
diff --git a/packages/frontend/src/di.ts b/packages/frontend/src/di.ts
index 192242984c..2afe35550d 100644
--- a/packages/frontend/src/di.ts
+++ b/packages/frontend/src/di.ts
@@ -10,4 +10,5 @@ export const DI = {
routerCurrentDepth: Symbol() as InjectionKey
,
router: Symbol() as InjectionKey,
mock: Symbol() as InjectionKey,
+ pageMetadata: Symbol() as InjectionKey[>>,
};
diff --git a/packages/frontend/src/page.ts b/packages/frontend/src/page.ts
index f3ec09a16f..0107f17be4 100644
--- a/packages/frontend/src/page.ts
+++ b/packages/frontend/src/page.ts
@@ -5,6 +5,7 @@
import * as Misskey from 'misskey-js';
import { inject, isRef, onActivated, onBeforeUnmount, provide, ref, toValue, watch } from 'vue';
+import { DI } from './di.js';
import type { MaybeRefOrGetter, Ref } from 'vue';
export type PageMetadata = {
@@ -31,9 +32,6 @@ const METADATA_KEY = Symbol('MetadataKey');
const setMetadata = (v: Ref): void => {
provide][>(METADATA_KEY, v);
};
-const getMetadata = (): Ref | undefined => {
- return inject][>(METADATA_KEY);
-};
export const definePage = (maybeRefOrGetterMetadata: MaybeRefOrGetter): void => {
const metadataRef = ref(toValue(maybeRefOrGetterMetadata));
@@ -55,6 +53,8 @@ export const definePage = (maybeRefOrGetterMetadata: MaybeRefOrGetter {
receiver?.(metadataGetter);
});
+
+ provide(DI.pageMetadata, metadataRef);
};
export const provideMetadataReceiver = (receiver: PageMetadataReceiver): void => {
@@ -64,8 +64,3 @@ export const provideMetadataReceiver = (receiver: PageMetadataReceiver): void =>
export const provideReactiveMetadata = (metadataRef: Ref): void => {
setMetadata(metadataRef);
};
-
-export const injectReactiveMetadata = (): Ref => {
- const metadataRef = getMetadata();
- return isRef(metadataRef) ? metadataRef : ref(null);
-};
diff --git a/packages/frontend/src/pages/admin/_header_.vue b/packages/frontend/src/pages/admin/_header_.vue
index 1382cad9a4..f073a4af7e 100644
--- a/packages/frontend/src/pages/admin/_header_.vue
+++ b/packages/frontend/src/pages/admin/_header_.vue
@@ -33,13 +33,13 @@ SPDX-License-Identifier: AGPL-3.0-only
]