From 67f7b0e0c60969aaa5adcb17ef6c04a5bd593b5f Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Wed, 10 Jul 2024 00:54:53 +0800 Subject: [PATCH] =?UTF-8?q?perf(theme):=20=E4=BC=98=E5=8C=96=20headers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- theme/src/client/components/VPDoc.vue | 15 ++++----- .../client/components/VPDocAsideOutline.vue | 11 ++----- theme/src/client/components/VPLocalNav.vue | 11 ++----- theme/src/client/composables/outline.ts | 31 +++++++++++++++++-- theme/src/client/config.ts | 2 ++ 5 files changed, 43 insertions(+), 27 deletions(-) diff --git a/theme/src/client/components/VPDoc.vue b/theme/src/client/components/VPDoc.vue index a4b7715f..13142d0b 100644 --- a/theme/src/client/components/VPDoc.vue +++ b/theme/src/client/components/VPDoc.vue @@ -9,23 +9,20 @@ import VPDocMeta from '@theme/VPDocMeta.vue' import { useEncrypt } from '../composables/encrypt.js' import { useSidebar } from '../composables/sidebar.js' import { useData } from '../composables/data.js' +import { useHeaders } from '../composables/outline.js' const { page, theme, frontmatter, isDark } = useData() const route = useRoute() const { hasSidebar, hasAside, leftAside } = useSidebar() +const headers = useHeaders() const { isPageDecrypted } = useEncrypt() const hasComments = computed(() => { return page.value.frontmatter.comments !== false && isPageDecrypted.value }) -const enableAside = computed(() => { - if (page.value.isBlogPost) - return hasAside.value && isPageDecrypted.value && page.value.headers.length - - return hasAside.value && isPageDecrypted.value -}) +const enableAside = computed(() => hasAside.value && headers.value.length) const pageName = computed(() => route.path.replace(/[./]+/g, '_').replace(/_html$/, ''), @@ -68,7 +65,7 @@ watch(
import { computed, ref } from 'vue' -import { onContentUpdated } from '@vuepress-plume/plugin-content-update/client' import VPDocOutlineItem from '@theme/VPDocOutlineItem.vue' -import { type MenuItem, getHeaders, useActiveAnchor } from '../composables/outline.js' +import { type MenuItem, useActiveAnchor, useHeaders } from '../composables/outline.js' import { useData } from '../composables/data.js' -const { theme, frontmatter } = useData() +const { theme } = useData() -const headers = ref([]) +const headers = useHeaders() const hasOutline = computed(() => headers.value.length > 0) -onContentUpdated(() => { - headers.value = getHeaders(frontmatter.value.outline ?? theme.value.outline) -}) - const container = ref() const marker = ref() diff --git a/theme/src/client/components/VPLocalNav.vue b/theme/src/client/components/VPLocalNav.vue index c96cdc67..409508a1 100644 --- a/theme/src/client/components/VPLocalNav.vue +++ b/theme/src/client/components/VPLocalNav.vue @@ -1,10 +1,9 @@