Skip to content

Commit

Permalink
refactor meta
Browse files Browse the repository at this point in the history
djdjz7 committed Dec 29, 2024
1 parent 490c612 commit 104d24f
Showing 11 changed files with 40 additions and 22 deletions.
6 changes: 3 additions & 3 deletions generator/page-list-generator.ts
Original file line number Diff line number Diff line change
@@ -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}`,
}
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="<!--meta-description-->" />
<!--meta-->
<title><!--title-prefix--><!--title-suffix-->></title>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
4 changes: 2 additions & 2 deletions prerender.ts
Original file line number Diff line number Diff line change
@@ -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(`<!--preload-links-->`, preloadLinks)
.replace(`<!--app-html-->`, appHtml)
.replace(`<!--title-prefix-->`, titlePrefix)
.replace(`<!--meta-description-->`, metaDescription)
.replace(`<!--meta-->`, meta)
.replace(`<!--title-suffix-->`, SiteConfiguration.titleSuffix)

const filePath = `dist/static${url.endsWith('/') ? url + 'index' : url}.html`
4 changes: 2 additions & 2 deletions server.ts
Original file line number Diff line number Diff line change
@@ -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(`<!--preload-links-->`, preloadLinks)
.replace(`<!--app-html-->`, appHtml)
.replace(`<!--title-prefix-->`, titlePrefix)
.replace(`<!--meta-description-->`, metaDescription)
.replace(`<!--meta-->`, meta)
.replace(`<!--title-suffix-->`, SiteConfiguration.titleSuffix)

res.status(200).set({ 'Content-Type': 'text/html' }).end(html)
3 changes: 2 additions & 1 deletion src/data/activities/the-ultimate-markdown-benchmark.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
---
title: ~THE ULTIMATE MARKDOWN BENCHMARK!!!~
time: 2024-12-25
metaDescription: 尝试所有在本项目中合法的 Markdown 语法
meta:
description: 尝试所有在本项目中合法的 Markdown 语法
---

Merry, merry Christmas
3 changes: 3 additions & 0 deletions src/data/announcements/scant-press.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
---
title: Introducing ScantPress
time: 2024-12-27
meta:
description: A brief introduction to ScantPress
generator: ScantPress 0.0.1
---

::: info
4 changes: 2 additions & 2 deletions src/data/pagedata.ts
Original file line number Diff line number Diff line change
@@ -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 }
}
13 changes: 12 additions & 1 deletion src/entry-server.ts
Original file line number Diff line number Diff line change
@@ -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<string>, 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 += `<meta name="${key}" content="${meta[key]}">`
}
return result
}
8 changes: 6 additions & 2 deletions src/views/HomeView.vue
Original file line number Diff line number Diff line change
@@ -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 操作系统和其它各种与开源相关的软硬件技术为目的。'
}
}
</script>

5 changes: 4 additions & 1 deletion src/views/NotFoundView.vue
Original file line number Diff line number Diff line change
@@ -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 = '未找到此页面...'
}
}
</script>
10 changes: 3 additions & 7 deletions src/views/PageView.vue
Original file line number Diff line number Diff line change
@@ -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<HTMLDivElement>()
const showTitle = ref(false)

0 comments on commit 104d24f

Please sign in to comment.