diff --git a/generator/page-list-generator.ts b/generator/page-list-generator.ts index d01a9dd..607ef6a 100644 --- a/generator/page-list-generator.ts +++ b/generator/page-list-generator.ts @@ -33,15 +33,15 @@ export default function pageListGenerator(routeBase: string[]): PluginOption { const data = frontmatter.data const time = data.time const title = data.title - const metaDescription = data.metaDescription + const meta= data.meta delete data.time delete data.title - delete data.metaDescription + delete data.meta return { title, time, data, - metaDescription, + meta, excerpt: frontmatter.excerpt, contentUrl: `/${base}/${filename}`, } diff --git a/index.html b/index.html index 8467a01..0858147 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - + <!--title-prefix--><!--title-suffix-->> diff --git a/prerender.ts b/prerender.ts index 832f6cd..8799e5e 100644 --- a/prerender.ts +++ b/prerender.ts @@ -29,13 +29,13 @@ routesToPrerender.push(...fg.sync('./src/data/*/*.md').map((p) => p.slice(10, -3 // pre-render each route... for (const url of routesToPrerender) { - const [appHtml, preloadLinks, titlePrefix, metaDescription] = await render(url, manifest) + const [appHtml, preloadLinks, titlePrefix, meta] = await render(url, manifest) const html = template .replace(``, preloadLinks) .replace(``, appHtml) .replace(``, titlePrefix) - .replace(``, metaDescription) + .replace(``, meta) .replace(``, SiteConfiguration.titleSuffix) const filePath = `dist/static${url.endsWith('/') ? url + 'index' : url}.html` diff --git a/server.ts b/server.ts index 01dc342..e8f566c 100644 --- a/server.ts +++ b/server.ts @@ -77,13 +77,13 @@ export async function createServer( render = (await import('./dist/server/entry-server.js')).render } - const [appHtml, preloadLinks, titlePrefix, metaDescription] = await render(url, manifest) + const [appHtml, preloadLinks, titlePrefix, meta] = await render(url, manifest) const html = template .replace(``, preloadLinks) .replace(``, appHtml) .replace(``, titlePrefix) - .replace(``, metaDescription) + .replace(``, meta) .replace(``, SiteConfiguration.titleSuffix) res.status(200).set({ 'Content-Type': 'text/html' }).end(html) diff --git a/src/data/activities/the-ultimate-markdown-benchmark.md b/src/data/activities/the-ultimate-markdown-benchmark.md index caa0b8e..d357b8b 100644 --- a/src/data/activities/the-ultimate-markdown-benchmark.md +++ b/src/data/activities/the-ultimate-markdown-benchmark.md @@ -1,7 +1,8 @@ --- title: ~THE ULTIMATE MARKDOWN BENCHMARK!!!~ time: 2024-12-25 -metaDescription: 尝试所有在本项目中合法的 Markdown 语法 +meta: + description: 尝试所有在本项目中合法的 Markdown 语法 --- Merry, merry Christmas diff --git a/src/data/announcements/scant-press.md b/src/data/announcements/scant-press.md index 4716a29..edc690c 100644 --- a/src/data/announcements/scant-press.md +++ b/src/data/announcements/scant-press.md @@ -1,6 +1,9 @@ --- title: Introducing ScantPress time: 2024-12-27 +meta: + description: A brief introduction to ScantPress + generator: ScantPress 0.0.1 --- ::: info diff --git a/src/data/pagedata.ts b/src/data/pagedata.ts index 24de5a8..8aab9d3 100644 --- a/src/data/pagedata.ts +++ b/src/data/pagedata.ts @@ -3,6 +3,6 @@ export interface PageData { title: string excerpt?: string contentUrl: string - metaDescription?: string - data: { [key: string]: unknown } + meta?: { [key: string]: string } + data?: { [key: string]: unknown } } diff --git a/src/entry-server.ts b/src/entry-server.ts index 3ca79f4..69b5aca 100644 --- a/src/entry-server.ts +++ b/src/entry-server.ts @@ -21,7 +21,8 @@ export async function render(url: string, manifest: { [key: string]: string[] }) // which we can then use to determine what files need to be preloaded for this // request. const preloadLinks = renderPreloadLinks(ctx.modules, manifest) - return [html, preloadLinks, ctx.titlePrefix ?? '', ctx.metaDescription ?? ''] + const meta = renderMeta(ctx.meta) + return [html, preloadLinks, ctx.titlePrefix ?? '', meta] } function renderPreloadLinks(modules: Set, manifest: { [key: string]: string[] }) { @@ -67,3 +68,13 @@ function renderPreloadLink(file: string) { return '' } } + +function renderMeta(meta: { [key: string]: string } | undefined | null): string { + if (!meta) return '' + let result = '' + for (const key in meta) { + if (!meta[key]) continue + result += `` + } + return result +} diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 9facef6..ec12566 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -39,9 +39,13 @@ onMounted(() => { if (import.meta.env.SSR) { const ctx = useSSRContext() - if (ctx) - ctx.metaDescription = + if (ctx) { + if (!ctx.meta) { + ctx.meta = {} + } + ctx.meta.description = '北京大学学生 Linux 俱乐部是由学生自发成立的民间组织,以学习研究 Linux 操作系统和其它各种与开源相关的软硬件技术为目的。' + } } diff --git a/src/views/NotFoundView.vue b/src/views/NotFoundView.vue index d3da21f..fb74ae0 100644 --- a/src/views/NotFoundView.vue +++ b/src/views/NotFoundView.vue @@ -12,7 +12,10 @@ if (import.meta.env.SSR) { const context = useSSRContext() if (context) { context.titlePrefix = '404 NOT FOUND | ' - context.metaDescription = '未找到此页面...' + if (!context.meta) { + context.meta = {} + } + context.meta.description = '未找到此页面...' } } diff --git a/src/views/PageView.vue b/src/views/PageView.vue index b0bf6c9..8de4994 100644 --- a/src/views/PageView.vue +++ b/src/views/PageView.vue @@ -41,13 +41,9 @@ title.value = currentPage.value?.title : `${pageCategory.value} - ` if (ssrContext) { ssrContext.titlePrefix = title.value - ssrContext.metaDescription = ( - (currentPage.value?.metaDescription as string | undefined) - ? (currentPage.value?.metaDescription as string) - : currentPage.value?.excerpt - ? currentPage.value.excerpt - : (currentPage.value?.title ?? SiteConfiguration.titleSuffix) - ).trim() + const meta: { [key: string]: string } = currentPage.value?.meta ?? {} + meta.description = (meta.description ?? currentPage.value?.excerpt)?.trim() + ssrContext.meta = meta } const scrollViewRef = ref() const showTitle = ref(false)