63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import DefaultTheme from 'vitepress/theme'
|
|
import { sync } from "fast-glob"
|
|
|
|
export const sidebar: DefaultTheme.Config['sidebar'] = {
|
|
'/issues/': getItems("issues"),
|
|
'/fragments/': getItems("fragments")
|
|
}
|
|
|
|
/**
|
|
* 获取侧边栏分组及分组下标题
|
|
*
|
|
* @param path 扫描基础路径
|
|
* @returns {DefaultTheme.SidebarGroup[]}
|
|
*/
|
|
function getItems (path: string) {
|
|
// 侧边栏分组数组
|
|
let groups: DefaultTheme.SidebarGroup[] = []
|
|
// 侧边栏分组下标题数组
|
|
let items: DefaultTheme.SidebarItem[] = []
|
|
|
|
// 1.获取所有年份目录
|
|
sync(`repos/${path}/*`, {
|
|
onlyDirectories: true,
|
|
objectMode: true,
|
|
}).forEach(({ name }) => {
|
|
let year = name
|
|
for (let i = 1; i <= 12; i++) {
|
|
let month = i < 10 ? `0${i}` : i
|
|
// 2.获取所有月份目录下的文章
|
|
sync(`repos/${path}/${year}/${month}/*`, {
|
|
objectMode: true,
|
|
}).forEach(({ name }) => {
|
|
// 向前追加标题
|
|
items.unshift({
|
|
text: name,
|
|
link: `/${path}/${year}/${month}/${name}`,
|
|
})
|
|
})
|
|
|
|
// 3.向前追加分组
|
|
if (items.length > 0) {
|
|
// 去除标题名中的日期前缀和扩展名
|
|
for (let i = 0; i < items.length; i++) {
|
|
let text = items[i].text
|
|
items[i].text = text.replace('.md', '').substring(text.indexOf('.') + 1)
|
|
}
|
|
groups.unshift({
|
|
text: `${year}年${month}月 (${items.length}篇)`,
|
|
collapsible: true,
|
|
collapsed: true,
|
|
items: items
|
|
})
|
|
}
|
|
|
|
// 4.清空侧边栏分组下标题数组
|
|
items = []
|
|
}
|
|
})
|
|
|
|
// 5.将第一个侧边栏分组的标题展开
|
|
groups[0].collapsed = false
|
|
return groups
|
|
} |