diff --git a/src/client/app/composables/head.ts b/src/client/app/composables/head.ts index bd1871e3..849fb3b8 100644 --- a/src/client/app/composables/head.ts +++ b/src/client/app/composables/head.ts @@ -1,6 +1,5 @@ import { watchEffect, Ref } from 'vue' -import { HeadConfig, SiteData } from '../../shared' -import { processHead } from '../../../shared/shared' +import { HeadConfig, SiteData, processHead } from '../../shared' import { Route } from '../router' export function useUpdateHead(route: Route, siteDataByRouteRef: Ref) { @@ -58,20 +57,15 @@ export function useUpdateHead(route: Route, siteDataByRouteRef: Ref) { const pageData = route.data const siteData = siteDataByRouteRef.value const pageTitle = pageData && pageData.title - const pageDescription = pageData && pageData.description - const frontmatterHead = pageData && pageData.frontmatter.head - + //const pageDescription = pageData && pageData.description + // update title and description document.title = (pageTitle ? pageTitle + ` | ` : ``) + siteData.title document .querySelector(`meta[name=description]`)! - .setAttribute('content', pageDescription || siteData.description) + .setAttribute('content', JSON.stringify(siteData.head))//pageDescription || siteData.description) - updateHeadTags([ - // site head can only change during dev - ...(import.meta.env.DEV ? processHead(siteData.head, pageData) : []), - ...(frontmatterHead ? filterOutHeadDescription(frontmatterHead) : []) - ]) + updateHeadTags(processHead(siteData.head, pageData)) }) } @@ -85,15 +79,3 @@ function createHeadElement([tag, attrs, innerHTML]: HeadConfig) { } return el } - -function isMetaDescription(headConfig: HeadConfig) { - return ( - headConfig[0] === 'meta' && - headConfig[1] && - headConfig[1].name === 'description' - ) -} - -function filterOutHeadDescription(head: HeadConfig[]) { - return head.filter((h) => !isMetaDescription(h)) -} diff --git a/src/client/app/data.ts b/src/client/app/data.ts index a3ce5369..82c149a7 100644 --- a/src/client/app/data.ts +++ b/src/client/app/data.ts @@ -3,6 +3,7 @@ import { Route } from './router' import serializedSiteData from '@siteData' import { resolveSiteDataByRoute, PageData, SiteData } from '../shared' import { withBase } from './utils' +import { HeadConfig } from 'dist/vitepress' export const dataSymbol: InjectionKey = Symbol() @@ -10,6 +11,7 @@ export interface VitePressData { site: Ref> page: Ref theme: Ref + head: Ref HeadConfig[])> frontmatter: Ref title: Ref description: Ref @@ -43,6 +45,7 @@ export function initData(route: Route): VitePressData { return { site, theme: computed(() => site.value.themeConfig), + head: computed(() => site.value.head), page: computed(() => route.data), frontmatter: computed(() => route.data.frontmatter), lang: computed(() => site.value.lang), diff --git a/src/node/build/render.ts b/src/node/build/render.ts index d930ab41..7f16238c 100644 --- a/src/node/build/render.ts +++ b/src/node/build/render.ts @@ -1,8 +1,7 @@ import path from 'path' import fs from 'fs-extra' import { SiteConfig, resolveSiteDataByRoute } from '../config' -import { HeadConfig } from '../shared' -import { processHead } from '../../shared/shared' +import { HeadConfig, processHead } from '../shared' import { normalizePath, transformWithEsbuild } from 'vite' import { RollupOutput, OutputChunk, OutputAsset } from 'rollup' import { slash } from '../utils/slash' @@ -130,7 +129,7 @@ export async function renderPage( ${stylesheetLink} ${preloadLinksString} ${prefetchLinkString} - ${await renderHead([...head, ...pageData.head])} + ${await renderHead(head)}
${content}
diff --git a/src/node/index.ts b/src/node/index.ts index bc08b91b..458e26a4 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -7,6 +7,7 @@ export * from './markdown/markdown' // shared types export type { SiteData, + PageData, HeadConfig, Header, LocaleConfig, diff --git a/src/shared/shared.ts b/src/shared/shared.ts index 76f1b950..64e26974 100644 --- a/src/shared/shared.ts +++ b/src/shared/shared.ts @@ -108,5 +108,6 @@ export function processHead( head: HeadConfig[] | ((pageData: PageData) => HeadConfig[]), pageData: PageData ): HeadConfig[] { - return !head ? [] : typeof head === 'function' ? head(pageData) : head + const combineHead = !head ? [] : typeof head === 'function' ? head(pageData) : head + return [...combineHead]; }