mirror of
https://github.com/m1ngsama/documents.git
synced 2025-12-25 02:56:26 +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