feat: exclude sidebar item by frontmatter (#272)

pull/286/head
Rizumu Ayaka 2024-03-07 16:09:35 +08:00
parent a4a184a788
commit f5bfb5426d
3 changed files with 18 additions and 14 deletions

View File

@ -1,44 +1,48 @@
import { type DefaultTheme } from 'vitepress' import { type DefaultTheme } from 'vitepress'
import { SidebarItem, generateSidebar } from 'vitepress-sidebar' import { SidebarItem, SidebarMultiItem, generateSidebar } from 'vitepress-sidebar'
export const sidebar = generate() export const sidebar = generate()
function generate() { function generate() {
const baseConfig = {
useTitleFromFrontmatter: true,
excludeFilesByFrontmatter: true,
}
let sidebar = generateSidebar([ let sidebar = generateSidebar([
// 大学指南 // 大学指南
{ {
...baseConfig,
documentRootPath: '/docs', documentRootPath: '/docs',
scanStartPath: 'campus', scanStartPath: 'campus',
resolvePath: '/campus/', resolvePath: '/campus/',
useTitleFromFrontmatter: true,
}, },
// 贡献指南 // 贡献指南
{ {
...baseConfig,
documentRootPath: '/docs', documentRootPath: '/docs',
scanStartPath: 'contributor-guide', scanStartPath: 'contributor-guide',
resolvePath: '/contributor-guide/', resolvePath: '/contributor-guide/',
useTitleFromFrontmatter: true,
}, },
// Fashion // Fashion
{ {
...baseConfig,
documentRootPath: '/docs', documentRootPath: '/docs',
scanStartPath: 'fashion', scanStartPath: 'fashion',
resolvePath: '/fashion/', resolvePath: '/fashion/',
useTitleFromFrontmatter: true,
}, },
// 防护 // 防护
{ {
...baseConfig,
documentRootPath: '/docs', documentRootPath: '/docs',
scanStartPath: 'personal-safety', scanStartPath: 'personal-safety',
resolvePath: '/personal-safety/', resolvePath: '/personal-safety/',
useTitleFromFrontmatter: true,
} }
])
// 这个 `as` 源于 vitepress-sidebar 的类型定义与实际情况的差异,目前不影响使用,后续 vitepress-sidebar 修复后可以移除。
]) as DefaultTheme.Config['sidebar']
for (const key in sidebar) { for (const key in sidebar) {
sidebar[key].items.sort(sidebarTitleSorter) const sidebarMultiItem: SidebarMultiItem = (sidebar as any)[key]
sidebarMultiItem.items.sort(sidebarTitleSorter)
} }
return sidebar return sidebar
} }

View File

@ -32,7 +32,7 @@
"unplugin-vue-components": "^0.26.0", "unplugin-vue-components": "^0.26.0",
"vite": "^5.1.3", "vite": "^5.1.3",
"vitepress": "1.0.0-rc.42", "vitepress": "1.0.0-rc.42",
"vitepress-sidebar": "^1.18.6", "vitepress-sidebar": "^1.19.0",
"vue": "^3.4.19", "vue": "^3.4.19",
"wrangler": "^3.25.0" "wrangler": "^3.25.0"
}, },

View File

@ -63,8 +63,8 @@ importers:
specifier: 1.0.0-rc.42 specifier: 1.0.0-rc.42
version: 1.0.0-rc.42(@algolia/client-search@4.22.1)(postcss@8.4.35)(search-insights@2.13.0) version: 1.0.0-rc.42(@algolia/client-search@4.22.1)(postcss@8.4.35)(search-insights@2.13.0)
vitepress-sidebar: vitepress-sidebar:
specifier: ^1.18.6 specifier: ^1.19.0
version: 1.18.6 version: 1.19.0
vue: vue:
specifier: ^3.4.19 specifier: ^3.4.19
version: 3.4.19 version: 3.4.19
@ -3153,8 +3153,8 @@ packages:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true dev: true
/vitepress-sidebar@1.18.6: /vitepress-sidebar@1.19.0:
resolution: {integrity: sha512-nXdaZGU28kHKsAnaDM8hQdofwLkm3sURJ21z/vmDKin6884ONx31ctTAG4ZcA5ROGuqpcvxrKxOiSOlfDS7BZg==} resolution: {integrity: sha512-zX8DyFrMEvXhNj64q0OZsaDddkoxH7Z8fRD9zAa5zI0s3z5k5LxUXRpmsamjZaR5ut7P+tkiRuEnnheHCCEuPA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
dependencies: dependencies:
gray-matter: 4.0.3 gray-matter: 4.0.3