aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/docs/composables/useDocus.ts
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-19 17:30:39 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-19 17:30:39 +0800
commit3adc965dd09490b7efa1cce9f09b0a3b30970277 (patch)
treef813abb07d7b003984aa74e3154752b6ffc3ccd5 /docs/composables/useDocus.ts
parentc7c9ca6f0c8eddf6d34cd40779f3b2d9463f3a46 (diff)
downloadHydroRoll-3adc965dd09490b7efa1cce9f09b0a3b30970277.tar.gz
HydroRoll-3adc965dd09490b7efa1cce9f09b0a3b30970277.zip
✨优化文档
Diffstat (limited to 'docs/composables/useDocus.ts')
-rw-r--r--docs/composables/useDocus.ts88
1 files changed, 88 insertions, 0 deletions
diff --git a/docs/composables/useDocus.ts b/docs/composables/useDocus.ts
new file mode 100644
index 0000000..f86c573
--- /dev/null
+++ b/docs/composables/useDocus.ts
@@ -0,0 +1,88 @@
+export const useDocus = () => {
+ const docus = computed(() => useAppConfig()?.docus || {})
+ const { navPageFromPath, navDirFromPath, navKeyFromPath } = useContentHelpers()
+ const { navigation, page } = useContent()
+ const route = useRoute()
+
+ /**
+ * Returns fallbacked values for `main`, `header`, `aside` and `footer`.
+ *
+ * It allows to configure `app.config` per page/_dir.
+ */
+ const config = computed(
+ () => {
+ const titleTemplate = docus?.value?.titleTemplate || navKeyFromPath(page?.value?._path, 'titleTemplate', navigation.value || []) || `%s · ${docus?.value?.title || 'Docus'}`
+ const main = docus?.value?.main || {}
+ const header = docus?.value?.header || {}
+ const aside = docus?.value?.aside || {}
+ const footer = docus?.value?.footer || {}
+
+ return {
+ // Raw appConfig
+ ...docus.value,
+
+ // Merged attributes
+ titleTemplate,
+ main: {
+ ...main,
+ ...navKeyFromPath(route.path, 'main', navigation.value || []),
+ ...page.value?.main
+ } as typeof main,
+ header: {
+ ...header,
+ ...navKeyFromPath(route.path, 'header', navigation.value || []),
+ ...page.value?.header
+ } as typeof header,
+ aside: {
+ ...aside,
+ ...navKeyFromPath(route.path, 'aside', navigation.value || []),
+ ...page.value?.aside
+ } as typeof aside,
+ footer: {
+ ...footer,
+ ...navKeyFromPath(route.path, 'footer', navigation.value || []),
+ ...page.value?.footer
+ } as typeof footer
+ }
+ }
+ )
+
+ /**
+ * Current aside tree.
+ */
+ const tree = computed(() => {
+ let nav = navigation.value || []
+ const _path = route.path
+ const level = config?.value?.aside?.level || 0
+ const filtered = config?.value?.aside?.exclude || []
+
+ if (level) {
+ // Filter if `aside.level` is enabled in docus configuration
+ const path = _path.split('/')
+
+ // Get level
+ const leveledPath = path.splice(0, 1 + level).join('/')
+
+ nav = navDirFromPath(leveledPath, nav) || []
+
+ if (!Array.isArray(nav)) { nav = [nav] }
+ }
+
+ // No navigation found; try to resolve page url
+ if (nav.length === 0) {
+ nav = navPageFromPath(page.value?._path || '/', navigation.value || [])
+
+ if (!nav) { return [] }
+
+ if (!Array.isArray(nav)) { nav = [nav] }
+ }
+
+ // Filtered using `aside.exclude` in docus configuration
+ return nav.filter((item: any) => {
+ if (filtered.includes(item._path)) { return false }
+ return true
+ })
+ })
+
+ return { tree, config }
+}