Skip to content

Commit 573383d

Browse files
authored
add document for breadcrumbs plugin (#330)
1 parent 99d7970 commit 573383d

File tree

10 files changed

+335
-87
lines changed

10 files changed

+335
-87
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ To find out the integration name, there is a list of integrations below.
8686
- [UnoCSS (for Obsidian)](https://github.com/nolebase/obsidian-plugin-unocss)
8787
- [Auto Sidebar (for VitePress)](./packages/vitepress-plugin-sidebar/README.md)
8888
- [Bi-Directional Links (for `markdown-it`)](./packages/markdown-it-bi-directional-links/README.md)
89+
- [Breadcrumbs (for VitePress)](./packages/vitepress-plugin-breadcrumbs/README.md)
8990
- [Elements Transformation (for `markdown-it`)](./packages/markdown-it-element-transform/README.md)
9091
- [Lazy loading blurred thumbnails (for `markdown-it`)](./packages/markdown-it-unlazy-img/README.md)
9192
- [Enhanced Readabilities (for VitePress)](./packages/vitepress-plugin-enhanced-readabilities/README.md)

README.zh-CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ ni @nolebase/<integration-name> -D
8585
- [UnoCSS (Obsidian 插件)](https://github.com/nolebase/obsidian-plugin-unocss)
8686
- [自动生成侧边栏(VitePress 插件)](./packages/vitepress-plugin-sidebar/README.md)
8787
- [双向链接(`markdown-it` 插件)](./packages/markdown-it-bi-directional-links/README.md)
88+
- [面包屑导航(VitePress 插件)](./packages/vitepress-plugin-breadcrumbs/README.md)
8889
- [元素转换(`markdown-it` 插件)](./packages/markdown-it-element-transform/README.md)
8990
- [懒加载模糊预览图(`markdown-it` 插件)](./packages/markdown-it-unlazy-img/README.md)
9091
- [阅读增强(VitePress 插件)](./packages/vitepress-plugin-enhanced-readabilities/README.md)

docs/.vitepress/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export const sidebars: Record<string, DefaultTheme.Sidebar> = {
5454
text: 'VitePress Plugins',
5555
items: [
5656
{ text: 'Auto Sidebar', link: '/pages/en/integrations/vitepress-plugin-sidebar/' },
57+
{ text: 'Breadcrumbs', link: '/pages/en/integrations/vitepress-plugin-breadcrumbs/' },
5758
{ text: 'Enhanced Readabilities', link: '/pages/en/integrations/vitepress-plugin-enhanced-readabilities/' },
5859
{ text: 'Index Page', link: '/pages/en/integrations/vitepress-plugin-index/' },
5960
{
@@ -185,6 +186,7 @@ export const sidebars: Record<string, DefaultTheme.Sidebar> = {
185186
text: 'VitePress 插件',
186187
items: [
187188
{ text: '自动生成侧边栏', link: '/pages/zh-CN/integrations/vitepress-plugin-sidebar/' },
189+
{ text: '面包屑导航', link: '/pages/zh-CN/integrations/vitepress-plugin-breadcrumbs/' },
188190
{ text: '阅读增强', link: '/pages/zh-CN/integrations/vitepress-plugin-enhanced-readabilities/' },
189191
{ text: '索引页', link: '/pages/zh-CN/integrations/vitepress-plugin-index/' },
190192
{

docs/pages/en/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ nolebase:
4040
<script setup>
4141
import sidebarPackageJSON from '~/packages/vitepress-plugin-sidebar/package.json'
4242
import biDirectionalLinksPackageJSON from '~/packages/markdown-it-bi-directional-links/package.json'
43+
import breadcrumbsPackageJSON from '~/packages/vitepress-plugin-breadcrumbs/package.json'
4344
import elementTransform from '~/packages/markdown-it-element-transform/package.json'
4445
import unlazyImg from '~/packages/markdown-it-unlazy-img/package.json'
4546
import enhancedReadabilities from '~/packages/vitepress-plugin-enhanced-readabilities/package.json'
@@ -82,6 +83,12 @@ Nólëbase Integrations project provides a variety of integrations, plugins, com
8283
</template>
8384
</IntegrationCard>
8485

86+
<IntegrationCard type="vitepress" title="Breadcrumbs" package="vitepress-plugin-breadcrumbs">
87+
<template v-slot:badge>
88+
<Badge type="tip" :text="`v${breadcrumbsPackageJSON.version}`" />
89+
</template>
90+
</IntegrationCard>
91+
8592
<IntegrationCard type="vitepress" title="Enhanced Readabilities" package="vitepress-plugin-enhanced-readabilities">
8693
<template v-slot:badge>
8794
<Badge type="tip" :text="`v${enhancedReadabilities.version}`" />

docs/pages/en/integrations/index.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ category: Index
66
<script setup>
77
import sidebarPackageJSON from '~/packages/vitepress-plugin-sidebar/package.json'
88
import biDirectionalLinksPackageJSON from '~/packages/markdown-it-bi-directional-links/package.json'
9+
import breadcrumbsPackageJSON from '~/packages/vitepress-plugin-breadcrumbs/package.json'
910
import elementTransform from '~/packages/markdown-it-element-transform/package.json'
1011
import unlazyImg from '~/packages/markdown-it-unlazy-img/package.json'
1112
import enhancedReadabilities from '~/packages/vitepress-plugin-enhanced-readabilities/package.json'
@@ -57,6 +58,14 @@ Nólëbase Integrations project provides a variety of integrations, plugins, com
5758

5859
<br />
5960

61+
<IntegrationCard type="vitepress" title="Breadcrumbs" package="vitepress-plugin-breadcrumbs">
62+
<template v-slot:badge>
63+
<Badge type="tip" :text="`v${breadcrumbsPackageJSON.version}`" />
64+
</template>
65+
</IntegrationCard>
66+
67+
<br />
68+
6069
<IntegrationCard type="vitepress" title="Enhanced Readabilities" package="vitepress-plugin-enhanced-readabilities">
6170
<template v-slot:badge>
6271
<Badge type="tip" :text="`v${enhancedReadabilities.version}`" />
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
---
2+
title: Breadcrumbs
3+
category: Breadcrumbs
4+
---
5+
6+
<script setup>
7+
import packageJSON from '~/packages/vitepress-plugin-breadcrumbs/package.json'
8+
</script>
9+
10+
# Breadcrumbs <Badge type="tip" :text="`v${packageJSON.version}`" />
11+
12+
## Installation
13+
14+
Install `@nolebase/vitepress-plugin-breadcrumbs` to your project dependencies by running the following command:
15+
16+
::: code-group
17+
18+
```shell [@antfu/ni]
19+
ni @nolebase/vitepress-plugin-breadcrumbs
20+
```
21+
22+
```shell [pnpm]
23+
pnpm add @nolebase/vitepress-plugin-breadcrumbs
24+
```
25+
26+
```shell [npm]
27+
npm install @nolebase/vitepress-plugin-breadcrumbs
28+
```
29+
30+
```shell [yarn]
31+
yarn add @nolebase/vitepress-plugin-breadcrumbs
32+
```
33+
34+
```shell [bun]
35+
bun install @nolebase/vitepress-plugin-breadcrumbs
36+
```
37+
38+
:::
39+
40+
## Configuration
41+
42+
### Integrate with VitePress
43+
44+
In the VitePress configuration file (usually `docs/.vitepress/config.ts`, the file path and extension may be different), import `@nolebase/vitepress-plugin-breadcrumbs`, and put it into `transformPageData` function:
45+
46+
<!--@include: @/pages/en/snippets/details-colored-diff.md-->
47+
48+
<!--@include: @/pages/en/snippets/configure-tsconfig.md-->
49+
50+
```typescript twoslash
51+
import { defineConfig } from 'vitepress'
52+
import { generateBreadcrumbsData } from '@nolebase/vitepress-plugin-breadcrumbs' // [!code ++]
53+
54+
export default defineConfig({
55+
// Other configurations...
56+
transformPageData(pageData, context) { // [!code ++]
57+
generateBreadcrumbsData(pageData, context) // [!code ++]
58+
}, // [!code ++]
59+
})
60+
61+
```
62+
63+
Then please add the Breadcrumbs plugin package name `@nolebase/vitepress-plugin-breadcrumbs` into the Vite options that required by VitePress to process this plugin:
64+
65+
<!--@include: @/pages/en/snippets/details-colored-diff.md-->
66+
67+
<!--@include: @/pages/en/snippets/configure-tsconfig.md-->
68+
69+
```typescript twoslash
70+
// https://vitepress.dev/reference/site-config
71+
export default defineConfig({
72+
vite: { // [!code ++]
73+
optimizeDeps: { // [!code ++]
74+
exclude: [ // [!code ++]
75+
'@nolebase/vitepress-plugin-breadcrumbs/client' // [!code ++]
76+
] // [!code ++]
77+
}, // [!code ++]
78+
ssr: { // [!code ++]
79+
noExternal: [ // [!code ++]
80+
// If there are other packages that need to be processed by Vite, you can add them
81+
'@nolebase/vitepress-plugin-breadcrumbs' // [!code ++]
82+
]// [!code ++]
83+
} // [!code ++]
84+
}, // [!code ++]
85+
// Other configurations...
86+
})
87+
```
88+
89+
### Add plugin into the Theme options of VitePress
90+
91+
In VitePress's [**theme configuration file**](https://vitepress.dev/reference/default-theme-config#default-theme-config) (note that it's not a **configuration file**, it's usually located at `docs/.vitepress/theme/index.ts`, file paths and extensions may be vary), import `@nolebase/vitepress-plugin-breadcrumbs` package and add it to the `Layout` section as a slot:
92+
93+
<!--@include: @/pages/en/snippets/details-colored-diff.md-->
94+
95+
<!--@include: @/pages/en/snippets/configure-tsconfig.md-->
96+
97+
::: code-group
98+
99+
```typescript twoslash [docs/.vitepress/theme/index.ts]
100+
import type { Theme as ThemeConfig } from 'vitepress'
101+
import DefaultTheme from 'vitepress/theme'
102+
import { h } from 'vue'
103+
104+
import { NolebaseBreadcrumbs } from '@nolebase/vitepress-plugin-breadcrumbs/client' // [!code ++]
105+
106+
export const Theme: ThemeConfig = {
107+
extends: DefaultTheme,
108+
Layout: () => {
109+
return h(DefaultTheme.Layout, null, {
110+
// Add breadcrumb above document
111+
'doc-before': () => h(NolebaseBreadcrumbs), // [!code ++]
112+
})
113+
}
114+
}
115+
116+
export default Theme
117+
```
118+
119+
:::
120+
121+
## Use custom breadcrumbs component
122+
123+
If you don't like the style or other something of default breadcrumb component, you can create your own component, this plugin will inject breadcrumb data into `frontmatter` of the page, so you can use breadcrumb data like this:
124+
125+
```vue
126+
<script setup lang="ts">
127+
import { useData } from 'vitepress'
128+
129+
const { frontmatter } = useData()
130+
131+
console.log(frontmatter.breadcrumbs)
132+
// and do something other...
133+
</script>
134+
135+
<template>
136+
<div>
137+
<!-- ui of your own component -->
138+
</div>
139+
</template>
140+
```
141+
142+
The `breadcrumbs` property is an array:
143+
144+
```typescript
145+
type Breadcrumbs = {
146+
title: string
147+
link: string
148+
}[]
149+
```
150+
151+
If there isn't a `index.md` in the directory, the `link` will be an empty string `""`

docs/pages/en/integrations/vitepress-plugin-sidebar/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ yarn add @nolebase/vitepress-plugin-sidebar -D
3737

3838
### Integrate with VitePress
3939

40-
In the VitePress configuration file (usually `docs/.vitepress/config.ts`, the file path and extension may be different), import `@nolebase/markdown-it-bi-directional-links` as a plugin, and use it as a `markdown-it` plugin in the `markdown` option:
40+
In the VitePress configuration file (usually `docs/.vitepress/config.ts`, the file path and extension may be different), import `@nolebase/vitepress-plugin-sidebar` as a plugin:
4141

4242
<!--@include: @/pages/en/snippets/details-colored-diff.md-->
4343

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
---
2+
title: 面包屑导航
3+
category: 面包屑导航
4+
---
5+
6+
<script setup>
7+
import packageJSON from '~/packages/vitepress-plugin-breadcrumbs/package.json'
8+
</script>
9+
10+
# 面包屑导航 <Badge type="tip" :text="`v${packageJSON.version}`" />
11+
12+
## 安装
13+
14+
你可以通过下面的指令将 `@nolebase/vitepress-plugin-breadcrumbs` 安装到你的项目依赖中:
15+
16+
::: code-group
17+
18+
```shell [@antfu/ni]
19+
ni @nolebase/vitepress-plugin-breadcrumbs
20+
```
21+
22+
```shell [pnpm]
23+
pnpm add @nolebase/vitepress-plugin-breadcrumbs
24+
```
25+
26+
```shell [npm]
27+
npm install @nolebase/vitepress-plugin-breadcrumbs
28+
```
29+
30+
```shell [yarn]
31+
yarn add @nolebase/vitepress-plugin-breadcrumbs
32+
```
33+
34+
```shell [bun]
35+
bun install @nolebase/vitepress-plugin-breadcrumbs
36+
```
37+
38+
:::
39+
40+
## 使用
41+
42+
### 为 VitePress 配置
43+
44+
在 VitePress 的配置文件中(通常为 `docs/.vitepress/config.ts`,文件路径和拓展名也许会有区别),将 `@nolebase/vitepress-plugin-breadcrumbs` 导入并且将它放置到 `transformPageData` 函数中:
45+
46+
<!--@include: @/pages/zh-CN/snippets/details-colored-diff.md-->
47+
48+
<!--@include: @/pages/zh-CN/snippets/configure-tsconfig.md-->
49+
50+
```typescript twoslash
51+
import { defineConfig } from 'vitepress'
52+
import { generateBreadcrumbsData } from '@nolebase/vitepress-plugin-breadcrumbs' // [!code ++]
53+
54+
export default defineConfig({
55+
// 其它各种配置...
56+
transformPageData(pageData, context) { // [!code ++]
57+
generateBreadcrumbsData(pageData, context) // [!code ++]
58+
}, // [!code ++]
59+
})
60+
61+
```
62+
63+
将面包屑导航到的插件包 `@nolebase/vitepress-plugin-breadcrumbs` 添加到需要 VitePress 底层的 Vite 帮忙处理的依赖:
64+
65+
<!--@include: @/pages/zh-CN/snippets/details-colored-diff.md-->
66+
67+
<!--@include: @/pages/zh-CN/snippets/configure-tsconfig.md-->
68+
69+
```typescript twoslash
70+
// https://vitepress.dev/reference/site-config
71+
export default defineConfig({
72+
vite: { // [!code ++]
73+
optimizeDeps: { // [!code ++]
74+
exclude: [ // [!code ++]
75+
'@nolebase/vitepress-plugin-breadcrumbs/client' // [!code ++]
76+
] // [!code ++]
77+
}, // [!code ++]
78+
ssr: { // [!code ++]
79+
noExternal: [ // [!code ++]
80+
// 如果还有别的依赖需要添加的话,并排填写和配置到这里即可
81+
'@nolebase/vitepress-plugin-breadcrumbs' // [!code ++]
82+
]// [!code ++]
83+
} // [!code ++]
84+
}, // [!code ++]
85+
// 其它的配置
86+
})
87+
```
88+
89+
### 添加 VitePress 主题相关的配置
90+
91+
在 VitePress 的[**主题配置文件**](https://vitepress.dev/reference/default-theme-config#default-theme-config)中(注意不是**配置文件**,通常为 `docs/.vitepress/theme/index.ts`,文件路径和拓展名也许会有区别),**`@nolebase/vitepress-plugin-breadcrumbs` 导入,并且将其添加到 `Layout` 的拓展中**
92+
93+
<!--@include: @/pages/zh-CN/snippets/details-colored-diff.md-->
94+
95+
<!--@include: @/pages/zh-CN/snippets/configure-tsconfig.md-->
96+
97+
::: code-group
98+
99+
```typescript twoslash [docs/.vitepress/theme/index.ts]
100+
import type { Theme as ThemeConfig } from 'vitepress'
101+
import DefaultTheme from 'vitepress/theme'
102+
import { h } from 'vue'
103+
104+
import { NolebaseBreadcrumbs } from '@nolebase/vitepress-plugin-breadcrumbs/client' // [!code ++]
105+
106+
export const Theme: ThemeConfig = {
107+
extends: DefaultTheme,
108+
Layout: () => {
109+
return h(DefaultTheme.Layout, null, {
110+
// 将面包屑导航组件添加到文档上方
111+
'doc-before': () => h(NolebaseBreadcrumbs), // [!code ++]
112+
})
113+
}
114+
}
115+
116+
export default Theme
117+
```
118+
119+
:::
120+
121+
## 使用自定义的面包屑导航插件
122+
123+
如果你不喜欢默认的面包屑导航组件的样式或者别的东西,你可以创建一个自己的足迹,插件会将生成的面包屑数据注入到页面的 `frontmatter` 中去,所以你可以这样使用它:
124+
125+
```vue
126+
<script setup lang="ts">
127+
import { useData } from 'vitepress'
128+
129+
const { frontmatter } = useData()
130+
131+
console.log(frontmatter.breadcrumbs)
132+
// 做一些其它的事情
133+
</script>
134+
135+
<template>
136+
<div>
137+
<!-- 你自己的组件 UI -->
138+
</div>
139+
</template>
140+
```
141+
142+
`breadcrumbs` 属性是一个数组:
143+
144+
```typescript
145+
type Breadcrumbs = {
146+
title: string
147+
link: string
148+
}[]
149+
```
150+
151+
如果某个文件夹中不存在 `index.md``link` 属性将会是空字符串 `""`

0 commit comments

Comments
 (0)