mirror of
https://github.com/m1ngsama/documents.git
synced 2025-12-24 10:51:23 +00:00
init vitepress
This commit is contained in:
parent
f757775c10
commit
fdc94548ff
38 changed files with 2021 additions and 1 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -1 +1,3 @@
|
|||
.DS_Store
|
||||
.DS_Store
|
||||
node_modules
|
||||
.vitepress/cache
|
||||
24
.vitepress/config.mts
Normal file
24
.vitepress/config.mts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import { defineConfig } from 'vitepress'
|
||||
import { getMeetingMinutesSidebar } from '../meetings/sidebar'
|
||||
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
title: "Documents",
|
||||
description: "Documents for nbtca",
|
||||
themeConfig: {
|
||||
// https://vitepress.dev/reference/default-theme-config
|
||||
nav: [
|
||||
{ text: 'Home', link: '/' },
|
||||
{ text: 'Meeting Minutes', link: '/meetings' }
|
||||
],
|
||||
|
||||
sidebar: [
|
||||
...getMeetingMinutesSidebar()
|
||||
],
|
||||
|
||||
socialLinks: [
|
||||
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }
|
||||
]
|
||||
}
|
||||
})
|
||||
25
index.md
Normal file
25
index.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: "Documents"
|
||||
text: "Documents for nbtca"
|
||||
tagline: My great project tagline
|
||||
actions:
|
||||
- theme: brand
|
||||
text: Meeting minutes
|
||||
link: /meetings/index
|
||||
# - theme: alt
|
||||
# text: API Examples
|
||||
# link: /api-examples
|
||||
|
||||
features:
|
||||
- title: Feature A
|
||||
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
|
||||
- title: Feature B
|
||||
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
|
||||
- title: Feature C
|
||||
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
|
||||
---
|
||||
|
||||
1
meetings/index.md
Normal file
1
meetings/index.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
12
|
||||
63
meetings/sidebar.ts
Normal file
63
meetings/sidebar.ts
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
import { scanDir } from "../utils/sidebar"
|
||||
import dayjs from "dayjs"
|
||||
|
||||
|
||||
type MeetingMinutesParsed = {
|
||||
date: Date
|
||||
fileNameWithoutDate: string
|
||||
fileName: string
|
||||
link: string
|
||||
}
|
||||
|
||||
const stripFileExtension = (filename: string) => {
|
||||
return filename.split(".").slice(0, -1).join(".")
|
||||
}
|
||||
|
||||
const parseFileName = (fileName: string, link: string): MeetingMinutesParsed => {
|
||||
const dateString = fileName.slice(0, 10)
|
||||
const date = new Date(dateString)
|
||||
|
||||
return {
|
||||
date,
|
||||
fileNameWithoutDate: stripFileExtension(fileName.slice(10)),
|
||||
fileName: fileName,
|
||||
link: link
|
||||
}
|
||||
}
|
||||
|
||||
export const getMeetingMinutesSidebar = () => {
|
||||
|
||||
const items = scanDir("meetings")
|
||||
|
||||
const groupedItems = items.reduce((acc, item) => {
|
||||
const parsed = parseFileName(item.filename, item.link)
|
||||
const year = parsed.date.getFullYear()
|
||||
if (!acc[year]) {
|
||||
acc[year] = []
|
||||
}
|
||||
acc[year].push(parsed)
|
||||
return acc
|
||||
}, {} as Record<number, MeetingMinutesParsed[]>)
|
||||
|
||||
const groupedSidebarItems = Object.keys(groupedItems).map(v => {
|
||||
const items: MeetingMinutesParsed[] = groupedItems[v]
|
||||
return {
|
||||
text: v.toString(),
|
||||
items: items
|
||||
.sort((a, b) => {
|
||||
return a.date > b.date ? 1 : -1
|
||||
})
|
||||
.map(v => {
|
||||
return {
|
||||
text: `${dayjs(v.date).format("YYYY-MM-DD")} ${v.fileNameWithoutDate}`,
|
||||
link: v.link
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
return groupedSidebarItems.sort((a, b) => {
|
||||
return b.text > a.text ? 1 : -1
|
||||
})
|
||||
|
||||
}
|
||||
23
package.json
Normal file
23
package.json
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"name": "documents",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "vitest",
|
||||
"docs:dev": "vitepress dev",
|
||||
"docs:build": "vitepress build",
|
||||
"docs:preview": "vitepress preview"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.6.3",
|
||||
"vitest": "^3.0.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": "^22.10.10",
|
||||
"dayjs": "^1.11.13"
|
||||
}
|
||||
}
|
||||
1866
pnpm-lock.yaml
Normal file
1866
pnpm-lock.yaml
Normal file
File diff suppressed because it is too large
Load diff
16
utils/sidebar.ts
Normal file
16
utils/sidebar.ts
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import { readdirSync } from "fs"
|
||||
import { resolve } from "path"
|
||||
|
||||
export const scanDir = (dirname: string) => {
|
||||
const dirpath = resolve(__dirname, `../${dirname}`)
|
||||
const res = readdirSync(dirpath)
|
||||
|
||||
const markdownFileNames = res.filter((name) => name.endsWith('.md'))
|
||||
|
||||
return markdownFileNames.map(v => {
|
||||
return {
|
||||
filename: v,
|
||||
link: resolve(dirpath, v)
|
||||
}
|
||||
})
|
||||
}
|
||||
Loading…
Reference in a new issue