Skip to content

Commit e33196b

Browse files
feat: Add pre/next links to /faq/* (#482)
1 parent fc33f3a commit e33196b

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

wiki/.vitepress/config.mts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import { defineConfig } from 'vitepress'
1+
import assert from 'node:assert'
2+
3+
import { defineConfig, type DefaultTheme } from 'vitepress'
24
import * as footnote from 'markdown-it-footnote'
35

4-
import { generate_index_tex } from './theme/faq_data'
6+
import { generate_index_tex, generate_prev_next_links } from './theme/faq_data'
57
import LinkRender from './theme/link_render'
68

79
export default defineConfig({
@@ -83,6 +85,7 @@ export default defineConfig({
8385
{ text: '将 LaTeX 转换为 Word', link: '/guide/converting-to-word' },
8486
{ text: 'LaTeX 学习与使用资源', link: '/guide/resources' },
8587
{ text: '常用命令', link: '/guide/commands' },
88+
// `/faq/`会记于`*.tex`的注释中,需尽量简短,故不前缀`/guide/`;相关影响在`transformPageData`中修复
8689
{ text: '疑难杂症', link: '/faq/' },
8790
],
8891
},
@@ -146,4 +149,24 @@ export default defineConfig({
146149
}
147150
},
148151
buildEnd: generate_index_tex,
152+
transformPageData(page, context) {
153+
// Add pre/next links to `/faq/*`
154+
// https://vitepress.dev/reference/default-theme-prev-next-links
155+
if (page.relativePath === 'faq/index.md') {
156+
// 确认`sidebar`改得不太多
157+
const sidebar = context.siteConfig.userConfig.themeConfig.sidebar['/guide'] as DefaultTheme.SidebarItem[]
158+
assert.ok(sidebar)
159+
const section = sidebar.at(-2)
160+
assert.strictEqual(section?.text, '常见问题')
161+
assert.strictEqual(section.items?.at(-1)?.link, '/faq/')
162+
163+
// Fix pre/next links
164+
page.frontmatter.prev ??= section.items.at(-2)
165+
page.frontmatter.next ??= sidebar.at(-1)?.items?.at(0)
166+
} else if (page.relativePath.startsWith('faq/')) {
167+
const { prev, next } = generate_prev_next_links(page)
168+
page.frontmatter.prev ??= prev
169+
page.frontmatter.next ??= next
170+
}
171+
},
149172
})

wiki/.vitepress/theme/faq_data.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { writeFileSync } from 'node:fs'
66
import path from 'node:path'
77

88
import matter from 'gray-matter'
9-
import { createContentLoader, type SiteConfig } from 'vitepress'
9+
import { createContentLoader, type PageData, type SiteConfig } from 'vitepress'
1010

11-
import { normalizeTag } from './util'
11+
import { normalizeTag, tagURL } from './util'
1212

1313
export interface FAQItem {
1414
title: string
@@ -121,3 +121,18 @@ function as_latex_href(title: string, url: string): string {
121121
])
122122
return `\\href{${url}}{${escaped}}`
123123
}
124+
125+
/**
126+
* Generate [prev/next links](https://vitepress.dev/reference/default-theme-prev-next-links).
127+
*/
128+
export function generate_prev_next_links(page: PageData): {
129+
prev: { text: string; link: string }
130+
next?: { text: string; link: string }
131+
} {
132+
const prev = { text: '疑难解答', link: '/faq/' }
133+
134+
const tag = normalizeTag(page.frontmatter.tag).at(0)
135+
const next = tag ? { text: `${tag} 问题目录`, link: tagURL(tag) } : undefined
136+
137+
return { prev, next }
138+
}

0 commit comments

Comments
 (0)