├── .husky └── pre-commit ├── src ├── .vuepress │ ├── utils │ │ ├── index.ts │ │ └── normalizePackageName.ts │ ├── styles │ │ └── palette.scss │ ├── public │ │ ├── logo.png │ │ ├── favicon.ico │ │ └── assets │ │ │ └── logo │ │ │ └── algolia.svg │ ├── shims-vue.d.ts │ ├── client.ts │ ├── components │ │ ├── HomePage.vue │ │ ├── ProjectPanel.vue │ │ └── ProjectDetail.vue │ ├── config.ts │ └── theme.ts ├── themes │ ├── README.md │ ├── blog.md │ └── docs.md ├── zh │ ├── themes │ │ ├── README.md │ │ ├── blog.md │ │ └── docs.md │ ├── plugins │ │ ├── README.md │ │ ├── blog.md │ │ ├── manage.md │ │ ├── search.md │ │ ├── developer.md │ │ ├── feature.md │ │ └── markdown.md │ ├── README.md │ └── reference │ │ └── contributing.md ├── plugins │ ├── README.md │ ├── blog.md │ ├── manage.md │ ├── search.md │ ├── feature.md │ ├── developer.md │ └── markdown.md ├── README.md └── reference │ └── contributing.md ├── .prettierignore ├── .gitignore ├── CONTRIBUTING.md ├── .markdownlint-cli2.mjs ├── config ├── generateCrawler.js ├── themes │ ├── blog.json │ └── docs.json ├── vuejs.press.zone ├── plugins │ ├── search.json │ ├── blog.json │ ├── manage.json │ ├── developer.json │ ├── feature.json │ └── markdown.json └── crawler.js ├── tsconfig.json ├── .github └── workflows │ └── deploy-docs.yml ├── package.json ├── README.md └── LICENSE /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | pnpm nano-staged 2 | -------------------------------------------------------------------------------- /src/.vuepress/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./normalizePackageName.js"; 2 | -------------------------------------------------------------------------------- /src/.vuepress/styles/palette.scss: -------------------------------------------------------------------------------- 1 | $content-width: 980px; 2 | $home-page-width: 980px; 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .vuepress/.cache/ 3 | .vuepress/.temp/ 4 | 5 | pnpm-lock.yaml 6 | -------------------------------------------------------------------------------- /src/.vuepress/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vuepress/marketplace/HEAD/src/.vuepress/public/logo.png -------------------------------------------------------------------------------- /src/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vuepress/marketplace/HEAD/src/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /src/themes/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Themes 3 | icon: palette 4 | index: false 5 | dir: 6 | collapsible: false 7 | order: 2 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/zh/themes/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 主题 3 | icon: palette 4 | index: false 5 | dir: 6 | collapsible: false 7 | order: 2 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/plugins/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Plugins 3 | icon: puzzle-piece 4 | index: false 5 | dir: 6 | collapsible: false 7 | order: 1 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/zh/plugins/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 插件 3 | icon: puzzle-piece 4 | index: false 5 | dir: 6 | collapsible: false 7 | order: 1 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules/** 2 | 3 | # Vuepress Cache 4 | **/.vuepress/.cache/** 5 | # Vuepress Temp 6 | **/.vuepress/.temp/** 7 | # Vuepress Output 8 | dist/ 9 | 10 | .npmrc 11 | -------------------------------------------------------------------------------- /src/.vuepress/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.vue" { 2 | import type { ComponentOptions } from "vue"; 3 | 4 | const component: ComponentOptions; 5 | export default component; 6 | } 7 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guide 2 | 3 | ## [English version](https://marketplace.vuejs.press/reference/contributing.md) 4 | 5 | ## [中文版本](https://marketplace.vuejs.press/zh/reference/contributing.md) 6 | -------------------------------------------------------------------------------- /src/zh/plugins/blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 博客相关 3 | icon: blog 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/plugins/blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Blog Plugins 3 | icon: blog 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/zh/plugins/manage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 站点管理 3 | icon: gear 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/zh/plugins/search.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 搜索插件 3 | icon: search 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/plugins/manage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Site Management 3 | icon: gear 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/zh/plugins/developer.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 面向开发者 3 | icon: code 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/zh/plugins/feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 新功能 3 | icon: splotch 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/zh/themes/blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 博客主题 3 | icon: blog 4 | order: 2 5 | --- 6 | 7 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /src/zh/themes/docs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 文档主题 3 | icon: book 4 | order: 1 5 | --- 6 | 7 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /src/plugins/search.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Search Plugins 3 | icon: search 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/themes/blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Blog Themes 3 | icon: blog 4 | order: 2 5 | --- 6 | 7 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /src/themes/docs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Docs Themes 3 | icon: book 4 | order: 1 5 | --- 6 | 7 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /src/plugins/feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Plugins with New Features 3 | icon: splotch 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/plugins/developer.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Plugins facing developers 3 | icon: code 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/.vuepress/client.ts: -------------------------------------------------------------------------------- 1 | import { defineClientConfig } from "vuepress/client"; 2 | import ProjectPanel from "./components/ProjectPanel.vue"; 3 | 4 | export default defineClientConfig({ 5 | enhance: ({ app }) => { 6 | app.component("ProjectPanel", ProjectPanel); 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /src/plugins/markdown.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown Plugins 3 | icon: fab fa-markdown 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/zh/plugins/markdown.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown 相关 3 | icon: fab fa-markdown 4 | --- 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/.vuepress/components/HomePage.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 17 | -------------------------------------------------------------------------------- /.markdownlint-cli2.mjs: -------------------------------------------------------------------------------- 1 | export default { 2 | config: { 3 | default: true, 4 | MD003: { 5 | style: "atx", 6 | }, 7 | MD004: { 8 | style: "dash", 9 | }, 10 | MD013: false, 11 | MD024: { 12 | allow_different_nesting: true, 13 | }, 14 | MD033: { 15 | allowed_elements: [ 16 | "Catalog", 17 | "ProjectPanel", 18 | "details", 19 | "script", 20 | "summary", 21 | ], 22 | }, 23 | MD035: { 24 | style: "---", 25 | }, 26 | MD040: false, 27 | MD046: false, 28 | MD049: false, 29 | }, 30 | ignores: ["**/node_modules/**"], 31 | }; 32 | -------------------------------------------------------------------------------- /config/generateCrawler.js: -------------------------------------------------------------------------------- 1 | import { fs } from "vuepress/utils"; 2 | import crawler, { recordExtractorMap } from "./crawler.js"; 3 | 4 | const functionStore = []; 5 | 6 | let content = `new Crawler(${JSON.stringify( 7 | crawler, 8 | (key, value) => { 9 | if (typeof value === "function") { 10 | functionStore.push(value); 11 | 12 | return value.toString(); 13 | } 14 | 15 | return value; 16 | }, 17 | 2, 18 | )})`; 19 | 20 | functionStore.forEach((func) => { 21 | content = content.replaceAll( 22 | JSON.stringify(func.toString()), 23 | func.toString(), 24 | ); 25 | }); 26 | 27 | fs.writeFile("./crawler.config.js", content, { 28 | encoding: "utf-8", 29 | }); 30 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "lib": ["DOM", "ES2020"], 5 | "module": "ESNext", 6 | "moduleResolution": "Bundler", 7 | "noEmitOnError": true, 8 | "noImplicitAny": false, 9 | "skipLibCheck": true, 10 | "target": "ES2020", 11 | "baseUrl": ".", 12 | "jsx": "preserve", 13 | "paths": { 14 | "@theme-hope/*": ["./node_modules/vuepress-theme-hope/lib/client/*.js"], 15 | "@theme-hope/modules/navbar/components/icons": [ 16 | "./node_modules/vuepress-theme-hope/lib/client/modules/navbar/components/icons/index.js", 17 | ], 18 | }, 19 | }, 20 | "include": ["**/.vuepress/**/*"], 21 | "exclude": ["node_modules", ".temp", "dist"], 22 | } 23 | -------------------------------------------------------------------------------- /src/zh/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | index: false 4 | icon: home 5 | title: 主页 6 | heroImage: /logo.png 7 | heroText: VuePress 市场 8 | tagline: 在此找到正确的 VuePress2 插件与主题 9 | actions: 10 | - text: 插件 11 | link: /zh/plugins/ 12 | icon: puzzle-piece 13 | type: primary 14 | 15 | - text: 主题 16 | link: /zh/Themes/ 17 | icon: palette 18 | type: primary 19 | 20 | - text: 文档 21 | icon: book 22 | link: https://vuejs.press/zh/ 23 | --- 24 | 25 | ## 升级到最新的 VuePress2 26 | 27 | ::: code-tabs#shell 28 | 29 | @tab pnpm 30 | 31 | ```bash 32 | pnpm dlx vp-update 33 | ``` 34 | 35 | @tab yarn 36 | 37 | ```bash 38 | yarn dlx vp-update 39 | ``` 40 | 41 | @tab npm 42 | 43 | ```bash 44 | npx vp-update 45 | ``` 46 | 47 | ::: 48 | 49 | ## 添加你的主题和插件 50 | 51 | 请参阅 [贡献指南](./reference/contributing.md) 52 | 53 | ::: center 54 | 55 | ## 在此表达你的反馈 56 | 57 | ::: 58 | -------------------------------------------------------------------------------- /src/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | index: false 4 | icon: home 5 | title: Home 6 | heroImage: /logo.png 7 | heroText: VuePress Marketplace 8 | tagline: Find the correct VuePress2 plugins and themes here 9 | actions: 10 | - text: Plugins 11 | link: /plugins/ 12 | icon: puzzle-piece 13 | type: primary 14 | 15 | - text: Themes 16 | link: /themes/ 17 | icon: palette 18 | type: primary 19 | 20 | - text: Docs 21 | icon: book 22 | link: https://vuejs.press/ 23 | --- 24 | 25 | ## Upgrading to latest VuePress2 26 | 27 | ::: code-tabs#shell 28 | 29 | @tab pnpm 30 | 31 | ```bash 32 | pnpm dlx vp-update 33 | ``` 34 | 35 | @tab yarn 36 | 37 | ```bash 38 | yarn dlx vp-update 39 | ``` 40 | 41 | @tab npm 42 | 43 | ```bash 44 | npx vp-update 45 | ``` 46 | 47 | ::: 48 | 49 | ## Adding your theme and plugins 50 | 51 | See [Contributing Guide](./reference/contributing.md) 52 | 53 | ::: center 54 | 55 | ## Share your feedback here 56 | 57 | ::: 58 | -------------------------------------------------------------------------------- /.github/workflows/deploy-docs.yml: -------------------------------------------------------------------------------- 1 | name: Deploy docs 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | deploy-gh-pages: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | with: 15 | fetch-depth: 0 16 | 17 | - name: Install pnpm 18 | uses: pnpm/action-setup@v2 19 | with: 20 | run_install: true 21 | 22 | - name: Setup Node.js 23 | uses: actions/setup-node@v4 24 | with: 25 | node-version: 20 26 | cache: pnpm 27 | 28 | - name: Build docs 29 | env: 30 | NODE_OPTIONS: --max_old_space_size=8192 31 | run: |- 32 | pnpm run build 33 | > src/.vuepress/dist/.nojekyll 34 | 35 | - name: Deploy docs 36 | uses: JamesIves/github-pages-deploy-action@v4 37 | with: 38 | branch: netlify 39 | folder: src/.vuepress/dist 40 | -------------------------------------------------------------------------------- /src/.vuepress/public/assets/logo/algolia.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuepress-marketplace", 3 | "version": "1.0.0", 4 | "private": true, 5 | "description": "Market place for VuePress2 plugins and themes", 6 | "type": "module", 7 | "scripts": { 8 | "build": "vuepress build src", 9 | "clean-dev": "vuepress dev src --clean-cache", 10 | "dev": "vuepress dev src", 11 | "prepare": "husky", 12 | "lint": "prettier --check --write .", 13 | "lint:md": "markdownlint-cli2 '**/*.md'" 14 | }, 15 | "license": "CC0", 16 | "dependencies": { 17 | "@vuepress/bundler-vite": "2.0.0-rc.21", 18 | "@vuepress/helper": "2.0.0-rc.94", 19 | "sass-embedded": "1.87.0", 20 | "vue": "3.5.13", 21 | "vuepress": "2.0.0-rc.21", 22 | "vuepress-shared": "2.0.0-rc.81", 23 | "vuepress-theme-hope": "2.0.0-rc.82" 24 | }, 25 | "devDependencies": { 26 | "husky": "9.1.7", 27 | "markdownlint-cli2": "0.17.2", 28 | "nano-staged": "0.8.0", 29 | "prettier": "3.5.3" 30 | }, 31 | "packageManager": "pnpm@10.9.0", 32 | "nano-staged": { 33 | "**/*": "prettier --write --ignore-unknown", 34 | "*.md": "markdownlint-cli2" 35 | }, 36 | "pnpm": { 37 | "onlyBuiltDependencies": [ 38 | "esbuild" 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/.vuepress/components/ProjectPanel.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 38 | 39 | 59 | -------------------------------------------------------------------------------- /src/.vuepress/utils/normalizePackageName.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Normalize package name 3 | */ 4 | export const normalizePackageName = ( 5 | request: string, 6 | org: string, 7 | type: string | null = null, 8 | ): string => { 9 | // org prefix and type prefix 10 | const orgPrefix = `${org}-`; 11 | const typePrefix = type === null ? "" : `${type}-`; 12 | 13 | // scoped package pattern 14 | const scopedMatch = request.match(/^@(.*)\/(.*)$/); 15 | 16 | // handle non-scoped package 17 | if (scopedMatch === null) { 18 | // full name, return as is 19 | if (request.startsWith(`${orgPrefix}${typePrefix}`)) { 20 | return request; 21 | } 22 | 23 | // short name, add org prefix and type prefix 24 | return `${orgPrefix}${typePrefix}${request}`; 25 | } 26 | 27 | // handle scoped package 28 | const [, reqOrg, reqName] = scopedMatch; 29 | 30 | // handle default org 31 | if (reqOrg === org) { 32 | // full name, return as is 33 | if (reqName.startsWith(typePrefix)) { 34 | return request; 35 | } 36 | 37 | // short name, add type prefix 38 | return `@${reqOrg}/${typePrefix}${reqName}`; 39 | } 40 | 41 | // handle other org 42 | 43 | // full name, return as is 44 | if (reqName.startsWith(`${orgPrefix}${typePrefix}`)) { 45 | return request; 46 | } 47 | 48 | // short name, add org prefix and type prefix 49 | return `@${reqOrg}/${orgPrefix}${typePrefix}${reqName}`; 50 | }; 51 | -------------------------------------------------------------------------------- /src/.vuepress/config.ts: -------------------------------------------------------------------------------- 1 | import viteBundler from "@vuepress/bundler-vite"; 2 | import { defineUserConfig } from "vuepress"; 3 | import { getDirname, path } from "vuepress/utils"; 4 | import theme from "./theme.js"; 5 | 6 | const __dirname = getDirname(import.meta.url); 7 | 8 | export default defineUserConfig({ 9 | base: "/", 10 | 11 | locales: { 12 | "/": { 13 | lang: "en-US", 14 | title: "VuePress Marketplace", 15 | description: "Marketplace of VuePress Ecosystem", 16 | }, 17 | "/zh/": { 18 | lang: "zh-CN", 19 | title: "VuePress 市场", 20 | description: "VuePress 生态市场", 21 | }, 22 | }, 23 | 24 | bundler: viteBundler(), 25 | 26 | theme, 27 | 28 | alias: { 29 | "@blog-plugin-config": path.resolve( 30 | __dirname, 31 | "../../config/plugins/blog.json", 32 | ), 33 | "@developer-plugin-config": path.resolve( 34 | __dirname, 35 | "../../config/plugins/developer.json", 36 | ), 37 | "@feature-plugin-config": path.resolve( 38 | __dirname, 39 | "../../config/plugins/feature.json", 40 | ), 41 | "@manage-plugin-config": path.resolve( 42 | __dirname, 43 | "../../config/plugins/manage.json", 44 | ), 45 | "@markdown-plugin-config": path.resolve( 46 | __dirname, 47 | "../../config/plugins/markdown.json", 48 | ), 49 | "@search-plugin-config": path.resolve( 50 | __dirname, 51 | "../../config/plugins/search.json", 52 | ), 53 | "@blog-theme-config": path.resolve( 54 | __dirname, 55 | "../../config/themes/blog.json", 56 | ), 57 | "@docs-theme-config": path.resolve( 58 | __dirname, 59 | "../../config/themes/docs.json", 60 | ), 61 | "@theme-hope/components/HomePage": path.resolve( 62 | __dirname, 63 | "./components/HomePage.vue", 64 | ), 65 | }, 66 | }); 67 | -------------------------------------------------------------------------------- /src/zh/reference/contributing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 贡献指南 3 | icon: signs-post 4 | --- 5 | 6 | ## 添加你的插件和主题 7 | 8 | 你可以自由地将你的插件和主题添加到站点,只需提交一个新的 PR。 9 | 10 | - 要添加插件,你应该编辑 `config/plugins/.json` 并将你的插件添加到**正确列表的末尾**。 11 | - 要添加主题,你应该编辑 `config/themes/.json` 并将你的插件添加到**正确列表的末尾**。 12 | 13 | 如果你认为你正在构建一个强大的主题或插件,适用于在多个类别,你可以在多个地方添加它。 14 | 15 | ::: details 这些内容应包含在你的 PR 正文中 16 | 17 | - [x] 我的作品是 VuePress 2 的插件或主题,或与 VuePress 2 相关的工具。 18 | - [x] 我的作品是开源的,并处于 MIT 或 Apache-2.0 协议下。 19 | - [x] 我已经建立了关于我的工作的详细文档,因此其他人可以了解如何使用它。 20 | - [x] 我的工作现在可以配合最新的 VuePress 2 版本,我将继续支持以后的 VuePress 2 版本。 21 | - [x] 我保证如果我放弃我的项目,我会打开另一个 PR 来删除它。 22 | 23 | :::: 24 | 25 | ::: warning 删除 26 | 27 | 你应该确保你的插件与最新的 VuePress 版本兼容。 28 | 29 | 30 天后,任何不适用于最新主要版本或文档失效的插件将从列表中删除。 30 | 31 | :::: 32 | 33 | ## 请求 vuejs.press 网址 34 | 35 | 你可以自由地为你的插件或主题请求一个 `vuejs.press` 子域。 36 | 37 | 只要你同意以下规则,你就可以申请 `vuejs.press` 子域: 38 | 39 | 1. 你的作品应该是 VuePress 2 的插件或主题,或者与 VuePress 2 相关的工具。 40 | 1. 你的作品应该是**开源的**并使用 MIT 或 Apache-2.0 许可证。 41 | 1. 你的工作应该可以在**最新的 VuePress 2 版本**上工作,除非最新的 VuePress 2 版本**发布时间不超过 30 天**。 42 | 1. 你的子域只允许包含文档内容。 **不允许有其他内容**,包括任何**政治、宗教或其他有争议的内容**。 43 | 44 | 你应该在 `config/vuejs.press.zone` 中添加一个新行,我们将手动将该文件与 DNS 提供商同步。 45 | 46 | ::: details 这些内容应包含在你的 PR 正文中 47 | 48 | - [x] 我的作品是 VuePress 2 的插件或主题,或与 VuePress 2 相关的工具。 49 | - [x] 我的作品是开源的,并处于 MIT 或 Apache-2.0 协议下。 50 | - [x] 我保证在我申请的子域中只提供文档内容。 51 | - [x] 我的工作现在可以使用最新的 VuePress 2 版本,我将继续支持以后的 VuePress 2 版本。 52 | - [x] 我保证如果我放弃我的项目,我会打开另一个 PR 来删除它。 53 | 54 | :::: 55 | 56 | ::: info 子域名 57 | 58 | 子域不可自定义,它应该基于你的插件/主题的名称,通过删除 `@` `vuepress-` 并将 `/` 替换为 `-` 来生成,例如: 59 | 60 | - `@org/vuepress-plugin-abc` 将是 `org-plugin-abc` 61 | - `vuepress-theme-abc` 将是 `theme-abc` 62 | 63 | :::: 64 | 65 | ::: tip 文档搜索 66 | 67 | 如果你需要 Algolia Docsearch,你应该修改`config/crawler.config`来添加你的主题插件。 68 | 69 | 你的索引名称将是你申请的子域名。 70 | 71 | :::: 72 | -------------------------------------------------------------------------------- /src/.vuepress/theme.ts: -------------------------------------------------------------------------------- 1 | import { hopeTheme } from "vuepress-theme-hope"; 2 | 3 | export default hopeTheme( 4 | { 5 | hostname: "https://marketplacae.vuejs.press", 6 | 7 | logo: "/logo.png", 8 | 9 | repo: "vuepress/marketplace", 10 | 11 | docsDir: "src", 12 | 13 | pageInfo: false, 14 | 15 | locales: { 16 | "/": { 17 | // navbar 18 | navbar: ["/", "/plugins/", "/themes/"], 19 | 20 | // sidebar 21 | sidebar: "structure", 22 | 23 | footer: 24 | 'Theme by VuePress Theme Hope | CC0 Licensed', 25 | 26 | displayFooter: true, 27 | 28 | metaLocales: { 29 | editLink: "Edit this page on GitHub", 30 | }, 31 | }, 32 | 33 | /** 34 | * Chinese locale config 35 | */ 36 | "/zh/": { 37 | // navbar 38 | navbar: ["/zh/", "/zh/plugins/", "/zh/themes/"], 39 | 40 | // sidebar 41 | sidebar: "structure", 42 | 43 | footer: 44 | '主题使用 VuePress Theme Hope | CC0 协议', 45 | 46 | displayFooter: true, 47 | 48 | // page meta 49 | metaLocales: { 50 | editLink: "在 GitHub 上编辑此页", 51 | }, 52 | }, 53 | }, 54 | 55 | markdown: { 56 | align: true, 57 | codeTabs: true, 58 | tasklist: true, 59 | }, 60 | 61 | plugins: { 62 | comment: { 63 | provider: "Giscus", 64 | repo: "vuepress/marketplace", 65 | repoId: "R_kgDOItkaoA", 66 | category: "Announcements", 67 | categoryId: "DIC_kwDOItkaoM4CTau2", 68 | }, 69 | 70 | icon: { 71 | assets: "fontawesome-with-brands", 72 | }, 73 | 74 | photoSwipe: false, 75 | }, 76 | }, 77 | { custom: true }, 78 | ); 79 | -------------------------------------------------------------------------------- /config/themes/blog.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": "", 4 | "items": [ 5 | { 6 | "type": "theme", 7 | "name": "hope", 8 | "icon": "https://theme-hope-assets.vuejs.press/logo.svg", 9 | "tag": "latest", 10 | "desc": { 11 | "/": "VuePress theme with tons of features", 12 | "/zh/": "功能强大的 VuePress 主题" 13 | }, 14 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/theme/", 15 | "url": { 16 | "/": "theme-hope.vuejs.press", 17 | "/zh/": "theme-hope.vuejs.press/zh/" 18 | } 19 | }, 20 | { 21 | "type": "theme", 22 | "name": "plume", 23 | "icon": "https://theme-plume.vuejs.press/plume.png", 24 | "tag": "latest", 25 | "desc": { 26 | "/": "A simple and feature-rich VuePress documentation & blog theme", 27 | "/zh/": "一个简约的,功能丰富的 VuePress 文档&博客 主题" 28 | }, 29 | "source": "pengzhanbo/vuepress-theme-plume", 30 | "url": { 31 | "/": "theme-plume.vuejs.press/en/", 32 | "/zh/": "theme-plume.vuejs.press" 33 | } 34 | }, 35 | { 36 | "type": "theme", 37 | "name": "gungnir", 38 | "desc": { 39 | "/": "A graceful blog theme for VuePress", 40 | "/zh/": "一款优雅的 VuePress 博客主题" 41 | }, 42 | "source": "Renovamen/vuepress-theme-gungnir", 43 | "url": "https://v2-vuepress-theme-gungnir.vercel.app/" 44 | }, 45 | { 46 | "type": "theme", 47 | "name": "reco", 48 | "icon": "https://theme-reco.vuejs.press/logo.png", 49 | "desc": { 50 | "/": "🔥 The 2.x of vuepress-theme-reco", 51 | "/zh/": "🔥 vuepress-theme-reco 的 2.x 版本" 52 | }, 53 | "source": "vuepress-reco/vuepress-theme-reco", 54 | "url": { 55 | "/": "theme-reco.vuejs.press/en/", 56 | "/zh/": "theme-reco.vuejs.press" 57 | } 58 | }, 59 | { 60 | "type": "theme", 61 | "name": "dog", 62 | "tag": "latest", 63 | "desc": { 64 | "/": "A self-proclaimed blog theme
(Note: text from the official website)", 65 | "/zh/": "这是一款自以为是的博客主题
(注: 来自其官网原文)" 66 | }, 67 | "source": "artiely/blog-dog", 68 | "url": "github.com/artiely/blog-dog" 69 | } 70 | ] 71 | } 72 | ] 73 | -------------------------------------------------------------------------------- /config/vuejs.press.zone: -------------------------------------------------------------------------------- 1 | ; Domain: vuejs.press 2 | ; Exported at:2024-12-11 00:15:35 (Asia/Shanghai) 3 | ; 4 | ; _/_/_/ _/ _/ _/_/_/ _/_/_/ _/_/ _/_/_/ 5 | ; _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ 6 | ; _/ _/ _/ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ 7 | ; _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ 8 | ; _/_/_/ _/ _/ _/_/_/ _/ _/_/ _/_/_/ 9 | ; 10 | ; This file is intended for use for informational and archival 11 | ; purposes ONLY and MUST be edited before used on a production 12 | ; DNS server. 13 | ; 14 | ; For further information, please consult the BIND documentation 15 | ; located on the following website: 16 | ; http://www.isc.org/ 17 | ; 18 | ; And RFC 1035: 19 | ; http://www.ietf.org/rfc/rfc1035.txt 20 | ; 21 | ; If you are trying to import to your domain in DNSPod, you may 22 | ; want to visit here: 23 | ; https://console.dnspod.cn/dns/batch 24 | ; 25 | ; If you need help, see the support: 26 | ; https://docs.dnspod.cn/dns/dnspod-import-domain-records 27 | ; 28 | ; Use at your own risk. 29 | ; 30 | 31 | 32 | $ORIGIN vuejs.press. 33 | 34 | 35 | ; SOA record 36 | VUEJS.PRESS. 600 SOA rubine.dnspod.net. freednsadmin.dnspod.com. 1733847323 3600 180 1209600 180 37 | 38 | 39 | ; A records 40 | theme-reco 600 IN A 185.199.108.153 41 | 42 | 43 | ; CNAME records 44 | plugin-md-enhance 600 IN CNAME vuepress-plugin-md-enhance.netlify.app. 45 | plugin-lightgallery 600 IN CNAME vuepress-plugin-lightgallery.netlify.app. 46 | shared 600 IN CNAME vuepress-shared.netlify.app. 47 | theme-hope 600 IN CNAME vuepress-theme-hope.netlify.app. 48 | theme-hope-blog-demo 600 IN CNAME vuepress-theme-hope-blog-demo.netlify.app. 49 | theme-hope-docs-demo 600 IN CNAME vuepress-theme-hope-docs-demo.netlify.app. 50 | plugin-lightgallery-demo 600 IN CNAME vuepress-plugin-lightgallery-demo.netlify.app. 51 | plugin-md-enhance-demo 600 IN CNAME vuepress-plugin-md-enhance-demo.netlify.app. 52 | @ 600 IN CNAME vuepress-v2.netlify.app. 53 | www 600 IN CNAME vuepress-v2.netlify.app. 54 | plugin-components 600 IN CNAME vuepress-plugin-components.netlify.app. 55 | plugin-components-demo 600 IN CNAME vuepress-plugin-components-demo.netlify.app. 56 | plugin-oh-my-live2d 600 IN CNAME plugin-oh-my-live2d.netlify.app. 57 | waline-comment 600 IN CNAME cname.vercel-dns.com. 58 | marketplace 600 IN CNAME vuepress-marketplace.netlify.app. 59 | theme-hope-ru 600 IN CNAME vuepress-theme-hope-ru.netlify.app. 60 | bing-wallpaper 600 IN CNAME cname.vercel-dns.com. 61 | theme-hope-assets 600 IN CNAME vuepress-theme-hope-assets.netlify.app. 62 | ecosystem 600 IN CNAME vuepress-ecosystem.netlify.app. 63 | theme-plume 600 IN CNAME vuepress-theme-plume.netlify.app. 64 | 65 | 66 | ; NS records 67 | @ 86400 IN NS rubine.dnspod.net. 68 | @ 86400 IN NS bonnie.dnspod.net. 69 | 70 | 71 | ; TXT records 72 | @ 600 IN TXT "google-site-verification=Z9x_60uQmeJqyG1do6VhoXox3XkJ4jA6hSkeOECqU4E" 73 | 74 | -------------------------------------------------------------------------------- /config/themes/docs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": "", 4 | "items": [ 5 | { 6 | "type": "theme", 7 | "name": "@vuepress/default", 8 | "icon": "/logo.png", 9 | "desc": { 10 | "/": "VuePress2 default theme", 11 | "/zh/": "VuePress2 默认主题" 12 | }, 13 | "source": "vuepress/ecosystem/tree/main/themes/theme-default", 14 | "url": { 15 | "/": "https://ecosystem.vuejs.press/themes/default/config.html", 16 | "/zh/": "https://ecosystem.vuejs.press/zh/themes/default/config.html" 17 | } 18 | }, 19 | { 20 | "type": "theme", 21 | "name": "hope", 22 | "icon": "https://theme-hope-assets.vuejs.press/logo.svg", 23 | "tag": "latest", 24 | "desc": { 25 | "/": "VuePress theme with tons of features", 26 | "/zh/": "功能强大的 VuePress 主题" 27 | }, 28 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/theme/", 29 | "url": { 30 | "/": "theme-hope.vuejs.press", 31 | "/zh/": "theme-hope.vuejs.press/zh/" 32 | } 33 | }, 34 | { 35 | "type": "theme", 36 | "name": "plume", 37 | "icon": "https://theme-plume.vuejs.press/plume.png", 38 | "tag": "latest", 39 | "desc": { 40 | "/": "A simple and feature-rich VuePress documentation & blog theme", 41 | "/zh/": "一个简约的,功能丰富的 VuePress 文档&博客 主题" 42 | }, 43 | "source": "pengzhanbo/vuepress-theme-plume", 44 | "url": { 45 | "/": "theme-plume.vuejs.press/en/", 46 | "/zh/": "theme-plume.vuejs.press" 47 | } 48 | }, 49 | { 50 | "type": "theme", 51 | "name": "reco", 52 | "icon": "https://theme-reco.vuejs.press/logo.png", 53 | "desc": { 54 | "/": "🔥 The 2.x of vuepress-theme-reco", 55 | "/zh/": "🔥 vuepress-theme-reco 的 2.x 版本" 56 | }, 57 | "source": "vuepress-reco/vuepress-theme-reco", 58 | "url": { 59 | "/": "theme-reco.vuejs.press/en/", 60 | "/zh/": "theme-reco.vuejs.press" 61 | } 62 | }, 63 | { 64 | "type": "theme", 65 | "name": "mix", 66 | "tag": "latest", 67 | "desc": { 68 | "/": "A VuePress 2 theme with a mix of features", 69 | "/zh/": "一个 VuePress 2 主题,集合了多种功能" 70 | }, 71 | "source": "gavinliu6/vuepress-theme-mix", 72 | "url": { 73 | "/": "vuepress-theme-mix.netlify.app", 74 | "/zh/": "vuepress-theme-mix.netlify.app/zh/" 75 | } 76 | }, 77 | { 78 | "type": "theme", 79 | "name": "teadocs", 80 | "tag": "latest", 81 | "desc": { 82 | "/": "A improved docs theme based on @vuepress/theme-default", 83 | "/zh/": "基于 @vuepress/theme-default 的改进的文档主题" 84 | }, 85 | "source": "wuwb/vuepress-theme-teadoc", 86 | "url": "https://github.com/wuwb/vuepress-theme-teadoc" 87 | } 88 | ] 89 | } 90 | ] 91 | -------------------------------------------------------------------------------- /config/plugins/search.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": { 4 | "/": "Search Provider", 5 | "/zh/": "搜索提供商" 6 | }, 7 | "items": [ 8 | { 9 | "name": "@vuepress/docsearch", 10 | "icon": "fab fa-algolia", 11 | "recommend": true, 12 | "desc": { 13 | "/": "Integrate Algolia DocSearch into VuePress", 14 | "/zh/": "将 Algolia DocSearch 集成到 VuePress" 15 | }, 16 | "source": "vuepress/ecosystem/tree/main/plugins/search/plugin-docsearch", 17 | "url": { 18 | "/": "ecosystem.vuejs.press/plugins/search/docsearch.html", 19 | "/zh/": "ecosystem.vuejs.press/zh/plugins/search/docsearch.html" 20 | } 21 | }, 22 | { 23 | "name": "@vuepress/meilisearch", 24 | "icon": "search", 25 | "tag": "latest", 26 | "desc": { 27 | "/": "Integrate MeiliSearch into VuePress to provide search functionality", 28 | "/zh/": "将 MeiliSearch 集成到 VuePress 中,为你的文档网站提供搜索功能" 29 | }, 30 | "source": "vuepress/ecosystem/tree/main/plugins/search/plugin-meilisearch", 31 | "url": { 32 | "/": "ecosystem.vuejs.press/plugins/search/meilisearch.html", 33 | "/zh/": "ecosystem.vuejs.press/zh/plugins/search/meilisearch.html" 34 | } 35 | } 36 | ] 37 | }, 38 | { 39 | "header": { 40 | "/": "Client Search", 41 | "/zh/": "客户端搜索" 42 | }, 43 | "items": [ 44 | { 45 | "name": "@vuepress/slimsearch", 46 | "icon": "search", 47 | "tag": "latest", 48 | "recommend": true, 49 | "desc": { 50 | "/": "Powerful client search plugin supporting full indexing", 51 | "/zh/": "强大的客户端搜索插件,支持全文索引" 52 | }, 53 | "source": "vuepress/ecosystem/tree/main/plugins/search/plugin-slimsearch", 54 | "url": { 55 | "/": "ecosystem.vuejs.press/plugins/search/slimsearch.html", 56 | "/zh/": "ecosystem.vuejs.press/zh/plugins/search/slimsearch.html" 57 | } 58 | }, 59 | { 60 | "name": "@vuepress/search", 61 | "icon": "search", 62 | "desc": { 63 | "/": "Provide local search to your documentation site.", 64 | "/zh/": "为你的文档网站提供本地搜索" 65 | }, 66 | "source": "vuepress/ecosystem/tree/main/plugins/search/plugin-search", 67 | "url": { 68 | "/": "ecosystem.vuejs.press/plugins/search/search.html", 69 | "/zh/": "ecosystem.vuejs.press/zh/plugins/search/search.html" 70 | } 71 | }, 72 | { 73 | "name": "full-text-search2", 74 | "icon": "search", 75 | "tag": "latest", 76 | "desc": { 77 | "/": "Full text local search", 78 | "/zh/": "全文本地搜索" 79 | }, 80 | "source": "ota-meshi/vuepress-plugin-full-text-search2", 81 | "url": "github.com/ota-meshi/vuepress-plugin-full-text-search2" 82 | } 83 | ] 84 | } 85 | ] 86 | -------------------------------------------------------------------------------- /src/reference/contributing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contributing Guide 3 | icon: signs-post 4 | --- 5 | 6 | ## Adding your plugins and themes 7 | 8 | You are free to add your plugins and themes to the site, just open a new PR. 9 | 10 | - To add a plugin, you should edit `config/plugins/.json` and add your plugin to **the end of** proper list. 11 | - To add a theme, you should edit `config/themes/.json` and add your plugin to **the end of** proper list. 12 | 13 | If you believe you are building a powerful theme or plugin that is fittable with multiple categories, you can add it in multiple places. 14 | 15 | ::: details These contents should be included in your PR body 16 | 17 | - [x] My work is a plugin or theme for VuePress 2, or tools related with VuePress 2. 18 | - [x] My work is open source and licensed under MIT or Apache-2.0. 19 | - [x] I already built detailed docs about my work, so others can understand how to use it. 20 | - [x] My work is workable with latest VuePress 2 version now, and I will keep supporting later VuePress 2 versions. 21 | - [x] I promise if I abandon my project, I will open another PR to remove it. 22 | 23 | ::: 24 | 25 | ::: warning Removal 26 | 27 | You should ensure your plugins compatible with latest VuePress version. 28 | 29 | Any plugins which is not working with latest major version or with broken docs will be removed from list after 30 days. 30 | 31 | ::: 32 | 33 | ## Requesting vuejs.press domain 34 | 35 | You are free to request a `vuejs.press` subdomain for your plugin or theme. 36 | 37 | You can apply a `vuejs.press` subdomain as long as you agree with the following rules: 38 | 39 | 1. Your work should be **open source** and licensed under MIT or Apache-2.0. 40 | 1. Your work should be plugin or theme for VuePress 2, or tools related with VuePress 2. 41 | 1. Your work should be workable with **latest VuePress 2 version** unless the latest VuePress 2 version **was released less than 30 days ago**. 42 | 1. Only documentation content is allowed at your subdomain. **No other content** is allowed, including any **political, religious, or other controversial content**. 43 | 44 | You should add a new line in `config/vuejs.press.zone`, and we will sync that file with DNS provider manually. 45 | 46 | ::: details These contents should be included in your PR body 47 | 48 | - [x] My work is a plugin or theme for VuePress 2, or tools related with VuePress 2. 49 | - [x] My work is open source and licensed under MIT or Apache-2.0. 50 | - [x] I promise only documentation content is served at subdomain I apply to. 51 | - [x] My work is workable with latest VuePress 2 version now, and I will keep supporting later VuePress 2 versions. 52 | - [x] I promise if I abandon my project, I will open another PR to remove it. 53 | 54 | ::: 55 | 56 | ::: info Subdomain name 57 | 58 | Subdomain is not customizable, it should based on the name of your plugin/theme, generated by removing `@` `vuepress-` and replacing `/` with `-`, e.g.: 59 | 60 | - `@org/vuepress-plugin-abc` will be `org-plugin-abc` 61 | - `vuepress-theme-abc` will be `theme-abc` 62 | 63 | ::: 64 | 65 | ::: tip Docsearch 66 | 67 | If you need Algolia Docsearch, you should modify `config/crawler.config` to add your plugin of theme. 68 | 69 | Your index name will be the subdomain you apply. 70 | 71 | ::: 72 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [VuePress2 Marketplace](https://marketplace.vuejs.press) 2 | 3 | ## Introduction 4 | 5 | The repo holds the source code for the VuePress2 Marketplace website. 6 | 7 | ## Adding your plugins and themes 8 | 9 | You are free to add your plugins and themes to the site, just open a new PR. 10 | 11 | - To add a plugin, you should edit `config/plugins/.json` and add your plugin to **the end of** proper list. 12 | - To add a theme, you should edit `config/themes/.json` and add your plugin to **the end of** proper list. 13 | 14 | If you believe you are building a powerful theme or plugin that can be list in multiple categories, you can add theme in multiple places. 15 | 16 |
17 | These contents should be included in your PR body 18 | 19 | - [x] My work is open source and licensed under MIT or Apache-2.0. 20 | - [x] My work is a plugin or theme for VuePress 2, or tools related with VuePress 2. 21 | - [x] My work is workable with latest VuePress 2 version now, and I will keep supporting later VuePress 2 versions. I promise if I abandon my project, I will open another PR to remove it. 22 | 23 |
24 | 25 | For more details, see [Contributing Guide](https://marketplace.vuejs.press/reference/contributing.html) 26 | 27 | ## Requesting vuejs.press domain 28 | 29 | You are free to request a `vuejs.press` subdomain for your plugin or theme. 30 | 31 | You can apply a `vuejs.press` subdomain as long as you agree with the following rules: 32 | 33 | 1. Your work should be **open source** and licensed under MIT or Apache-2.0. 34 | 1. Your work should be plugin or theme for VuePress 2, or tools related with VuePress 2. 35 | 1. Your work should be workable with **latest VuePress 2 version** unless the latest VuePress 2 version **was released less than 30 days ago**. 36 | 1. Only documentation content is allowed at your subdomain. **No other content** is allowed, including any **political, religious, or other controversial content**. 37 | 38 | You should add a new line in `config/vuejs.press.zone`, and we will sync that file with DNS provider manually. 39 | 40 |
41 | These contents should be included in your PR body 42 | 43 | - [x] My work is open source and licensed under MIT or Apache-2.0. 44 | - [x] My work is a plugin or theme for VuePress 2, or tools related with VuePress 2. 45 | - [x] My work is workable with latest VuePress 2 version now, and I will keep supporting later VuePress 2 versions. I promise if I abandon my project, I will open another PR to remove it. 46 | - [x] I promise only documentation content is served at subdomain I apply to. 47 | 48 |
49 | 50 | If you need algolia docsearch, you should modify `config/crawler.config` to add your plugin of theme. 51 | 52 | For details, see [Contributing Guide](https://marketplace.vuejs.press/reference/contributing.html) 53 | 54 | ## License 55 | 56 | 57 | 58 |

59 | 61 | CC0 62 | 63 |
64 | To the extent possible under law, 65 | 67 | Mister-Hope 68 | has waived all copyright and related or neighboring rights to 69 | VuePress MarketPlace. 70 | This work is published from: 71 | 73 | China Mainland. 74 |

75 | -------------------------------------------------------------------------------- /config/plugins/blog.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": { 4 | "/": "Blog Related", 5 | "/zh/": "博客相关" 6 | }, 7 | "items": [ 8 | { 9 | "name": "@vuepress/blog", 10 | "icon": "blog", 11 | "recommend": true, 12 | "desc": { 13 | "/": "VuePress blog plugin", 14 | "/zh/": "VuePress 博客插件" 15 | }, 16 | "source": "vuepress/ecosystem/tree/main/plugins/blog/plugin-blog", 17 | "url": { 18 | "/": "ecosystem.vuejs.press/plugins/blog/blog/", 19 | "/zh/": "ecosystem.vuejs.press/zh/plugins/blog/blog/" 20 | } 21 | } 22 | ] 23 | }, 24 | { 25 | "header": { 26 | "/": "Subscribe", 27 | "/zh/": "订阅" 28 | }, 29 | "items": [ 30 | { 31 | "name": "@vuepress/feed", 32 | "icon": "rss", 33 | "recommend": true, 34 | "desc": { 35 | "/": "Feed plugin supporting atom, json and rss syntax feeds", 36 | "/zh/": "支持 atom、json 和 rss 格式的订阅流插件" 37 | }, 38 | "source": "vuepress/ecosystem/tree/main/plugins/blog/plugin-feed", 39 | "url": { 40 | "/": "ecosystem.vuejs.press/plugins/blog/feed/", 41 | "/zh/": "ecosystem.vuejs.press/zh/plugins/blog/feed/" 42 | } 43 | } 44 | ] 45 | }, 46 | { 47 | "header": { 48 | "/": "Share", 49 | "/zh/": "分享" 50 | }, 51 | "items": [ 52 | { 53 | "name": "social-share", 54 | "icon": "share", 55 | "recommend": true, 56 | "desc": { 57 | "/": "Social media sharing plugin", 58 | "/zh/": "社交媒体分享插件" 59 | }, 60 | "source": "ntnyq/vuepress-plugin-social-share", 61 | "url": "social-share.ntnyq.com" 62 | } 63 | ] 64 | }, 65 | { 66 | "header": { 67 | "/": "Comment", 68 | "/zh/": "评论" 69 | }, 70 | "items": [ 71 | { 72 | "name": "@vuepress/comment", 73 | "icon": "comment-dots", 74 | "recommend": true, 75 | "desc": { 76 | "/": "Comment plugin supporting Giscus, Twikoo, Waline and Artalk", 77 | "/zh/": "支持 Giscus, Twikoo, Waline 和 Artalk 的评论插件" 78 | }, 79 | "source": "vuepress/ecosystem/tree/main/plugins/blog/plugin-comment", 80 | "url": { 81 | "/": "ecosystem.vuejs.press/plugins/blog/comment/", 82 | "/zh/": "ecosystem.vuejs.press/zh/plugins/blog/comment/" 83 | } 84 | } 85 | ] 86 | }, 87 | { 88 | "header": { 89 | "/": "Auto generation", 90 | "/zh/": "自动生成" 91 | }, 92 | "items": [ 93 | { 94 | "name": "@vuepress/catalog", 95 | "icon": "network-wired", 96 | "recommend": true, 97 | "desc": { 98 | "/": "Plugins to generate catalog page automatically", 99 | "/zh/": "自动生成目录页面的插件" 100 | }, 101 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-catalog", 102 | "url": { 103 | "/": "ecosystem.vuejs.press/plugins/features/catalog.html", 104 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/catalog.html" 105 | } 106 | }, 107 | { 108 | "name": "@vuepress/reading-time", 109 | "icon": "book-open", 110 | "desc": { 111 | "/": "Count words and generate reading time for articles", 112 | "/zh/": "统计文章字数并生成阅读时间" 113 | }, 114 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-reading-time", 115 | "url": { 116 | "/": "ecosystem.vuejs.press/plugins/development/reading-time/", 117 | "/zh/": "ecosystem.vuejs.press/zh/plugins/development/reading-time/" 118 | } 119 | } 120 | ] 121 | }, 122 | { 123 | "header": { 124 | "/": "Copyright Information", 125 | "/zh/": "版权信息" 126 | }, 127 | "items": [ 128 | { 129 | "name": "@vuepress/copyright", 130 | "icon": "circle-info", 131 | "recommend": true, 132 | "desc": { 133 | "/": "Append copyright information while copying, while supports preventing selection and copy", 134 | "/zh/": "复制时附加版权信息,同时支持阻止选择和复制" 135 | }, 136 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-copyright", 137 | "url": { 138 | "/": "ecosystem.vuejs.press/plugins/features/copyright.html", 139 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/copyright.html" 140 | } 141 | }, 142 | { 143 | "name": "@vuepress/watermark", 144 | "icon": "xmarks-lines", 145 | "recommend": true, 146 | "desc": { 147 | "/": "Add watermark to pages", 148 | "/zh/": "为页面添加水印" 149 | }, 150 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-watermark", 151 | "url": { 152 | "/": "ecosystem.vuejs.press/plugins/features/watermark.html", 153 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/watermark.html" 154 | } 155 | } 156 | ] 157 | }, 158 | { 159 | "header": { 160 | "/": "Poster Girl", 161 | "/zh/": "看板娘" 162 | }, 163 | "items": [ 164 | { 165 | "name": "oh-my-live2d", 166 | "icon": "child-dress", 167 | "recommend": true, 168 | "tag": "latest", 169 | "desc": { 170 | "/": "Live2D poster girl", 171 | "/zh/": "live2d 看板娘插件" 172 | }, 173 | "source": "oh-my-live2d/oh-my-live2d", 174 | "url": { 175 | "/": "oml2d.com/guide/vuepress.html", 176 | "/zh/": "oml2d.com/guide/vuepress.html" 177 | } 178 | } 179 | ] 180 | } 181 | ] 182 | -------------------------------------------------------------------------------- /config/plugins/manage.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": { 4 | "/": "Site Analyze", 5 | "/zh/": "站点分析" 6 | }, 7 | "items": [ 8 | { 9 | "name": "@vuepress/google-analytics", 10 | "icon": "magnifying-glass-chart", 11 | "recommend": true, 12 | "desc": { 13 | "/": "Integrate Google Analytics into VuePress.", 14 | "/zh/": "将 Google Analytics 集成到 VuePress" 15 | }, 16 | "source": "vuepress/ecosystem/tree/main/plugins/analytics/plugin-google-analytics/", 17 | "url": { 18 | "/": "ecosystem.vuejs.press/plugins/analytics/google-analytics.html", 19 | "/zh/": "ecosystem.vuejs.press/zh/plugins/analytics/google-analytics.html" 20 | } 21 | }, 22 | { 23 | "name": "@vuepress/baidu-analytics", 24 | "icon": "magnifying-glass-chart", 25 | "recommend": true, 26 | "desc": { 27 | "/": "Integrate baidu analytics", 28 | "/zh/": "集成百度统计" 29 | }, 30 | "source": "vuepress/ecosystem/tree/main/plugins/analytics/plugin-baidu-analytics/", 31 | "url": { 32 | "/": "ecosystem.vuejs.press/plugins/analytics/baidu-analytics.html", 33 | "/zh/": "ecosystem.vuejs.press/zh/plugins/analytics/baidu-analytics.html" 34 | } 35 | }, 36 | { 37 | "name": "@vuepress/umami-analytics", 38 | "icon": "magnifying-glass-chart", 39 | "recommend": true, 40 | "desc": { 41 | "/": "Integrate Umami analytics", 42 | "/zh/": "集成 Umami 分析" 43 | }, 44 | "source": "vuepress/ecosystem/tree/main/plugins/analytics/plugin-umami-analytics/", 45 | "url": { 46 | "/": "ecosystem.vuejs.press/plugins/analytics/umami-analytics.html", 47 | "/zh/": "ecosystem.vuejs.press/zh/plugins/analytics/umami-analytics.html" 48 | } 49 | }, 50 | { 51 | "name": "china-search-console", 52 | "icon": "sitemap", 53 | "tag": "latest", 54 | "desc": { 55 | "/": "SEO Enhancement for China mainland, include baidu tongji (analytics), baidu auto push, 360 autopush, tiaotiao(ByteDance) autopush.", 56 | "/zh/": "中国大陆 SEO 增强,包括百度统计,百度自动推送,360 自动推送,抖音自动推送。" 57 | }, 58 | "source": "Zhengqbbb/vuepress-plugin/tree/main/packages/plugin-china-search-console", 59 | "url": "vuepress.qbb.sh/china-search-console/" 60 | } 61 | ] 62 | }, 63 | { 64 | "header": { 65 | "/": "SEO", 66 | "/zh/": "SEO" 67 | }, 68 | "items": [ 69 | { 70 | "name": "@vuepress/seo", 71 | "icon": "wrench", 72 | "recommend": true, 73 | "desc": { 74 | "/": "Auto-generating OGP and JSON-LD tags to enhance SEO", 75 | "/zh/": "自动生成 OGP 和 JSON-LD 标签以增强 SEO" 76 | }, 77 | "source": "vuepress/ecosystem/tree/main/plugins/plugin-seo/", 78 | "url": { 79 | "/": "ecosystem.vuejs.press/plugins/seo/", 80 | "/zh/": "ecosystem.vuejs.press/zh/plugins/seo/" 81 | } 82 | }, 83 | { 84 | "name": "@vuepress/sitemap", 85 | "icon": "sitemap", 86 | "recommend": true, 87 | "desc": { 88 | "/": "Sitemap generator", 89 | "/zh/": "Sitemap 生成器" 90 | }, 91 | "source": "vuepress/ecosystem/tree/main/plugins/plugin-sitemap/", 92 | "url": { 93 | "/": "ecosystem.vuejs.press/plugins/sitemap/", 94 | "/zh/": "ecosystem.vuejs.press/zh/plugins/sitemap/" 95 | } 96 | }, 97 | { 98 | "name": "china-search-console", 99 | "icon": "sitemap", 100 | "recommend": true, 101 | "tag": "latest", 102 | "desc": { 103 | "/": "SEO Enhancement for China mainland, include baidu tongji (analytics), baidu auto push, 360 autopush, tiaotiao(ByteDance) autopush.", 104 | "/zh/": "中国大陆 SEO 增强,包括百度统计,百度自动推送,360 自动推送,抖音自动推送。" 105 | }, 106 | "source": "Zhengqbbb/vuepress-plugin/tree/main/packages/plugin-china-search-console", 107 | "url": "https://vuepress.qbb.sh/china-search-console/" 108 | }, 109 | { 110 | "name": "@vuepress/redirect", 111 | "icon": "fas fa-eject fa-rotate-90", 112 | "recommend": true, 113 | "desc": { 114 | "/": "Performing automatically redirects from old links to new ones", 115 | "/zh/": "自动从旧链接重定向到新链接" 116 | }, 117 | "source": "vuepress/ecosystem/tree/main/plugins/tools/plugin-redirect/", 118 | "url": { 119 | "/": "ecosystem.vuejs.press/plugins/tools/redirect.html", 120 | "/zh/": "ecosystem.vuejs.press/zh/plugins/tools/redirect.html" 121 | } 122 | }, 123 | { 124 | "name": "open-graph", 125 | "icon": "wrench", 126 | "tag": "latest", 127 | "desc": { 128 | "/": "Generating open graph meta tags to improve SEO.", 129 | "/zh/": "生成 Open Graph Meta 标签以改进 SEO。" 130 | }, 131 | "source": "azat-io/vuepress-plugin-open-graph", 132 | "url": "github.com/azat-io/vuepress-plugin-open-graph" 133 | } 134 | ] 135 | }, 136 | { 137 | "header": "PWA", 138 | "items": [ 139 | { 140 | "name": "@vuepress/pwa", 141 | "icon": "mobile-screen", 142 | "desc": { 143 | "/": "Make your VuePress site a Progressive Web Application (PWA).", 144 | "/zh/": "使你的 VuePress 网站成为 Progressive Web Application (PWA)" 145 | }, 146 | "source": "vuepress/ecosystem/tree/main/plugins/pwa/plugin-pwa/", 147 | "url": { 148 | "/": "ecosystem.vuejs.press/plugins/pwa/pwa.html", 149 | "/zh/": "ecosystem.vuejs.press/zh/plugins/pwa/pwa.html" 150 | } 151 | }, 152 | { 153 | "name": "@vuepress/remove-pwa", 154 | "icon": "mobile-screen", 155 | "desc": { 156 | "/": "Correctly remove existing PWA configuration", 157 | "/zh/": "正确删除现有的 PWA 配置" 158 | }, 159 | "source": "vuepress/ecosystem/tree/main/plugins/pwa/plugin-remove-pwa/", 160 | "url": { 161 | "/": "ecosystem.vuejs.press/plugins/pwa/remove-pwa.html", 162 | "/zh/": "ecosystem.vuejs.press/zh/plugins/pwa/remove-pwa.html" 163 | } 164 | } 165 | ] 166 | } 167 | ] 168 | -------------------------------------------------------------------------------- /src/.vuepress/components/ProjectDetail.vue: -------------------------------------------------------------------------------- 1 | 97 | 98 | 128 | 129 | 251 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | # Creative Commons Legal Code 2 | 3 | ## CC0 1.0 Universal 4 | 5 | Official translations of this legal tool are available 6 | 7 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. 8 | 9 | ## Statement of Purpose 10 | 11 | The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). 12 | 13 | Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. 14 | 15 | For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 16 | 17 | 1. **Copyright and Related Rights.** A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: 18 | 19 | 1. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; 20 | 1. moral rights retained by the original author(s) and/or performer(s); 21 | 1. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; 22 | 1. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; 23 | 1. rights protecting the extraction, dissemination, use and reuse of data in a Work; 24 | 1. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and 25 | 1. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 26 | 27 | 2. **Waiver.** To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 28 | 29 | 3. **Public License Fallback.** Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 30 | 31 | 4. **Limitations and Disclaimers.** 32 | 33 | - No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. 34 | - Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. 35 | - Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. 36 | - Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. 37 | -------------------------------------------------------------------------------- /config/plugins/developer.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": { 4 | "/": "Tools targeting plugins", 5 | "/zh/": "面向插件的工具" 6 | }, 7 | "items": [ 8 | { 9 | "name": "@vuepress/helper", 10 | "packageName": "@vuepress/helper", 11 | "recommend": true, 12 | "icon": "toolbox", 13 | "desc": { 14 | "/": "Useful VuePress2 util functions for developers", 15 | "/zh/": "面向开发者的 VuePress2 实用工具函数" 16 | }, 17 | "source": "vuepress/ecosystem/tree/main/tools/helper", 18 | "url": { 19 | "/": "ecosystem.vuejs.press/tools/helper/", 20 | "/zh/": "ecosystem.vuejs.press/zh/tools/helper/" 21 | } 22 | }, 23 | { 24 | "name": "@vuepress/sass-palette", 25 | "icon": "palette", 26 | "recommend": true, 27 | "desc": { 28 | "/": "Palette plugin for sass, an improved edition over the official one.", 29 | "/zh/": "Sass 调色板插件,比官方的更好用。" 30 | }, 31 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-sass-palette", 32 | "url": { 33 | "/": "ecosystem.vuejs.press/plugins/development/sass-palette/", 34 | "/zh/": "ecosystem.vuejs.press/plugins/development/sass-palette/" 35 | } 36 | } 37 | ] 38 | }, 39 | { 40 | "header": { 41 | "/": "Tools targeting theme", 42 | "/zh/": "面向主题的工具插件" 43 | }, 44 | "items": [ 45 | { 46 | "name": "@vuepress/helper", 47 | "packageName": "@vuepress/helper", 48 | "recommend": true, 49 | "icon": "toolbox", 50 | "desc": { 51 | "/": "Useful VuePress2 util functions for developers", 52 | "/zh/": "面向开发者的 VuePress2 实用工具函数" 53 | }, 54 | "source": "vuepress/ecosystem/tree/main/tools/helper/", 55 | "url": { 56 | "/": "ecosystem.vuejs.press/tools/helper/", 57 | "/zh/": "ecosystem.vuejs.press/zh/tools/helper/" 58 | } 59 | }, 60 | { 61 | "name": "@vuepress/active-header-links", 62 | "icon": "heading", 63 | "recommend": true, 64 | "desc": { 65 | "/": "Update route hash when scrolling pages", 66 | "/zh/": "滚动页面时更新路由 Hash" 67 | }, 68 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-active-header-links", 69 | "url": { 70 | "/": "ecosystem.vuejs.press/plugins/development/active-header-links.html", 71 | "/zh/": "ecosystem.vuejs.press/zh/plugins/development/active-header-links.html" 72 | } 73 | }, 74 | { 75 | "name": "@vuepress/git", 76 | "icon": "fab fa-git-alt", 77 | "recommend": true, 78 | "desc": { 79 | "/": "Collect git information of your pages, including the created and updated time, the contributors, etc.", 80 | "/zh/": "收集页面的 Git 信息,包括创建和更新时间,贡献者等" 81 | }, 82 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-git", 83 | "url": { 84 | "/": "ecosystem.vuejs.press/plugins/development/git.html", 85 | "/zh/": "ecosystem.vuejs.press/zh/plugins/development/git.html" 86 | } 87 | }, 88 | { 89 | "name": "@vuepress/reading-time", 90 | "icon": "book-open", 91 | "recommend": true, 92 | "desc": { 93 | "/": "Count words and generate reading time for articles", 94 | "/zh/": "统计文章字数并生成阅读时间" 95 | }, 96 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-reading-time", 97 | "url": { 98 | "/": "ecosystem.vuejs.press/plugins/development/reading-time/", 99 | "/zh/": "ecosystem.vuejs.press/zh/plugins/development/reading-time/" 100 | } 101 | }, 102 | { 103 | "name": "@vuepress/sass-palette", 104 | "icon": "palette", 105 | "recommend": true, 106 | "desc": { 107 | "/": "Palette plugin for sass, an improved edition over the official one.", 108 | "/zh/": "Sass 调色板插件,比官方的更好用。" 109 | }, 110 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-sass-palette", 111 | "url": { 112 | "/": "ecosystem.vuejs.press/plugins/development/sass-palette/", 113 | "/zh/": "ecosystem.vuejs.press/plugins/development/sass-palette/" 114 | } 115 | }, 116 | { 117 | "name": "@vuepress/theme-data", 118 | "icon": "diagram-project", 119 | "recommend": true, 120 | "desc": { 121 | "/": "Provide client data for your theme, with VuePress I18n support.", 122 | "/zh/": "为你的主题提供客户端数据,支持 VuePress 多语言。" 123 | }, 124 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-theme-data", 125 | "url": { 126 | "/": "ecosystem.vuejs.press/plugins/development/theme-data.html", 127 | "/zh/": "ecosystem.vuejs.press/zh/plugins/development/theme-data.html" 128 | } 129 | }, 130 | { 131 | "name": "@vuepress/toc", 132 | "icon": "network-wired", 133 | "recommend": true, 134 | "desc": { 135 | "/": "Provide a table-of-contents (TOC) component.", 136 | "/zh/": "提供一个目录组件。" 137 | }, 138 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-toc", 139 | "url": { 140 | "/": "ecosystem.vuejs.press/plugins/development/toc.html", 141 | "/zh/": "ecosystem.vuejs.press/zh/plugins/development/toc.html" 142 | } 143 | }, 144 | { 145 | "name": "iconify", 146 | "icon": "icons", 147 | "tag": "latest", 148 | "desc": { 149 | "/": "Use icons in VuePress", 150 | "/zh/": "在 VuePress 中使用图标" 151 | }, 152 | "source": "ntnyq/vuepress-plugin-iconify", 153 | "url": "vuepress-plugin-iconify.ntnyq.com/" 154 | }, 155 | { 156 | "name": "@vuepress/palette", 157 | "icon": "palette", 158 | "desc": { 159 | "/": " Provide palette support for your theme.", 160 | "/zh/": "为你的主题提供调色板支持。" 161 | }, 162 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-palette", 163 | "url": { 164 | "/": "ecosystem.vuejs.press/plugins/development/palette.html", 165 | "/zh/": "ecosystem.vuejs.press/zh/plugins/development/palette.html" 166 | } 167 | }, 168 | { 169 | "name": "use-pages", 170 | "icon": "file", 171 | "tag": "latest", 172 | "desc": { 173 | "/": " Use pages data in your docs.
Not recommended as it will have serious performance impact on large sites.
", 174 | "/zh/": "在你的文档中使用页面数据。
不推荐,因为它会对大型站点产生严重的性能影响。
" 175 | }, 176 | "source": "monsat/vuepress-plugin-use-pages", 177 | "url": "github.com/monsat/vuepress-plugin-use-pages" 178 | } 179 | ] 180 | } 181 | ] 182 | -------------------------------------------------------------------------------- /config/crawler.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Crawler config 3 | * 4 | * You should edit the following config if you want to use docsearch as crawler while you apply vuejs.press subdomain. 5 | * 6 | * @property {boolean|string} sitemap [false] 7 | * Whether the plugin has sitemap or it's sitemap location. Default location is '/sitemap.xml' 8 | * 9 | * @property {'vuepress/default'|'hope'|Function} recordExtractor ['vuepress/default'] 10 | * Record extractor function, built-in support added for `@vuepress/theme-default` and `vuepress-theme-hope` so you can use `vuepress/default` and `hope` keywords. 11 | * 12 | * @property {Object} initialIndexSettings Additional initialIndexSettings you want 13 | */ 14 | const crawlerConfig = { 15 | "plugin-auto-catalog": { 16 | sitemap: true, 17 | recordExtractor: "hope", 18 | }, 19 | "plugin-blog2": { 20 | sitemap: true, 21 | recordExtractor: "hope", 22 | }, 23 | "plugin-comment2": { 24 | sitemap: true, 25 | recordExtractor: "hope", 26 | }, 27 | "plugin-components": { 28 | sitemap: true, 29 | recordExtractor: "hope", 30 | }, 31 | "plugin-copyright2": { 32 | sitemap: true, 33 | recordExtractor: "hope", 34 | }, 35 | "plugin-lightgallery": { 36 | sitemap: true, 37 | recordExtractor: "hope", 38 | }, 39 | "plugin-md-enhance": { 40 | sitemap: true, 41 | recordExtractor: "hope", 42 | }, 43 | "plugin-photo-swipe": { 44 | sitemap: true, 45 | recordExtractor: "hope", 46 | }, 47 | "plugin-pwa2": { 48 | sitemap: true, 49 | recordExtractor: "hope", 50 | }, 51 | "plugin-reading-time2": { 52 | sitemap: true, 53 | recordExtractor: "hope", 54 | }, 55 | "plugin-redirect": { 56 | sitemap: true, 57 | recordExtractor: "hope", 58 | }, 59 | "plugin-remove-pwa": { 60 | sitemap: true, 61 | recordExtractor: "hope", 62 | }, 63 | "plugin-sass-palette": { 64 | sitemap: true, 65 | recordExtractor: "hope", 66 | }, 67 | 68 | "theme-hope": { 69 | sitemap: true, 70 | recordExtractor: "hope", 71 | }, 72 | }; 73 | 74 | /* 75 | * ==================================================== 76 | * 77 | * Below are scripts which generate the correct crawler 78 | * Normally you should NOT edit them in PR 79 | * 80 | * ==================================================== 81 | */ 82 | 83 | const commonInitialIndexSettings = { 84 | attributesForFaceting: ["type", "lang"], 85 | attributesToRetrieve: ["hierarchy", "content", "anchor", "url"], 86 | attributesToHighlight: ["hierarchy", "hierarchy_camel", "content"], 87 | attributesToSnippet: ["content:10"], 88 | camelCaseAttributes: ["hierarchy", "hierarchy_radio", "content"], 89 | searchableAttributes: [ 90 | "unordered(hierarchy_radio_camel.lvl0)", 91 | "unordered(hierarchy_radio.lvl0)", 92 | "unordered(hierarchy_radio_camel.lvl1)", 93 | "unordered(hierarchy_radio.lvl1)", 94 | "unordered(hierarchy_radio_camel.lvl2)", 95 | "unordered(hierarchy_radio.lvl2)", 96 | "unordered(hierarchy_radio_camel.lvl3)", 97 | "unordered(hierarchy_radio.lvl3)", 98 | "unordered(hierarchy_radio_camel.lvl4)", 99 | "unordered(hierarchy_radio.lvl4)", 100 | "unordered(hierarchy_radio_camel.lvl5)", 101 | "unordered(hierarchy_radio.lvl5)", 102 | "unordered(hierarchy_radio_camel.lvl6)", 103 | "unordered(hierarchy_radio.lvl6)", 104 | "unordered(hierarchy_camel.lvl0)", 105 | "unordered(hierarchy.lvl0)", 106 | "unordered(hierarchy_camel.lvl1)", 107 | "unordered(hierarchy.lvl1)", 108 | "unordered(hierarchy_camel.lvl2)", 109 | "unordered(hierarchy.lvl2)", 110 | "unordered(hierarchy_camel.lvl3)", 111 | "unordered(hierarchy.lvl3)", 112 | "unordered(hierarchy_camel.lvl4)", 113 | "unordered(hierarchy.lvl4)", 114 | "unordered(hierarchy_camel.lvl5)", 115 | "unordered(hierarchy.lvl5)", 116 | "unordered(hierarchy_camel.lvl6)", 117 | "unordered(hierarchy.lvl6)", 118 | "content", 119 | ], 120 | distinct: true, 121 | attributeForDistinct: "url", 122 | customRanking: [ 123 | "desc(weight.pageRank)", 124 | "desc(weight.level)", 125 | "asc(weight.position)", 126 | ], 127 | ranking: [ 128 | "words", 129 | "filters", 130 | "typo", 131 | "attribute", 132 | "proximity", 133 | "exact", 134 | "custom", 135 | ], 136 | highlightPreTag: '', 137 | highlightPostTag: "", 138 | minWordSizefor1Typo: 3, 139 | minWordSizefor2Typos: 7, 140 | allowTyposOnNumericTokens: false, 141 | minProximity: 1, 142 | ignorePlurals: true, 143 | advancedSyntax: true, 144 | attributeCriteriaComputedByMinProximity: true, 145 | removeWordsIfNoResults: "allOptional", 146 | }; 147 | 148 | export const recordExtractorMap = { 149 | "vuepress/default": ({ helpers }) => 150 | helpers.docsearch({ 151 | recordProps: { 152 | lvl0: { 153 | selectors: ".sidebar-heading.active", 154 | defaultValue: "Documentation", 155 | }, 156 | lvl1: ".theme-default-content h1", 157 | lvl2: ".theme-default-content h2", 158 | lvl3: ".theme-default-content h3", 159 | lvl4: ".theme-default-content h4", 160 | lvl5: ".theme-default-content h5", 161 | lvl6: ".theme-default-content h6", 162 | content: ".theme-default-content p, .theme-default-content li", 163 | }, 164 | indexHeadings: true, 165 | }), 166 | hope: ({ helpers }) => 167 | helpers.docsearch({ 168 | recordProps: { 169 | lvl0: { 170 | selectors: ".sidebar-heading.active", 171 | defaultValue: "Documentation", 172 | }, 173 | lvl1: ".theme-hope-content h1", 174 | lvl2: ".theme-hope-content h2", 175 | lvl3: ".theme-hope-content h3", 176 | lvl4: ".theme-hope-content h4", 177 | lvl5: ".theme-hope-content h5", 178 | lvl6: ".theme-hope-content h6", 179 | content: ".theme-hope-content p, .theme-hope-content li", 180 | }, 181 | indexHeadings: true, 182 | }), 183 | }; 184 | 185 | const getUrl = (name) => `https://${name}.vuejs.press`; 186 | 187 | export default { 188 | appId: "4H91G9D3GD", 189 | apiKey: "34532f86a6941fc826504e55118c1844", 190 | rateLimit: 25, 191 | maxDepth: 10, 192 | startUrls: [ 193 | "https://marketplace.vuejs.press", 194 | ...Object.entries(crawlerConfig).map(([name]) => getUrl(name)), 195 | ], 196 | renderJavaScript: false, 197 | sitemaps: [ 198 | "https://marketplace.vuejs.press/sitemap.xml", 199 | ...Object.entries(crawlerConfig) 200 | .filter(([, { sitemap }]) => Boolean(sitemap)) 201 | .map( 202 | ([name, { sitemap }]) => 203 | `${getUrl(name)}/${ 204 | typeof sitemap === "string" ? sitemap : "sitemap.xml" 205 | }}`, 206 | ), 207 | ], 208 | ignoreCanonicalTo: false, 209 | discoveryPatterns: [ 210 | "https://marketplace.vuejs.press/**", 211 | ...Object.keys(crawlerConfig).map((name) => `${getUrl(name)}/**`), 212 | ], 213 | schedule: "at 20:00 every 1 day", 214 | actions: [ 215 | { 216 | indexName: "vuejs-press", 217 | pathsToMatch: ["https://marketplace.vuejs.press/**"], 218 | recordExtractor: recordExtractorMap.hope, 219 | }, 220 | ...Object.entries(crawlerConfig).map( 221 | ([name, { recordExtractor = "vuepress/default" }]) => { 222 | return { 223 | indexName: name, 224 | pathsToMatch: [`${getUrl(name)}/**`], 225 | recordExtractor: 226 | typeof recordExtractor === "function" 227 | ? recordExtractor 228 | : recordExtractorMap[recordExtractor] || 229 | recordExtractorMap["vuepress/default"], 230 | }; 231 | }, 232 | ), 233 | ], 234 | initialIndexSettings: { 235 | "vuejs-press": commonInitialIndexSettings, 236 | ...Object.fromEntries( 237 | Object.entries(crawlerConfig).map( 238 | ([name, { initialIndexSettings = {} }]) => [ 239 | name, 240 | { ...commonInitialIndexSettings, ...initialIndexSettings }, 241 | ], 242 | ), 243 | ), 244 | }, 245 | }; 246 | -------------------------------------------------------------------------------- /config/plugins/feature.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": { 4 | "/": "Image preview", 5 | "/zh/": "图片预览" 6 | }, 7 | "items": [ 8 | { 9 | "name": "@vuepress/photo-swipe", 10 | "icon": "images", 11 | "recommend": true, 12 | "desc": { 13 | "/": "Image preview plugin based on photo-swipe", 14 | "/zh/": "基于 photo-swipe 的图片预览插件" 15 | }, 16 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-photo-swipe", 17 | "url": { 18 | "/": "ecosystem.vuejs.press/plugins/features/photo-swipe.html", 19 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/photo-swipe.html" 20 | } 21 | }, 22 | { 23 | "name": "lightgallery", 24 | "icon": "images", 25 | "tag": "latest", 26 | "desc": { 27 | "/": "Image preview plugin based on lightgallery", 28 | "/zh/": "基于 lightgallery 的图片预览插件" 29 | }, 30 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/lightgallery", 31 | "url": { 32 | "/": "plugin-lightgallery.vuejs.press", 33 | "/zh/": "plugin-lightgallery.vuejs.press/zh/" 34 | } 35 | }, 36 | { 37 | "name": "@vuepress/medium-zoom", 38 | "icon": "images", 39 | "desc": { 40 | "/": "Integrate medium-zoom into VuePress.", 41 | "/zh/": "将 medium-zoom 集成到VuePress。" 42 | }, 43 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-medium-zoom", 44 | "url": { 45 | "/": "ecosystem.vuejs.press/plugins/features/medium-zoom.html", 46 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/medium-zoom.html" 47 | } 48 | } 49 | ] 50 | }, 51 | 52 | { 53 | "header": { 54 | "/": "Comment", 55 | "/zh/": "评论" 56 | }, 57 | "items": [ 58 | { 59 | "name": "@vuepress/comment", 60 | "icon": "comment-dots", 61 | "recommend": true, 62 | "desc": { 63 | "/": "Comment plugin supporting Giscus, Twikoo, Waline and Artalk", 64 | "/zh/": "支持 Giscus, Twikoo, Waline 和 Artalk 的评论插件" 65 | }, 66 | "source": "vuepress/ecosystem/tree/main/plugins/blog/plugin-comment", 67 | "url": { 68 | "/": "ecosystem.vuejs.press/plugins/blog/comment/", 69 | "/zh/": "ecosystem.vuejs.press/zh/plugins/blog/comment/" 70 | } 71 | } 72 | ] 73 | }, 74 | { 75 | "header": { 76 | "/": "New Features", 77 | "/zh/": "新功能" 78 | }, 79 | "items": [ 80 | { 81 | "name": "@vuepress/back-to-top", 82 | "icon": "square-caret-up", 83 | "recommend": true, 84 | "desc": { 85 | "/": "Back to top button", 86 | "/zh/": "返回顶部按钮" 87 | }, 88 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-back-to-top", 89 | "url": { 90 | "/": "ecosystem.vuejs.press/plugins/features/back-to-top.html", 91 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/back-to-top.html" 92 | } 93 | }, 94 | { 95 | "name": "@vuepress/catalog", 96 | "icon": "network-wired", 97 | "recommend": true, 98 | "desc": { 99 | "/": "Plugins to generate catalog page automatically", 100 | "/zh/": "自动生成目录页面的插件" 101 | }, 102 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-catalog", 103 | "url": { 104 | "/": "ecosystem.vuejs.press/plugins/features/catalog.html", 105 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/catalog.html" 106 | } 107 | }, 108 | { 109 | "name": "@vuepress/copy-code", 110 | "icon": "copy", 111 | "recommend": true, 112 | "desc": { 113 | "/": "Provide copy button for code blocks.", 114 | "/zh/": "为代码块提供复制按钮" 115 | }, 116 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-copy-code", 117 | "url": { 118 | "/": "ecosystem.vuejs.press/plugins/features/copy-code.html", 119 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/copy-code.html" 120 | } 121 | }, 122 | { 123 | "name": "@vuepress/notice", 124 | "icon": "bell", 125 | "recommend": true, 126 | "desc": { 127 | "/": "Add notice to website", 128 | "/zh/": "网站添加通知公告" 129 | }, 130 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-notice", 131 | "url": { 132 | "/": "ecosystem.vuejs.press/plugins/features/notice.html", 133 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/notice.html" 134 | } 135 | }, 136 | { 137 | "name": "components", 138 | "icon": "puzzle-piece", 139 | "recommend": true, 140 | "tag": "latest", 141 | "desc": { 142 | "/": "Useful components in markdown", 143 | "/zh/": "一些在 Markdown 中使用的组件" 144 | }, 145 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/components/", 146 | "url": { 147 | "/": "plugin-components.vuejs.press", 148 | "/zh/": "plugin-components.vuejs.press/zh/" 149 | } 150 | }, 151 | { 152 | "name": "anchor-right", 153 | "icon": "anchor", 154 | "tag": "latest", 155 | "desc": { 156 | "/": "Generate right toc anchor", 157 | "/zh/": "生成右侧导航目录锚点" 158 | }, 159 | "source": "dingshaohua-cn/vuepress-plugin-anchor-right", 160 | "url": { 161 | "/": "github.com/dingshaohua-cn/vuepress-plugin-anchor-right/blob/main/README-en.md", 162 | "/zh/": "github.com/dingshaohua-cn/vuepress-plugin-anchor-right" 163 | } 164 | } 165 | ] 166 | }, 167 | { 168 | "header": { 169 | "/": "Copyright Information", 170 | "/zh/": "版权信息" 171 | }, 172 | "items": [ 173 | { 174 | "name": "@vuepress/copyright", 175 | "icon": "circle-info", 176 | "recommend": true, 177 | "desc": { 178 | "/": "Append copyright information while copying, while supports preventing selection and copy", 179 | "/zh/": "复制时附加版权信息,同时支持阻止选择和复制" 180 | }, 181 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-copyright", 182 | "url": { 183 | "/": "ecosystem.vuejs.press/plugins/features/copyright.html", 184 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/copyright.html" 185 | } 186 | }, 187 | { 188 | "name": "@vuepress/watermark", 189 | "icon": "xmarks-lines", 190 | "recommend": true, 191 | "desc": { 192 | "/": "Add watermark to pages", 193 | "/zh/": "为页面添加水印" 194 | }, 195 | "source": "vuepress/ecosystem/tree/main/plugins/features/plugin-watermark", 196 | "url": { 197 | "/": "ecosystem.vuejs.press/plugins/features/watermark.html", 198 | "/zh/": "ecosystem.vuejs.press/zh/plugins/features/watermark.html" 199 | } 200 | } 201 | ] 202 | }, 203 | { 204 | "header": { 205 | "/": "Tools", 206 | "/zh/": "工具" 207 | }, 208 | "items": [ 209 | { 210 | "name": "@vuepress/append-date", 211 | "icon": "calendar", 212 | "recommend": true, 213 | "desc": { 214 | "/": "Appending date to frontmatter based on git info", 215 | "/zh/": "基于 Git 信息追加时间到 frontmatter" 216 | }, 217 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-append-date", 218 | "url": { 219 | "/": "ecosystem.vuejs.press/plugins/markdown/append-date.html", 220 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/append-date.html" 221 | } 222 | }, 223 | { 224 | "name": "@vuepress/register-components", 225 | "icon": "puzzle-piece", 226 | "recommend": true, 227 | "desc": { 228 | "/": "Register Vue components from component files or directory automatically.", 229 | "/zh/": "自动从组件文件或目录中注册 Vue 组件。" 230 | }, 231 | "source": "vuepress/ecosystem/tree/main/plugins/tools/plugin-register-components", 232 | "url": { 233 | "/": "ecosystem.vuejs.press/plugins/tools/register-components.html", 234 | "/zh/": "ecosystem.vuejs.press/zh/plugins/tools/register-components.html" 235 | } 236 | }, 237 | { 238 | "name": "@vuepress/redirect", 239 | "icon": "fas fa-eject fa-rotate-90", 240 | "recommend": true, 241 | "desc": { 242 | "/": "Performing automatically redirects from old links to new ones", 243 | "/zh/": "自动从旧链接重定向到新链接" 244 | }, 245 | "source": "vuepress/ecosystem/tree/main/plugins/tools/plugin-redirect/", 246 | "url": { 247 | "/": "ecosystem.vuejs.press/plugins/tools/redirect.html", 248 | "/zh/": "ecosystem.vuejs.press/zh/plugins/tools/redirect.html" 249 | } 250 | }, 251 | { 252 | "name": "@vuepress/rtl", 253 | "icon": "arrow-right", 254 | "recommend": true, 255 | "desc": { 256 | "/": "RTL layout support", 257 | "/zh/": "RTL 布局支持" 258 | }, 259 | "source": "vuepress/ecosystem/tree/main/plugins/development/plugin-rtl/", 260 | "url": { 261 | "/": "ecosystem.vuejs.press/plugins/development/rtl.html", 262 | "/zh/": "ecosystem.vuejs.press/zh/plugins/development/rtl.html" 263 | } 264 | }, 265 | { 266 | "name": "@condorhero/export-pdf-v2", 267 | "icon": "file-pdf", 268 | "tag": "latest", 269 | "desc": { 270 | "/": "Export site to a PDF file", 271 | "/zh/": "将网站导出为 PDF 文件" 272 | }, 273 | "source": "condorheroblog/vuepress-plugin/tree/main/packages/vuepress-plugin-export-pdf-v2", 274 | "url": "https://github.com/condorheroblog/vuepress-plugin/tree/main/packages/vuepress-plugin-export-pdf-v2" 275 | } 276 | ] 277 | } 278 | ] 279 | -------------------------------------------------------------------------------- /config/plugins/markdown.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": { 4 | "/": "Markdown Highlighter", 5 | "/zh/": "Markdown 高亮器" 6 | }, 7 | "items": [ 8 | { 9 | "name": "@vuepress/shiki", 10 | "icon": "code", 11 | "recommend": true, 12 | "desc": { 13 | "/": " Enable syntax highlighting for markdown code fence with Shiki", 14 | "/zh/": "使用 Shiki 为 Markdown 代码块启用语法高亮" 15 | }, 16 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-shiki", 17 | "url": { 18 | "/": "ecosystem.vuejs.press/plugins/markdown/shiki.html", 19 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/shiki.html" 20 | } 21 | }, 22 | { 23 | "name": "@vuepress/prismjs", 24 | "icon": "code", 25 | "desc": { 26 | "/": " Enable syntax highlighting for markdown code fence with Prism.js", 27 | "/zh/": "使用 Prism.js 为 Markdown 代码块启用语法高亮" 28 | }, 29 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-prismjs/", 30 | "url": { 31 | "/": "ecosystem.vuejs.press/plugins/markdown/prismjs.html", 32 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/prismjs.html" 33 | } 34 | } 35 | ] 36 | }, 37 | { 38 | "header": { 39 | "/": "Markdown Stylizer", 40 | "/zh/": "Markdown 样式化" 41 | }, 42 | "items": [ 43 | { 44 | "name": "@vuepress/markdown-hint", 45 | "icon": "lightbulb", 46 | "recommend": true, 47 | "desc": { 48 | "/": "Add hint containers in markdown", 49 | "/zh/": "在 Markdown 中添加提示容器" 50 | }, 51 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-markdown-hint", 52 | "url": { 53 | "/": "ecosystem.vuejs.press/plugins/markdown/markdown-hint.html", 54 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/markdown-hint.html" 55 | } 56 | }, 57 | { 58 | "name": "@vuepress/markdown-image", 59 | "icon": "image", 60 | "recommend": true, 61 | "desc": { 62 | "/": "Support image size, render as figure and image lazyloading", 63 | "/zh/": "支持图片尺寸语法,将图片显示为 figure 并实现图片懒加载" 64 | }, 65 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-markdown-image", 66 | "url": { 67 | "/": "ecosystem.vuejs.press/plugins/markdown/markdown-image.html", 68 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/markdown-image.html" 69 | } 70 | }, 71 | { 72 | "name": "@vuepress/markdown-stylize", 73 | "icon": "table-columns", 74 | "recommend": true, 75 | "desc": { 76 | "/": "Stylize contents in markdown", 77 | "/zh/": "在 Markdown 中样式化内容" 78 | }, 79 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-markdown-stylize", 80 | "url": { 81 | "/": "ecosystem.vuejs.press/plugins/markdown/markdown-stylize.html", 82 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/markdown-stylize.html" 83 | } 84 | } 85 | ] 86 | }, 87 | { 88 | "header": { 89 | "/": "Markdown Syntax Extension", 90 | "/zh/": "Markdown 语法扩展" 91 | }, 92 | "items": [ 93 | { 94 | "name": "@vuepress/markdown-ext", 95 | "icon": "table-columns", 96 | "recommend": true, 97 | "desc": { 98 | "/": "Official markdown extension that supports gfm and others", 99 | "/zh/": "官方支持 GFM 等的 Markdown 扩展" 100 | }, 101 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-markdown-ext", 102 | "url": { 103 | "/": "ecosystem.vuejs.press/plugins/markdown/markdown-ext.html", 104 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/markdown-ext.html" 105 | } 106 | }, 107 | { 108 | "name": "@vuepress/markdown-tab", 109 | "icon": "table-columns", 110 | "recommend": true, 111 | "desc": { 112 | "/": "Add code tabs or tabs in Markdown", 113 | "/zh/": "在 Markdown 中添加代码选项卡与选项卡" 114 | }, 115 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-markdown-tab", 116 | "url": { 117 | "/": "ecosystem.vuejs.press/plugins/markdown/markdown-tab.html", 118 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/markdown-tab.html" 119 | } 120 | }, 121 | { 122 | "name": "@vuepress/markdown-math", 123 | "icon": "square-root-variable", 124 | "recommend": true, 125 | "desc": { 126 | "/": "Render tex equations with katex or mathjax", 127 | "/zh/": "使用 katex 或 mathjax 渲染 tex 公式" 128 | }, 129 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-markdown-math", 130 | "url": { 131 | "/": "ecosystem.vuejs.press/plugins/markdown/markdown-math.html", 132 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/markdown-math.html" 133 | } 134 | }, 135 | { 136 | "name": "@vuepress/markdown-include", 137 | "icon": "at", 138 | "recommend": true, 139 | "desc": { 140 | "/": "Import common markdown snippet into contents", 141 | "/zh/": "将公共的 Markdown 片段导入到内容中" 142 | }, 143 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-markdown-include", 144 | "url": { 145 | "/": "ecosystem.vuejs.press/plugins/markdown/markdown-include.html", 146 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/markdown-include.html" 147 | } 148 | }, 149 | { 150 | "name": "@vuepress/markdown-container", 151 | "icon": "box-open", 152 | "recommend": true, 153 | "desc": { 154 | "/": "Register markdown custom containers in your VuePress site", 155 | "/zh/": "在你的 VuePress 站点中注册 markdown 自定义容器" 156 | }, 157 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-markdown-container", 158 | "url": { 159 | "/": "ecosystem.vuejs.press/plugins/markdown/markdown-container.html", 160 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/markdown-container.html" 161 | } 162 | }, 163 | { 164 | "name": "components", 165 | "icon": "puzzle-piece", 166 | "recommend": true, 167 | "tag": "latest", 168 | "desc": { 169 | "/": "Useful components in markdown", 170 | "/zh/": "一些在 Markdown 中使用的组件" 171 | }, 172 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/components/", 173 | "url": { 174 | "/": "plugin-components.vuejs.press", 175 | "/zh/": "plugin-components.vuejs.press/zh/" 176 | } 177 | }, 178 | { 179 | "name": "netabare-switch", 180 | "icon": "toggle-on", 181 | "tag": "latest", 182 | "desc": { 183 | "/": " VuePress2 plugin to add toggle switch for spoilers.", 184 | "/zh/": "VuePress2 插件,用于添加剧透开关。" 185 | }, 186 | "source": "monsat/vuepress-plugin-netabare-switch", 187 | "url": "https://github.com/monsat/vuepress-plugin-netabare-switch" 188 | }, 189 | { 190 | "name": "@snippetors/tabs", 191 | "icon": "table-columns", 192 | "tag": "latest", 193 | "desc": { 194 | "/": " VuePress2 plugin which renders custom markdown containers as tabs, for vuepress v2.x", 195 | "/zh/": "VuePress2 插件,将自定义的 markdown 容器渲染为选项卡,适用于 vuepress v2.x" 196 | }, 197 | "source": "Snippetors/snippets/tree/main/packages/%40snippetors/vuepress-plugin-tabs", 198 | "url": "https://snippetors.github.io/plugins/vuepress-plugin-tabs.html" 199 | } 200 | ] 201 | }, 202 | { 203 | "header": { 204 | "/": "Features Integrations", 205 | "/zh/": "功能集成" 206 | }, 207 | "items": [ 208 | { 209 | "name": "md-enhance", 210 | "title": "ECharts", 211 | "icon": "chart-area", 212 | "recommend": true, 213 | "tag": "latest", 214 | "desc": { 215 | "/": "Integrate ECharts to display charts in Markdown", 216 | "/zh/": "在 Markdown 中集成 ECharts 以显示图表" 217 | }, 218 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/md-enhance", 219 | "url": { 220 | "/": "plugin-md-enhance.vuejs.press/guide/chart/echarts.html", 221 | "/zh/": "plugin-md-enhance.vuejs.press/zh/guide/chart/echarts.html" 222 | } 223 | }, 224 | { 225 | "name": "md-enhance", 226 | "title": "Mermaid", 227 | "icon": "chart-pie", 228 | "tag": "latest", 229 | "recommend": true, 230 | "desc": { 231 | "/": "Integrate Mermaid to display diagrams in Markdown", 232 | "/zh/": "在 Markdown 中集成 Mermaid 以显示图表" 233 | }, 234 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/md-enhance", 235 | "url": { 236 | "/": "plugin-md-enhance.vuejs.press/guide/chart/mermaid.html", 237 | "/zh/": "plugin-md-enhance.vuejs.press/zh/guide/chart/mermaid.html" 238 | } 239 | }, 240 | { 241 | "name": "md-enhance", 242 | "title": "Vue Playground", 243 | "icon": "fab fa-vuejs", 244 | "tag": "latest", 245 | "recommend": true, 246 | "desc": { 247 | "/": "Integrate Vue Playground in Markdown", 248 | "/zh/": "在 Markdown 中集成 Vue Playground" 249 | }, 250 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/md-enhance", 251 | "url": { 252 | "/": "plugin-md-enhance.vuejs.press/guide/code/vue-playground.html", 253 | "/zh/": "plugin-md-enhance.vuejs.press/zh/guide/code/vue-playground.html" 254 | } 255 | }, 256 | { 257 | "name": "@vuepress/revealjs", 258 | "icon": "person-chalkboard", 259 | "recommend": true, 260 | "desc": { 261 | "/": "Integrate slides with Reveal.js in Markdown", 262 | "/zh/": "在 Markdown 中通过 Reveal.js 集成幻灯片" 263 | }, 264 | "source": "vuepress/ecosystem/tree/main/plugins/markdown/plugin-revealjs", 265 | "url": { 266 | "/": "ecosystem.vuejs.press/plugins/markdown/revealjs/", 267 | "/zh/": "ecosystem.vuejs.press/zh/plugins/markdown/revealjs/" 268 | } 269 | }, 270 | 271 | { 272 | "name": "md-enhance", 273 | "title": "Chart.js", 274 | "icon": "chart-simple", 275 | "tag": "latest", 276 | "desc": { 277 | "/": "Integrate Chart.js to display charts in Markdown", 278 | "/zh/": "在 Markdown 中集成 Chart.js 以显示图表" 279 | }, 280 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/md-enhance", 281 | "url": { 282 | "/": "plugin-md-enhance.vuejs.press/guide/chart/chartjs.html", 283 | "/zh/": "plugin-md-enhance.vuejs.press/zh/guide/chart/chartjs.html" 284 | } 285 | }, 286 | { 287 | "name": "md-enhance", 288 | "title": "Flowchart", 289 | "icon": "route", 290 | "tag": "latest", 291 | "desc": { 292 | "/": "Integrate flowchart.js to display flowcharts in Markdown", 293 | "/zh/": "在 Markdown 集成 flowchart.js 中以显示流程图" 294 | }, 295 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/md-enhance", 296 | "url": { 297 | "/": "plugin-md-enhance.vuejs.press/guide/chart/flowchart.html", 298 | "/zh/": "plugin-md-enhance.vuejs.press/zh/guide/chart/flowchart.html" 299 | } 300 | }, 301 | { 302 | "name": "md-enhance", 303 | "title": "Code demo", 304 | "icon": "splotch", 305 | "tag": "latest", 306 | "desc": { 307 | "/": "Run and show code snippets in Markdown", 308 | "/zh/": "在 Markdown 中运行并展示代码片段" 309 | }, 310 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/md-enhance", 311 | "url": { 312 | "/": "plugin-md-enhance.vuejs.press/guide/dode/demo/", 313 | "/zh/": "plugin-md-enhance.vuejs.press/zh/guide/code/demo/" 314 | } 315 | }, 316 | { 317 | "name": "md-enhance", 318 | "title": "Playground", 319 | "icon": "code", 320 | "tag": "latest", 321 | "desc": { 322 | "/": "Integrate external playground services in Markdown", 323 | "/zh/": "在 Markdown 中集成外部 playground 服务" 324 | }, 325 | "source": "vuepress-theme-hope/vuepress-theme-hope/tree/main/packages/md-enhance", 326 | "url": { 327 | "/": "plugin-md-enhance.vuejs.press/guide/code/playground.html", 328 | "/zh/": "plugin-md-enhance.vuejs.press/zh/guide/code/playground.html" 329 | } 330 | } 331 | ] 332 | }, 333 | { 334 | "header": { 335 | "/": "Helpers", 336 | "/zh/": "辅助工具" 337 | }, 338 | "items": [ 339 | { 340 | "name": "markdown-define2", 341 | "icon": "anchor", 342 | "tag": "latest", 343 | "desc": { 344 | "/": "Define variables in markdown", 345 | "/zh/": "在 markdown 中定义变量" 346 | }, 347 | "source": "justforuse/vuepress-plugin-markdown-define2", 348 | "url": "https://github.com/justforuse/vuepress-plugin-markdown-define2" 349 | } 350 | ] 351 | } 352 | ] 353 | --------------------------------------------------------------------------------