├── .babelrc ├── .eslintrc.js ├── .gitignore ├── LICENSE ├── README-V0.x.md ├── README.md ├── README_en.md ├── docs ├── .vuepress │ ├── .cache │ │ ├── @vuepress_shared.js │ │ ├── @vuepress_shared.js.map │ │ ├── @vueuse_core.js │ │ ├── @vueuse_core.js.map │ │ ├── _metadata.json │ │ ├── nprogress.js │ │ ├── nprogress.js.map │ │ ├── package.json │ │ ├── vue-router.js │ │ ├── vue-router.js.map │ │ ├── vue.js │ │ └── vue.js.map │ ├── config.js │ ├── enhanceApp.js │ ├── mixin.js │ ├── nav │ │ └── index.js │ ├── public │ │ ├── hero.png │ │ ├── icons │ │ │ ├── android-chrome-192x192.png │ │ │ ├── android-chrome-512x512.png │ │ │ ├── apple-touch-icon-152x152.png │ │ │ ├── apple-touch-icon-60x60.png │ │ │ ├── apple-touch-icon-76x76.png │ │ │ ├── apple-touch-icon.png │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── msapplication-icon-144x144.png │ │ │ ├── mstile-150x150.png │ │ │ └── safari-pinned-tab.svg │ │ ├── logo.png │ │ └── manifest.json │ └── theme │ │ ├── README.md │ │ ├── components │ │ ├── AlgoliaSearchBox.vue │ │ ├── DropdownLink.vue │ │ ├── DropdownTransition.vue │ │ ├── Home.vue │ │ ├── NavLink.vue │ │ ├── NavLinks.vue │ │ ├── Navbar.vue │ │ ├── Page.vue │ │ ├── PageEdit.vue │ │ ├── PageNav.vue │ │ ├── Sidebar.vue │ │ ├── SidebarButton.vue │ │ ├── SidebarGroup.vue │ │ ├── SidebarLink.vue │ │ └── SidebarLinks.vue │ │ ├── enhanceApp.js │ │ ├── font-awesome-4.7.0 │ │ ├── HELP-US-OUT.txt │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ └── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── global-components │ │ ├── Archives.vue │ │ ├── Badge.vue │ │ ├── Comments.vue │ │ ├── HomeLayout.vue │ │ ├── Post.vue │ │ ├── Tags.vue │ │ └── TitleContent.vue │ │ ├── index.js │ │ ├── layouts │ │ ├── 404.vue │ │ └── Layout.vue │ │ ├── noopModule.js │ │ ├── package.json │ │ ├── styles │ │ ├── arrow.styl │ │ ├── code.styl │ │ ├── config.styl │ │ ├── custom-blocks.styl │ │ ├── index.styl │ │ ├── mobile.styl │ │ ├── toc.styl │ │ └── wrapper.styl │ │ └── util │ │ └── index.js ├── README.md ├── about │ └── README.md ├── archives │ └── README.md ├── blog │ └── Java │ │ └── README.md ├── friends │ └── README.md ├── project │ ├── README.md │ └── qduoj-add-problem.md ├── share │ ├── book │ │ └── README.md │ └── software │ │ ├── README.md │ │ └── index2.md └── tags │ └── README.md ├── package.json ├── packages ├── vuepress-plugin-valine-comment │ ├── lib │ │ ├── client │ │ │ ├── index.d.ts │ │ │ └── index.js │ │ ├── node │ │ │ ├── index..d.ts │ │ │ ├── index..js │ │ │ ├── valineComment.d.ts │ │ │ └── valineComment.js │ │ └── shared │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── valineOptions.d.ts │ │ │ └── valineOptions.js │ ├── package.json │ ├── src │ │ ├── client │ │ │ ├── component │ │ │ │ └── Comment.vue │ │ │ └── index.ts │ │ ├── node │ │ │ ├── index..ts │ │ │ └── valineComment.ts │ │ └── shared │ │ │ ├── index.ts │ │ │ └── valineOptions.ts │ ├── tsconfig.build.json │ ├── tsconfig.cjs.json │ ├── tsconfig.cjs.tsbuildinfo │ ├── tsconfig.esm.json │ ├── tsconfig.esm.tsbuildinfo │ └── yarn.lock └── vuepress-theme-tassel │ ├── lib │ ├── global │ │ ├── Comments.vue │ │ └── HomeLayout.vue │ ├── layouts │ │ └── Layout.vue │ └── node │ │ └── index.js │ ├── package.json │ └── yarn.lock ├── requirements.txt ├── scripts ├── deploy-cos.sh ├── deploy-gh.sh └── release.sh ├── tsconfig.base.json ├── tsconfig.build.json ├── tsconfig.json └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "test": { 4 | "presets": [ 5 | ["@babel/preset-env", { "targets": { "node": 8 }}] 6 | ] 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // module.exports = { 2 | // root: true, 3 | // extends: [ 4 | // 'plugin:vue-libs/recommended', 5 | // 'plugin:jest/recommended' 6 | // ], 7 | // rules: { 8 | // indent: ['error', 2, { MemberExpression: 'off' }] 9 | // } 10 | // } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | *.log 4 | .temp 5 | vuepress 6 | TODOs.md 7 | .idea 8 | /venv/ 9 | docs/blog/ 10 | .cache 11 | .temp -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 HiCodd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README-V0.x.md: -------------------------------------------------------------------------------- 1 | ## vuepress版本为0.14.x 2 | ## 运行项目 3 | 4 | yarn install //安装依赖 5 | yarn dev //运行 6 | 7 | ## 本地演示 8 | > 如果看到下面这行即说明开发运行正常 9 | 10 | VuePress dev server listening at http://localhost:8080/ 11 | 12 | > 打开浏览器,输入localhost:8080即可访问 13 | 14 | ## demo 15 | [demo](https://www.finen.tech/) 16 | 17 | ## 广告? 18 | > 因为使用了vuepress-theme-vue主题,所以需要删除一部分代码即可正常。在node_modules下搜索vuepress-theme-vue在Layout.vue中删除以下代码即可 19 | 20 | 21 | 22 | 23 | ## 开发 24 | 25 | > 如果您想用该项目部署您自己的blog,请fork本项目,然后clone到您本地即可更改。如果您懂vue.js,那您可以自己开发一部分插件。 26 | 27 | ## 评论功能 28 | 29 | ### 评论工具1 Valine.js 30 | [Valine.js使用方法](https://valine.js.org/) 31 | 32 | ### 评论工具2 gittalk 33 | [Gittalk](https://gitalk.github.io/) 34 | 35 | ### 评论工具3 gitment 36 | [Gitment](https://imsun.github.io/gitment/) 37 | 38 | 39 | 40 | 代码已经写好,在.vuepress目录下的enhanceApp.js中,依照网上配置可以很轻松使用Gitment或者Gittalk。 41 | Valine.js的某些bug确实有点烦恼,目前还在修缮中! 42 | 43 | 44 | 45 | ## 禁止评论 46 | > 很多情况的页面都不想被评论,所以在每篇文档开头设置即可!如下: 47 | 48 | --- 49 | title: git 进阶操作命令 50 | comments: true or false 51 | --- 52 | true: 可以评论,false: 禁止评论 53 | 54 | ## 官网文档 55 | 56 | [Vuepress文档](https://vuepress.docschina.org/) 57 | 58 | ## Valine.js食用方法 59 | [Valine.js文档](https://valine.js.org/) 60 | 61 | ## 浏览器支持 62 | Most browsers(Firefox,Chrome等) 63 | 64 | ## Bug 65 | 页面变动没有自动刷新路由。 66 | 67 | ## TODO 68 | 69 | 1. 使用其他方法更新评论组件 或者使用其他较为好用的评论组件 70 | 2. 添加categories and tag 71 | 3. 跟换其他主题 72 | 73 | ## LiCENSE 74 | MIT -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![vuepress](https://img.shields.io/badge/vuepress-1.0.0--alpha.42-blue.svg)](https://v1.vuepress.vuejs.org/) 2 | [![valine](https://img.shields.io/badge/valine-1.3.4-blue.svg)](https://valine.js.org/) 3 | [![element-ui](https://img.shields.io/badge/element-2.6.1-blue.svg)](http://element-cn.eleme.io/) 4 | 5 | [中文文档](https://github.com/hirCodd/vuepress-blog/blob/master/README.md)|[English](https://github.com/hirCodd/vuepress-blog/blob/master/README_en.md) 6 | 7 | ## vuepress版本为1.3.1 8 | 9 | ## 欢迎使用主题[vuepress-theme-tassel](https://github.com/hirCodd/vuepress-theme-tassel) 10 | ## 快速开始 11 | ```bash 12 | git clone https://github.com/hirCodd/vuepress-blog.git 13 | ``` 14 | ## 运行项目 15 | 16 | yarn install //安装依赖 17 | yarn dev //运行 18 | 19 | ## 本地演示 20 | > 如果看到下面这行即说明开发运行正常 21 | 22 | VuePress dev server listening at http://localhost:8080/ 23 | 24 | > 打开浏览器,输入localhost:8080即可访问 25 | 26 | ## demo 27 | [demo](https://www.finen.top/) 28 | 29 | ## 开发 30 | 31 | > 如果您想用该项目部署您自己的blog,请fork本项目,然后clone到您本地即可更改。如果您懂vue.js,那您可以自己开发一部分插件。 32 | 33 | ## 已完成功能 34 | - [x] Archives 35 | - [x] Tags Cloud 36 | - [x] Simple Categories 37 | 38 | ## 评论功能 39 | 40 | ### 评论工具1 Valine.js 41 | [Valine.js使用方法](https://valine.js.org/) 42 | 43 | ### 评论工具2 gittalk 44 | [Gittalk](https://gitalk.github.io/) 45 | 46 | ### 评论工具3 gitment 47 | [Gitment](https://imsun.github.io/gitment/) 48 | 49 | 50 | 代码已经写好,在`.vuepress/theme/components/Comments.vue`中,依照网上配置可以很轻松使用Gitment或者Gittalk。 51 | 52 | 53 | 54 | ## 禁止评论 55 | > 很多情况的页面都不想被评论,所以在每篇文档开头设置即可!如下: 56 | ```js 57 | --- 58 | title: git 进阶操作命令 59 | comments: true or false // true: 可以评论,false: 禁止评论 60 | post: true //是否作为archives或者tags的列表,true: 作为 false:禁止 61 | tags: 62 | - xxx 63 | date: 2019/03/21 11:24:30 64 | --- 65 | 66 | if (element.frontmatter.post == true) {} // archives 67 | if (element.frontmatter.post == true && element.frontmatter.tags.includes(tag)) {} // tags 68 | ``` 69 | 70 | ## vuePress官网文档 71 | 72 | [Vuepress文档](https://vuepress.docschina.org/) 73 | 74 | ## Valine.js食用方法 75 | [Valine.js文档](https://valine.js.org/) 76 | 77 | ## 浏览器支持 78 | Most browsers(Firefox,Chrome等) 79 | 80 | ## LiCENSE 81 | [MIT](https://github.com/hirCodd/vuepress-blog/blob/master/LICENSE) 82 | -------------------------------------------------------------------------------- /README_en.md: -------------------------------------------------------------------------------- 1 | [![vuepress](https://img.shields.io/badge/vuepress-1.0.0--alpha.42-blue.svg)](https://v1.vuepress.vuejs.org/) 2 | [![valine](https://img.shields.io/badge/valine-1.3.4-blue.svg)](https://valine.js.org/) 3 | [![element-ui](https://img.shields.io/badge/element-2.6.1-blue.svg)](http://element-cn.eleme.io/) 4 | 5 | [中文文档](https://github.com/hirCodd/vuepress-blog/blob/master/README.md)|[English](https://github.com/hirCodd/vuepress-blog/blob/master/README_en.md) 6 | 7 | ## vuepress: 1.3.1 8 | 9 | ## Quick Start 10 | ```bash 11 | git clone https://github.com/hirCodd/vuepress-blog.git 12 | ``` 13 | ## Local Development 14 | 15 | yarn install // install lib 16 | yarn dev // run dev 17 | 18 | ## Local Demo 19 | > If you see next code: 20 | 21 | VuePress dev server listening at http://localhost:8080/ 22 | 23 | > Open Browser, get this addrss: localhost:8080 24 | 25 | ## Remote Demo 26 | [demo](https://www.finen.top/) 27 | 28 | ## Develop 29 | 30 | > If you want to develop this blog, you can fork or clone this project. 31 | 32 | ## Function 33 | - [x] Archives 34 | - [x] Tags Cloud 35 | - [x] Simple Categories 36 | 37 | ## Comments 38 | 39 | ### Comment1: Valine.js 40 | [Valine.js](https://valine.js.org/) 41 | 42 | ### Comment2: gittalk 43 | [Gittalk](https://gitalk.github.io/) 44 | 45 | ### Comment3 gitment 46 | [Gitment](https://imsun.github.io/gitment/) 47 | 48 | 49 | this code on the directory: `.vuepress/theme/components/Comments.vue`,yan can use gittalk or gitment easily. 50 | 51 | 52 | 53 | ## Forbid Comment 54 | > on the xx.md, you can config these properties 55 | ```js 56 | --- 57 | title: git 58 | comments: true or false 59 | post: true //archives or tags: true 60 | tags: 61 | - xxx 62 | date: 2019/03/21 11:24:30 63 | --- 64 | 65 | if (element.frontmatter.post == true) {} // archives 66 | if (element.frontmatter.post == true && element.frontmatter.tags.includes(tag)) {} // tags 67 | ``` 68 | 69 | ## vuePress-Document 70 | 71 | [Vuepress](https://vuepress.docschina.org/) 72 | 73 | ## Valine.js-Document 74 | [Valine.js](https://valine.js.org/) 75 | 76 | ## Browser Support 77 | Most browsers(Firefox,Chrome...) 78 | 79 | ## LiCENSE 80 | [MIT](https://github.com/hirCodd/vuepress-blog/blob/master/LICENSE) -------------------------------------------------------------------------------- /docs/.vuepress/.cache/@vuepress_shared.js: -------------------------------------------------------------------------------- 1 | import { 2 | isArray, 3 | isFunction, 4 | isPromise, 5 | isString 6 | } from "./chunk-YV7C26G7.js"; 7 | import { 8 | init_define_MZ_ZOOM_OPTIONS 9 | } from "./chunk-FCVWRIDD.js"; 10 | 11 | // dep:@vuepress_shared 12 | init_define_MZ_ZOOM_OPTIONS(); 13 | 14 | // node_modules/@vuepress/shared/lib/esm/index.js 15 | init_define_MZ_ZOOM_OPTIONS(); 16 | 17 | // node_modules/@vuepress/shared/lib/esm/types/index.js 18 | init_define_MZ_ZOOM_OPTIONS(); 19 | 20 | // node_modules/@vuepress/shared/lib/esm/types/head.js 21 | init_define_MZ_ZOOM_OPTIONS(); 22 | 23 | // node_modules/@vuepress/shared/lib/esm/types/locale.js 24 | init_define_MZ_ZOOM_OPTIONS(); 25 | 26 | // node_modules/@vuepress/shared/lib/esm/types/page.js 27 | init_define_MZ_ZOOM_OPTIONS(); 28 | 29 | // node_modules/@vuepress/shared/lib/esm/types/site.js 30 | init_define_MZ_ZOOM_OPTIONS(); 31 | 32 | // node_modules/@vuepress/shared/lib/esm/types/ssr.js 33 | init_define_MZ_ZOOM_OPTIONS(); 34 | 35 | // node_modules/@vuepress/shared/lib/esm/utils/index.js 36 | init_define_MZ_ZOOM_OPTIONS(); 37 | 38 | // node_modules/@vuepress/shared/lib/esm/utils/dedupeHead.js 39 | init_define_MZ_ZOOM_OPTIONS(); 40 | 41 | // node_modules/@vuepress/shared/lib/esm/utils/resolveHeadIdentifier.js 42 | init_define_MZ_ZOOM_OPTIONS(); 43 | var resolveHeadIdentifier = ([tag, attrs, content]) => { 44 | if (tag === "meta" && attrs.name) { 45 | return `${tag}.${attrs.name}`; 46 | } 47 | if (["title", "base"].includes(tag)) { 48 | return tag; 49 | } 50 | if (tag === "template" && attrs.id) { 51 | return `${tag}.${attrs.id}`; 52 | } 53 | return JSON.stringify([tag, attrs, content]); 54 | }; 55 | 56 | // node_modules/@vuepress/shared/lib/esm/utils/dedupeHead.js 57 | var dedupeHead = (head) => { 58 | const identifierSet = new Set(); 59 | const result = []; 60 | head.forEach((item) => { 61 | const identifier = resolveHeadIdentifier(item); 62 | if (!identifierSet.has(identifier)) { 63 | identifierSet.add(identifier); 64 | result.push(item); 65 | } 66 | }); 67 | return result; 68 | }; 69 | 70 | // node_modules/@vuepress/shared/lib/esm/utils/ensureLeadingSlash.js 71 | init_define_MZ_ZOOM_OPTIONS(); 72 | var ensureLeadingSlash = (str) => str.replace(/^\/?/, "/"); 73 | 74 | // node_modules/@vuepress/shared/lib/esm/utils/ensureEndingSlash.js 75 | init_define_MZ_ZOOM_OPTIONS(); 76 | var ensureEndingSlash = (str) => /(\.html|\/)$/.test(str) ? str : str + "/"; 77 | 78 | // node_modules/@vuepress/shared/lib/esm/utils/formatDateString.js 79 | init_define_MZ_ZOOM_OPTIONS(); 80 | var formatDateString = (str, defaultDateString = "") => { 81 | const dateMatch = str.match(/\b(\d{4})-(\d{1,2})-(\d{1,2})\b/); 82 | if (dateMatch === null) { 83 | return defaultDateString; 84 | } 85 | const [, yearStr, monthStr, dayStr] = dateMatch; 86 | return [yearStr, monthStr.padStart(2, "0"), dayStr.padStart(2, "0")].join("-"); 87 | }; 88 | 89 | // node_modules/@vuepress/shared/lib/esm/utils/htmlEscape.js 90 | init_define_MZ_ZOOM_OPTIONS(); 91 | var htmlEscapeMap = { 92 | "&": "&", 93 | "<": "<", 94 | ">": ">", 95 | "'": "'", 96 | '"': """ 97 | }; 98 | var htmlEscapeRegexp = /[&<>'"]/g; 99 | var htmlEscape = (str) => str.replace(htmlEscapeRegexp, (char) => htmlEscapeMap[char]); 100 | 101 | // node_modules/@vuepress/shared/lib/esm/utils/htmlUnescape.js 102 | init_define_MZ_ZOOM_OPTIONS(); 103 | var htmlUnescapeMap = { 104 | "&": "&", 105 | "&": "&", 106 | "<": "<", 107 | "<": "<", 108 | ">": ">", 109 | ">": ">", 110 | "'": "'", 111 | "'": "'", 112 | """: '"', 113 | """: '"' 114 | }; 115 | var htmlUnescapeRegexp = /&(amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g; 116 | var htmlUnescape = (str) => str.replace(htmlUnescapeRegexp, (char) => htmlUnescapeMap[char]); 117 | 118 | // node_modules/@vuepress/shared/lib/esm/utils/isLinkExternal.js 119 | init_define_MZ_ZOOM_OPTIONS(); 120 | 121 | // node_modules/@vuepress/shared/lib/esm/utils/isLinkFtp.js 122 | init_define_MZ_ZOOM_OPTIONS(); 123 | var isLinkFtp = (link) => link.startsWith("ftp://"); 124 | 125 | // node_modules/@vuepress/shared/lib/esm/utils/isLinkHttp.js 126 | init_define_MZ_ZOOM_OPTIONS(); 127 | var isLinkHttp = (link) => /^(https?:)?\/\//.test(link); 128 | 129 | // node_modules/@vuepress/shared/lib/esm/utils/isLinkExternal.js 130 | var isLinkExternal = (link, base = "/") => { 131 | if (isLinkHttp(link) || isLinkFtp(link)) { 132 | return true; 133 | } 134 | if (link.startsWith("/") && !link.startsWith(base)) { 135 | return true; 136 | } 137 | return false; 138 | }; 139 | 140 | // node_modules/@vuepress/shared/lib/esm/utils/isLinkMailto.js 141 | init_define_MZ_ZOOM_OPTIONS(); 142 | var isLinkMailto = (link) => /^mailto:/.test(link); 143 | 144 | // node_modules/@vuepress/shared/lib/esm/utils/isLinkTel.js 145 | init_define_MZ_ZOOM_OPTIONS(); 146 | var isLinkTel = (link) => /^tel:/.test(link); 147 | 148 | // node_modules/@vuepress/shared/lib/esm/utils/isPlainObject.js 149 | init_define_MZ_ZOOM_OPTIONS(); 150 | var isPlainObject = (val) => Object.prototype.toString.call(val) === "[object Object]"; 151 | 152 | // node_modules/@vuepress/shared/lib/esm/utils/normalizePackageName.js 153 | init_define_MZ_ZOOM_OPTIONS(); 154 | var normalizePackageName = (request, org, type = null) => { 155 | const orgPrefix = `${org}-`; 156 | const typePrefix = type === null ? "" : `${type}-`; 157 | const scopedMatch = request.match(/^@(.*)\/(.*)$/); 158 | if (scopedMatch === null) { 159 | if (request.startsWith(`${orgPrefix}${typePrefix}`)) { 160 | return request; 161 | } 162 | return `${orgPrefix}${typePrefix}${request}`; 163 | } 164 | const [, reqOrg, reqName] = scopedMatch; 165 | if (reqOrg === org) { 166 | if (reqName.startsWith(typePrefix)) { 167 | return request; 168 | } 169 | return `@${reqOrg}/${typePrefix}${reqName}`; 170 | } 171 | if (reqName.startsWith(`${orgPrefix}${typePrefix}`)) { 172 | return request; 173 | } 174 | return `@${reqOrg}/${orgPrefix}${typePrefix}${reqName}`; 175 | }; 176 | 177 | // node_modules/@vuepress/shared/lib/esm/utils/removeEndingSlash.js 178 | init_define_MZ_ZOOM_OPTIONS(); 179 | var removeEndingSlash = (str) => str.replace(/\/$/, ""); 180 | 181 | // node_modules/@vuepress/shared/lib/esm/utils/removeLeadingSlash.js 182 | init_define_MZ_ZOOM_OPTIONS(); 183 | var removeLeadingSlash = (str) => str.replace(/^\//, ""); 184 | 185 | // node_modules/@vuepress/shared/lib/esm/utils/resolveLocalePath.js 186 | init_define_MZ_ZOOM_OPTIONS(); 187 | var resolveLocalePath = (locales, routePath) => { 188 | const localePaths = Object.keys(locales).sort((a, b) => { 189 | const levelDelta = b.split("/").length - a.split("/").length; 190 | if (levelDelta !== 0) { 191 | return levelDelta; 192 | } 193 | return b.length - a.length; 194 | }); 195 | for (const localePath of localePaths) { 196 | if (routePath.startsWith(localePath)) { 197 | return localePath; 198 | } 199 | } 200 | return "/"; 201 | }; 202 | 203 | // node_modules/@vuepress/shared/lib/esm/utils/resolveRoutePathFromUrl.js 204 | init_define_MZ_ZOOM_OPTIONS(); 205 | var resolveRoutePathFromUrl = (url, base = "/") => url.replace(/^(https?:)?\/\/[^/]*/, "").replace(new RegExp(`^${base}`), "/"); 206 | export { 207 | dedupeHead, 208 | ensureEndingSlash, 209 | ensureLeadingSlash, 210 | formatDateString, 211 | htmlEscape, 212 | htmlUnescape, 213 | isArray, 214 | isFunction, 215 | isLinkExternal, 216 | isLinkFtp, 217 | isLinkHttp, 218 | isLinkMailto, 219 | isLinkTel, 220 | isPlainObject, 221 | isPromise, 222 | isString, 223 | normalizePackageName, 224 | removeEndingSlash, 225 | removeLeadingSlash, 226 | resolveHeadIdentifier, 227 | resolveLocalePath, 228 | resolveRoutePathFromUrl 229 | }; 230 | //# sourceMappingURL=@vuepress_shared.js.map 231 | -------------------------------------------------------------------------------- /docs/.vuepress/.cache/_metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "hash": "0662b4f3", 3 | "browserHash": "8f631e4d", 4 | "optimized": { 5 | "vue": { 6 | "file": "E:/MyBlog/vuepress-blog/docs/.vuepress/.cache/vue.js", 7 | "src": "E:/MyBlog/vuepress-blog/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js", 8 | "needsInterop": false 9 | }, 10 | "vue-router": { 11 | "file": "E:/MyBlog/vuepress-blog/docs/.vuepress/.cache/vue-router.js", 12 | "src": "E:/MyBlog/vuepress-blog/node_modules/vue-router/dist/vue-router.esm-bundler.js", 13 | "needsInterop": false 14 | }, 15 | "@vueuse/core": { 16 | "file": "E:/MyBlog/vuepress-blog/docs/.vuepress/.cache/@vueuse_core.js", 17 | "src": "E:/MyBlog/vuepress-blog/node_modules/@vueuse/core/index.mjs", 18 | "needsInterop": false 19 | }, 20 | "nprogress": { 21 | "file": "E:/MyBlog/vuepress-blog/docs/.vuepress/.cache/nprogress.js", 22 | "src": "E:/MyBlog/vuepress-blog/node_modules/nprogress/nprogress.js", 23 | "needsInterop": true 24 | }, 25 | "@vuepress/shared": { 26 | "file": "E:/MyBlog/vuepress-blog/docs/.vuepress/.cache/@vuepress_shared.js", 27 | "src": "E:/MyBlog/vuepress-blog/node_modules/@vuepress/shared/lib/esm/index.js", 28 | "needsInterop": false 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /docs/.vuepress/.cache/nprogress.js: -------------------------------------------------------------------------------- 1 | import { 2 | __commonJS, 3 | init_define_MZ_ZOOM_OPTIONS 4 | } from "./chunk-FCVWRIDD.js"; 5 | 6 | // node_modules/nprogress/nprogress.js 7 | var require_nprogress = __commonJS({ 8 | "node_modules/nprogress/nprogress.js"(exports, module) { 9 | init_define_MZ_ZOOM_OPTIONS(); 10 | (function(root, factory) { 11 | if (typeof define === "function" && define.amd) { 12 | define(factory); 13 | } else if (typeof exports === "object") { 14 | module.exports = factory(); 15 | } else { 16 | root.NProgress = factory(); 17 | } 18 | })(exports, function() { 19 | var NProgress = {}; 20 | NProgress.version = "0.2.0"; 21 | var Settings = NProgress.settings = { 22 | minimum: 0.08, 23 | easing: "ease", 24 | positionUsing: "", 25 | speed: 200, 26 | trickle: true, 27 | trickleRate: 0.02, 28 | trickleSpeed: 800, 29 | showSpinner: true, 30 | barSelector: '[role="bar"]', 31 | spinnerSelector: '[role="spinner"]', 32 | parent: "body", 33 | template: '
' 34 | }; 35 | NProgress.configure = function(options) { 36 | var key, value; 37 | for (key in options) { 38 | value = options[key]; 39 | if (value !== void 0 && options.hasOwnProperty(key)) 40 | Settings[key] = value; 41 | } 42 | return this; 43 | }; 44 | NProgress.status = null; 45 | NProgress.set = function(n) { 46 | var started = NProgress.isStarted(); 47 | n = clamp(n, Settings.minimum, 1); 48 | NProgress.status = n === 1 ? null : n; 49 | var progress = NProgress.render(!started), bar = progress.querySelector(Settings.barSelector), speed = Settings.speed, ease = Settings.easing; 50 | progress.offsetWidth; 51 | queue(function(next) { 52 | if (Settings.positionUsing === "") 53 | Settings.positionUsing = NProgress.getPositioningCSS(); 54 | css(bar, barPositionCSS(n, speed, ease)); 55 | if (n === 1) { 56 | css(progress, { 57 | transition: "none", 58 | opacity: 1 59 | }); 60 | progress.offsetWidth; 61 | setTimeout(function() { 62 | css(progress, { 63 | transition: "all " + speed + "ms linear", 64 | opacity: 0 65 | }); 66 | setTimeout(function() { 67 | NProgress.remove(); 68 | next(); 69 | }, speed); 70 | }, speed); 71 | } else { 72 | setTimeout(next, speed); 73 | } 74 | }); 75 | return this; 76 | }; 77 | NProgress.isStarted = function() { 78 | return typeof NProgress.status === "number"; 79 | }; 80 | NProgress.start = function() { 81 | if (!NProgress.status) 82 | NProgress.set(0); 83 | var work = function() { 84 | setTimeout(function() { 85 | if (!NProgress.status) 86 | return; 87 | NProgress.trickle(); 88 | work(); 89 | }, Settings.trickleSpeed); 90 | }; 91 | if (Settings.trickle) 92 | work(); 93 | return this; 94 | }; 95 | NProgress.done = function(force) { 96 | if (!force && !NProgress.status) 97 | return this; 98 | return NProgress.inc(0.3 + 0.5 * Math.random()).set(1); 99 | }; 100 | NProgress.inc = function(amount) { 101 | var n = NProgress.status; 102 | if (!n) { 103 | return NProgress.start(); 104 | } else { 105 | if (typeof amount !== "number") { 106 | amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95); 107 | } 108 | n = clamp(n + amount, 0, 0.994); 109 | return NProgress.set(n); 110 | } 111 | }; 112 | NProgress.trickle = function() { 113 | return NProgress.inc(Math.random() * Settings.trickleRate); 114 | }; 115 | (function() { 116 | var initial = 0, current = 0; 117 | NProgress.promise = function($promise) { 118 | if (!$promise || $promise.state() === "resolved") { 119 | return this; 120 | } 121 | if (current === 0) { 122 | NProgress.start(); 123 | } 124 | initial++; 125 | current++; 126 | $promise.always(function() { 127 | current--; 128 | if (current === 0) { 129 | initial = 0; 130 | NProgress.done(); 131 | } else { 132 | NProgress.set((initial - current) / initial); 133 | } 134 | }); 135 | return this; 136 | }; 137 | })(); 138 | NProgress.render = function(fromStart) { 139 | if (NProgress.isRendered()) 140 | return document.getElementById("nprogress"); 141 | addClass(document.documentElement, "nprogress-busy"); 142 | var progress = document.createElement("div"); 143 | progress.id = "nprogress"; 144 | progress.innerHTML = Settings.template; 145 | var bar = progress.querySelector(Settings.barSelector), perc = fromStart ? "-100" : toBarPerc(NProgress.status || 0), parent = document.querySelector(Settings.parent), spinner; 146 | css(bar, { 147 | transition: "all 0 linear", 148 | transform: "translate3d(" + perc + "%,0,0)" 149 | }); 150 | if (!Settings.showSpinner) { 151 | spinner = progress.querySelector(Settings.spinnerSelector); 152 | spinner && removeElement(spinner); 153 | } 154 | if (parent != document.body) { 155 | addClass(parent, "nprogress-custom-parent"); 156 | } 157 | parent.appendChild(progress); 158 | return progress; 159 | }; 160 | NProgress.remove = function() { 161 | removeClass(document.documentElement, "nprogress-busy"); 162 | removeClass(document.querySelector(Settings.parent), "nprogress-custom-parent"); 163 | var progress = document.getElementById("nprogress"); 164 | progress && removeElement(progress); 165 | }; 166 | NProgress.isRendered = function() { 167 | return !!document.getElementById("nprogress"); 168 | }; 169 | NProgress.getPositioningCSS = function() { 170 | var bodyStyle = document.body.style; 171 | var vendorPrefix = "WebkitTransform" in bodyStyle ? "Webkit" : "MozTransform" in bodyStyle ? "Moz" : "msTransform" in bodyStyle ? "ms" : "OTransform" in bodyStyle ? "O" : ""; 172 | if (vendorPrefix + "Perspective" in bodyStyle) { 173 | return "translate3d"; 174 | } else if (vendorPrefix + "Transform" in bodyStyle) { 175 | return "translate"; 176 | } else { 177 | return "margin"; 178 | } 179 | }; 180 | function clamp(n, min, max) { 181 | if (n < min) 182 | return min; 183 | if (n > max) 184 | return max; 185 | return n; 186 | } 187 | function toBarPerc(n) { 188 | return (-1 + n) * 100; 189 | } 190 | function barPositionCSS(n, speed, ease) { 191 | var barCSS; 192 | if (Settings.positionUsing === "translate3d") { 193 | barCSS = { transform: "translate3d(" + toBarPerc(n) + "%,0,0)" }; 194 | } else if (Settings.positionUsing === "translate") { 195 | barCSS = { transform: "translate(" + toBarPerc(n) + "%,0)" }; 196 | } else { 197 | barCSS = { "margin-left": toBarPerc(n) + "%" }; 198 | } 199 | barCSS.transition = "all " + speed + "ms " + ease; 200 | return barCSS; 201 | } 202 | var queue = function() { 203 | var pending = []; 204 | function next() { 205 | var fn = pending.shift(); 206 | if (fn) { 207 | fn(next); 208 | } 209 | } 210 | return function(fn) { 211 | pending.push(fn); 212 | if (pending.length == 1) 213 | next(); 214 | }; 215 | }(); 216 | var css = function() { 217 | var cssPrefixes = ["Webkit", "O", "Moz", "ms"], cssProps = {}; 218 | function camelCase(string) { 219 | return string.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi, function(match, letter) { 220 | return letter.toUpperCase(); 221 | }); 222 | } 223 | function getVendorProp(name) { 224 | var style = document.body.style; 225 | if (name in style) 226 | return name; 227 | var i = cssPrefixes.length, capName = name.charAt(0).toUpperCase() + name.slice(1), vendorName; 228 | while (i--) { 229 | vendorName = cssPrefixes[i] + capName; 230 | if (vendorName in style) 231 | return vendorName; 232 | } 233 | return name; 234 | } 235 | function getStyleProp(name) { 236 | name = camelCase(name); 237 | return cssProps[name] || (cssProps[name] = getVendorProp(name)); 238 | } 239 | function applyCss(element, prop, value) { 240 | prop = getStyleProp(prop); 241 | element.style[prop] = value; 242 | } 243 | return function(element, properties) { 244 | var args = arguments, prop, value; 245 | if (args.length == 2) { 246 | for (prop in properties) { 247 | value = properties[prop]; 248 | if (value !== void 0 && properties.hasOwnProperty(prop)) 249 | applyCss(element, prop, value); 250 | } 251 | } else { 252 | applyCss(element, args[1], args[2]); 253 | } 254 | }; 255 | }(); 256 | function hasClass(element, name) { 257 | var list = typeof element == "string" ? element : classList(element); 258 | return list.indexOf(" " + name + " ") >= 0; 259 | } 260 | function addClass(element, name) { 261 | var oldList = classList(element), newList = oldList + name; 262 | if (hasClass(oldList, name)) 263 | return; 264 | element.className = newList.substring(1); 265 | } 266 | function removeClass(element, name) { 267 | var oldList = classList(element), newList; 268 | if (!hasClass(element, name)) 269 | return; 270 | newList = oldList.replace(" " + name + " ", " "); 271 | element.className = newList.substring(1, newList.length - 1); 272 | } 273 | function classList(element) { 274 | return (" " + (element.className || "") + " ").replace(/\s+/gi, " "); 275 | } 276 | function removeElement(element) { 277 | element && element.parentNode && element.parentNode.removeChild(element); 278 | } 279 | return NProgress; 280 | }); 281 | } 282 | }); 283 | 284 | // dep:nprogress 285 | init_define_MZ_ZOOM_OPTIONS(); 286 | var nprogress_default = require_nprogress(); 287 | export { 288 | nprogress_default as default 289 | }; 290 | /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress 291 | * @license MIT */ 292 | //# sourceMappingURL=nprogress.js.map 293 | -------------------------------------------------------------------------------- /docs/.vuepress/.cache/package.json: -------------------------------------------------------------------------------- 1 | {"type":"module"} -------------------------------------------------------------------------------- /docs/.vuepress/.cache/vue.js: -------------------------------------------------------------------------------- 1 | import { 2 | BaseTransition, 3 | Comment, 4 | EffectScope, 5 | Fragment, 6 | KeepAlive, 7 | ReactiveEffect, 8 | Static, 9 | Suspense, 10 | Teleport, 11 | Text, 12 | Transition, 13 | TransitionGroup, 14 | VueElement, 15 | callWithAsyncErrorHandling, 16 | callWithErrorHandling, 17 | cloneVNode, 18 | compatUtils, 19 | computed, 20 | createApp, 21 | createBaseVNode, 22 | createBlock, 23 | createCommentVNode, 24 | createElementBlock, 25 | createHydrationRenderer, 26 | createPropsRestProxy, 27 | createRenderer, 28 | createSSRApp, 29 | createSlots, 30 | createStaticVNode, 31 | createTextVNode, 32 | createVNode, 33 | customRef, 34 | defineAsyncComponent, 35 | defineComponent, 36 | defineCustomElement, 37 | defineEmits, 38 | defineExpose, 39 | defineProps, 40 | defineSSRCustomElement, 41 | devtools, 42 | effect, 43 | effectScope, 44 | getCurrentInstance, 45 | getCurrentScope, 46 | getTransitionRawChildren, 47 | guardReactiveProps, 48 | h, 49 | handleError, 50 | hydrate, 51 | initCustomFormatter, 52 | initDirectivesForSSR, 53 | inject, 54 | isMemoSame, 55 | isProxy, 56 | isReactive, 57 | isReadonly, 58 | isRef, 59 | isRuntimeOnly, 60 | isVNode, 61 | markRaw, 62 | mergeDefaults, 63 | mergeProps, 64 | nextTick, 65 | onActivated, 66 | onBeforeMount, 67 | onBeforeUnmount, 68 | onBeforeUpdate, 69 | onDeactivated, 70 | onErrorCaptured, 71 | onMounted, 72 | onRenderTracked, 73 | onRenderTriggered, 74 | onScopeDispose, 75 | onServerPrefetch, 76 | onUnmounted, 77 | onUpdated, 78 | openBlock, 79 | popScopeId, 80 | provide, 81 | proxyRefs, 82 | pushScopeId, 83 | queuePostFlushCb, 84 | reactive, 85 | readonly, 86 | ref, 87 | registerRuntimeCompiler, 88 | render, 89 | renderList, 90 | renderSlot, 91 | resolveComponent, 92 | resolveDirective, 93 | resolveDynamicComponent, 94 | resolveFilter, 95 | resolveTransitionHooks, 96 | setBlockTracking, 97 | setDevtoolsHook, 98 | setTransitionHooks, 99 | shallowReactive, 100 | shallowReadonly, 101 | shallowRef, 102 | ssrContextKey, 103 | ssrUtils, 104 | stop, 105 | toHandlers, 106 | toRaw, 107 | toRef, 108 | toRefs, 109 | transformVNodeArgs, 110 | triggerRef, 111 | unref, 112 | useAttrs, 113 | useCssModule, 114 | useCssVars, 115 | useSSRContext, 116 | useSlots, 117 | useTransitionState, 118 | vModelCheckbox, 119 | vModelDynamic, 120 | vModelRadio, 121 | vModelSelect, 122 | vModelText, 123 | vShow, 124 | version, 125 | warn, 126 | watch, 127 | watchEffect, 128 | watchPostEffect, 129 | watchSyncEffect, 130 | withAsyncContext, 131 | withCtx, 132 | withDefaults, 133 | withDirectives, 134 | withKeys, 135 | withMemo, 136 | withModifiers, 137 | withScopeId 138 | } from "./chunk-K4UNDIP3.js"; 139 | import { 140 | camelize, 141 | capitalize, 142 | normalizeClass, 143 | normalizeProps, 144 | normalizeStyle, 145 | toDisplayString, 146 | toHandlerKey 147 | } from "./chunk-YV7C26G7.js"; 148 | import { 149 | init_define_MZ_ZOOM_OPTIONS 150 | } from "./chunk-FCVWRIDD.js"; 151 | 152 | // dep:vue 153 | init_define_MZ_ZOOM_OPTIONS(); 154 | export { 155 | BaseTransition, 156 | Comment, 157 | EffectScope, 158 | Fragment, 159 | KeepAlive, 160 | ReactiveEffect, 161 | Static, 162 | Suspense, 163 | Teleport, 164 | Text, 165 | Transition, 166 | TransitionGroup, 167 | VueElement, 168 | callWithAsyncErrorHandling, 169 | callWithErrorHandling, 170 | camelize, 171 | capitalize, 172 | cloneVNode, 173 | compatUtils, 174 | computed, 175 | createApp, 176 | createBlock, 177 | createCommentVNode, 178 | createElementBlock, 179 | createBaseVNode as createElementVNode, 180 | createHydrationRenderer, 181 | createPropsRestProxy, 182 | createRenderer, 183 | createSSRApp, 184 | createSlots, 185 | createStaticVNode, 186 | createTextVNode, 187 | createVNode, 188 | customRef, 189 | defineAsyncComponent, 190 | defineComponent, 191 | defineCustomElement, 192 | defineEmits, 193 | defineExpose, 194 | defineProps, 195 | defineSSRCustomElement, 196 | devtools, 197 | effect, 198 | effectScope, 199 | getCurrentInstance, 200 | getCurrentScope, 201 | getTransitionRawChildren, 202 | guardReactiveProps, 203 | h, 204 | handleError, 205 | hydrate, 206 | initCustomFormatter, 207 | initDirectivesForSSR, 208 | inject, 209 | isMemoSame, 210 | isProxy, 211 | isReactive, 212 | isReadonly, 213 | isRef, 214 | isRuntimeOnly, 215 | isVNode, 216 | markRaw, 217 | mergeDefaults, 218 | mergeProps, 219 | nextTick, 220 | normalizeClass, 221 | normalizeProps, 222 | normalizeStyle, 223 | onActivated, 224 | onBeforeMount, 225 | onBeforeUnmount, 226 | onBeforeUpdate, 227 | onDeactivated, 228 | onErrorCaptured, 229 | onMounted, 230 | onRenderTracked, 231 | onRenderTriggered, 232 | onScopeDispose, 233 | onServerPrefetch, 234 | onUnmounted, 235 | onUpdated, 236 | openBlock, 237 | popScopeId, 238 | provide, 239 | proxyRefs, 240 | pushScopeId, 241 | queuePostFlushCb, 242 | reactive, 243 | readonly, 244 | ref, 245 | registerRuntimeCompiler, 246 | render, 247 | renderList, 248 | renderSlot, 249 | resolveComponent, 250 | resolveDirective, 251 | resolveDynamicComponent, 252 | resolveFilter, 253 | resolveTransitionHooks, 254 | setBlockTracking, 255 | setDevtoolsHook, 256 | setTransitionHooks, 257 | shallowReactive, 258 | shallowReadonly, 259 | shallowRef, 260 | ssrContextKey, 261 | ssrUtils, 262 | stop, 263 | toDisplayString, 264 | toHandlerKey, 265 | toHandlers, 266 | toRaw, 267 | toRef, 268 | toRefs, 269 | transformVNodeArgs, 270 | triggerRef, 271 | unref, 272 | useAttrs, 273 | useCssModule, 274 | useCssVars, 275 | useSSRContext, 276 | useSlots, 277 | useTransitionState, 278 | vModelCheckbox, 279 | vModelDynamic, 280 | vModelRadio, 281 | vModelSelect, 282 | vModelText, 283 | vShow, 284 | version, 285 | warn, 286 | watch, 287 | watchEffect, 288 | watchPostEffect, 289 | watchSyncEffect, 290 | withAsyncContext, 291 | withCtx, 292 | withDefaults, 293 | withDirectives, 294 | withKeys, 295 | withMemo, 296 | withModifiers, 297 | withScopeId 298 | }; 299 | //# sourceMappingURL=vue.js.map 300 | -------------------------------------------------------------------------------- /docs/.vuepress/.cache/vue.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "sources": ["dep:vue"], 4 | "sourcesContent": ["\nexport * from \"../../../../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js\""], 5 | "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;", 6 | "names": [] 7 | } 8 | -------------------------------------------------------------------------------- /docs/.vuepress/config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | dest: 'vuepress', 5 | locales: { 6 | '/': { 7 | lang: 'en-US', 8 | title: "SimpleThinking's Blog", 9 | description: 'Stay Hungry! Stay Foolish!', 10 | }, 11 | }, 12 | head: [ 13 | ['link', { rel: 'icon', href: `/logo.png` }], 14 | ['link', { rel: 'manifest', href: '/manifest.json' }], 15 | ['meta', { name: 'theme-color', content: '#3eaf7c' }], 16 | ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }], 17 | ['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'black' }], 18 | ['link', { rel: 'apple-touch-icon', href: `/icons/apple-touch-icon-152x152.png` }], 19 | ['link', { rel: 'mask-icon', href: '/icons/safari-pinned-tab.svg', color: '#3eaf7c' }], 20 | ['meta', { name: 'msapplication-TileImage', content: '/icons/msapplication-icon-144x144.png' }], 21 | ['meta', { name: 'msapplication-TileColor', content: '#000000' }] 22 | ], 23 | markdown: { 24 | lineNumbers: true 25 | }, 26 | evergreen: true, 27 | activeHeaderLinks: true, 28 | // algolia: { 29 | // apiKey: 'f417527242ae53d1f9d2913eb1ef07d4', 30 | // indexName: 'FinenBlog' 31 | // }, 32 | plugins: [ 33 | ['@vuepress/container', { 34 | type: 'tip', 35 | locales: { 36 | '/': { 37 | defaultInfo: 'TIP', 38 | }, 39 | '/zh/': { 40 | defaultInfo: '提示', 41 | }, 42 | }, 43 | },{ 44 | type: 'warning', 45 | locales: { 46 | '/': { 47 | defaultInfo: 'WARNING', 48 | }, 49 | '/zh/': { 50 | defaultInfo: '警告', 51 | }, 52 | }, 53 | },{ 54 | type: 'danger', 55 | locales: { 56 | '/': { 57 | defaultInfo: 'DANGER', 58 | }, 59 | '/zh/': { 60 | defaultInfo: '危险', 61 | }, 62 | }, 63 | }], 64 | ["vuepress-plugin-valine-comment", { 65 | "COMMENT_OPTIONS": { 66 | appId: 'piM1Wm7mzq4fsj7RfCCJ7slE-gzGzoHsz', 67 | appKey: 'vdSq43byXijVSfd0Y5qY0vf8', 68 | } 69 | }] 70 | ], 71 | 72 | // plugins: [ 73 | // ['@vuepress/active-header-links', { 74 | // sidebarLinkSelector: '.sidebar-link', 75 | // headerAnchorSelector: '.header-anchor' 76 | // }], 77 | // ['@vuepress/medium-zoom', { 78 | // selector: 'img.zoom-custom-imgs', 79 | // // medium-zoom options here 80 | // // See: https://github.com/francoischalifour/medium-zoom#options 81 | // options: { 82 | // margin: 16 83 | // } 84 | // }], 85 | // ['@vuepress/pwa', { 86 | // serviceWorker: true, 87 | // updatePopup: true 88 | // }], 89 | // ['@vuepress/search', { 90 | // searchMaxSuggestions: 10 91 | // }], 92 | // ['@vuepress/back-to-top', true], 93 | // ['@vuepress/container', true], 94 | // ['@vuepress/nprogress', true], 95 | // ['@vuepress/register-components', true], 96 | // ['@vuepress/google-analytics', { 97 | // ga: 'UA-131334453-1' 98 | // }] 99 | // ], 100 | theme: path.resolve(__dirname, '../../packages/vuepress-theme-tassel/lib/node/index'), 101 | // theme: path.resolve(__dirname, './packages/theme-tassel2/lib/node/index'), 102 | themeConfig: { 103 | repo: 'moremind', 104 | label: '简体中文', 105 | selectText: '选择语言', 106 | logo: null, 107 | navbar: require('./nav/index'), 108 | sidebar: [], 109 | editLink: false, 110 | editLinkText: 'Edit this page', 111 | editLinkPattern: ':repo/blob/:branch/:path', 112 | docsRepo: 'https://github.com/moremind/vuepress-blog', 113 | docsBranch: 'master', 114 | docsDir: 'docs', 115 | lastUpdated: false, 116 | lastUpdatedText: 'Last Updated', 117 | contributors: false, 118 | contributorsText: 'Contributors', 119 | backToHome: 'Back to home', 120 | toggleDarkMode: 'toggle dark mode', 121 | // navbar: require('./nav/index'), 122 | // homePage: 'HomeLayout', // Post or HomeLayout 123 | valineConfig: { 124 | appId: 'piM1Wm7mzq4fsj7RfCCJ7slE-gzGzoHsz', 125 | appKey: 'vdSq43byXijVSfd0Y5qY0vf8', 126 | notify: false, 127 | verify: false, 128 | avatar: 'mm', 129 | placeholder: 'just go go...😁😁', 130 | pageSize: 15, 131 | visitor: true, 132 | highlight: true, 133 | recordIP: true 134 | }, 135 | // homeConfig: { 136 | // homeSrc: 'https://finen-1251602255.cos.ap-shanghai.myqcloud.com/blog/home/hero.png', 137 | // nickname: 'Finen', 138 | // signature: 'Stay Hungry, Stay Foolish!', 139 | // urllink1: 'https://github.com/hirCodd', 140 | // urllink1_text: 'Github', 141 | // urllink2: 'https://blog.csdn.net/HookJony', 142 | // urllink2_text: 'CSDN', 143 | // copyright: '2017-present Finen', 144 | // beian: '', 145 | // github_url: 'https://github.com/hirCodd', 146 | // github: 'hirCodd' 147 | // }, 148 | // author: 'Finen', 149 | // locales: { 150 | // '/': { 151 | 152 | // // sidebar: { 153 | // // '/blog/others/git/': genGitSidebarConfig('git学习'), 154 | // // 155 | // // // linux 156 | // // '/blog/linux/': genLinuxSidebarConfig('Linux学习'), 157 | // // 158 | // // // wheel 159 | // // '/blog/others/wheel/': genWheelSidebarConfig('轮子'), 160 | // // 161 | // // '/blog/frontend/': genFrontendConfig('前端开发'), 162 | // // 163 | // // // record 164 | // // '/blog/others/life-record/': genRecordSidebarConfig('生活随笔'), 165 | // // 166 | // // // '/project/': genPorjectSidebarConfig('项目记录'), 167 | // // '/blog/others/server/': genServerSidebarConfig('服务端'), 168 | // // 169 | // // // java栏目 170 | // // '/blog/java/': genJavaArticle(), 171 | // // 172 | // // // python栏目 173 | // // '/blog/python/': genPythonArticle() 174 | // // } 175 | // } 176 | // } 177 | // }, 178 | } 179 | } 180 | 181 | function genGitSidebarConfig (title) { 182 | return [ 183 | { 184 | title, 185 | collapsable: false, 186 | children: [ 187 | '', 188 | 'git-advanced-command', 189 | 'git-remote-command', 190 | 'git-branch-command', 191 | 'git-cooperate-develop-command' 192 | ] 193 | } 194 | ] 195 | } 196 | 197 | function genLinuxSidebarConfig (title) { 198 | return [ 199 | { 200 | title, 201 | collapsable: false, 202 | children: [ 203 | '', 204 | 'linux-use-root-accout-login', 205 | 'linux-ubuntu-pip-ssl-module-not-setup', 206 | 'linux-setup-usual-software', 207 | 'linux-nginx-basic-command', 208 | 'linux-python2-python3-setup-use', 209 | 'linux-manjaro' 210 | ] 211 | } 212 | ] 213 | } 214 | 215 | function genWheelSidebarConfig(title){ 216 | return [ 217 | { 218 | title, 219 | collapsable: false, 220 | children: [ 221 | '', 222 | 'qduoj-development-record', 223 | 'vuepress' 224 | ] 225 | } 226 | ] 227 | } 228 | 229 | function genOthersSidebarConfig (title) { 230 | return [ 231 | { 232 | title, 233 | collapsable: false, 234 | children: [ 235 | '', 236 | 237 | ] 238 | } 239 | ] 240 | } 241 | 242 | function genRecordSidebarConfig (title) { 243 | return [ 244 | { 245 | title, 246 | collapsable: false, 247 | children: [ 248 | '', 249 | '2018', 250 | '2019' 251 | ] 252 | } 253 | ] 254 | } 255 | 256 | function genPorjectSidebarConfig(title){ 257 | return [ 258 | { 259 | title, 260 | collapsable: false, 261 | children: [ 262 | '', 263 | 'qduoj-add-problem', 264 | ] 265 | } 266 | ] 267 | } 268 | 269 | function genFrontendConfig (title){ 270 | return [ 271 | { 272 | title, 273 | collapsable: false, 274 | children: [ 275 | '', 276 | 'wxapp' 277 | ] 278 | } 279 | ] 280 | } 281 | 282 | function genJavaArticle() { 283 | return [ 284 | { 285 | title: 'Java基础进阶', 286 | collapsable: true, 287 | children: [ 288 | '', 289 | ] 290 | }, 291 | { 292 | title: 'Spring', 293 | children: [ 294 | 295 | ] 296 | }, 297 | { 298 | title: 'SpringMVC', 299 | children: [ 300 | 301 | ] 302 | }, 303 | { 304 | title: 'SpringBoot', 305 | children: [ 306 | 'springboot/spring-boot', 307 | 'springboot/principle', 308 | 'springboot/conf-file', 309 | 'springboot/profile-file', 310 | 'springboot/conf-file-loading', 311 | 'springboot/auto-configuration' 312 | ] 313 | }, 314 | { 315 | title: 'Mybatis', 316 | children: [ 317 | 'mybatis/mybatis-param-process', 318 | 'mybatis/mybatis-select', 319 | 'mybatis/mybatis-dynamicSQL', 320 | 'mybatis/mybatis-cache' 321 | ] 322 | }, 323 | ] 324 | } 325 | 326 | function genPythonArticle(){ 327 | return [ 328 | { 329 | title: 'Python基础', 330 | collapsable: true, 331 | children: [ 332 | '', 333 | ] 334 | }, 335 | { 336 | title: 'Python爬虫', 337 | children: [ 338 | 'selenium-api-docs', 339 | 'python-crawling-toutiao-picture' 340 | ] 341 | }, 342 | { 343 | title: 'Python后端', 344 | children: [ /* ... */ ] 345 | }, 346 | { 347 | title: 'Other', 348 | children: [ /* ... */ ] 349 | }] 350 | } 351 | 352 | function genServerSidebarConfig(title) { 353 | return [ 354 | { 355 | title, 356 | collapsable: false, 357 | children: [ 358 | '', 359 | 'nginx' 360 | ] 361 | } 362 | ] 363 | } 364 | -------------------------------------------------------------------------------- /docs/.vuepress/enhanceApp.js: -------------------------------------------------------------------------------- 1 | import {Timeline, Card, Tag, Icon, Badge, Button, TimelineItem, Pagination, Row} from 'element-ui'; 2 | import 'element-ui/lib/theme-chalk/index.css' 3 | 4 | 5 | export default ({ 6 | Vue, // VuePress 正在使用的 Vue 构造函数 7 | options, // 附加到根实例的一些选项 8 | router, // 当前应用的路由实例 9 | siteData // 站点元数据 10 | }) => { 11 | Vue.use(Timeline); 12 | Vue.use(Card); 13 | Vue.use(Tag); 14 | Vue.use(Icon); 15 | Vue.use(Badge); 16 | Vue.use(Button); 17 | Vue.use(TimelineItem); 18 | Vue.use(Pagination); 19 | Vue.use(Row); 20 | } 21 | -------------------------------------------------------------------------------- /docs/.vuepress/mixin.js: -------------------------------------------------------------------------------- 1 | const notification = { 2 | '/': ` 3 |
4 |
Note that this is the document of 1.x, since it's still in alpha stage and things may change or break until we reach beta phase, for now we recommend that you use the 0.x in the production environment.
5 |
6 |
    7 |
  • 0.x docs: v0.vuepress.vuejs.org 8 |
  • 9 |
  • Install 0.x: yarn add vuepress
  • 10 |
  • Install 1.x alpha: yarn add vuepress@next
  • 11 |
12 |
13 | `, 14 | '/zh/': ` 15 |
16 |
请注意这是 1.x 的文档,由于目前 1.x 仍处于 alpha 阶段,在我们到达 beta 阶段之前,有些 API 可能会变化、应用也可能不够稳定,所以目前我们推荐你在生产环境中使用 0.x .
17 |
18 |
    19 |
  • 0.x 的文档: v0.vuepress.vuejs.org 20 |
  • 21 |
  • 安装 0.x: yarn add vuepress
  • 22 |
  • 安装 1.x alpha: yarn add vuepress@next
  • 23 |
24 |
25 | ` 26 | } 27 | 28 | const gotIt = { 29 | '/': 'Got it', 30 | '/zh/': '知道了' 31 | } 32 | 33 | export default { 34 | methods: { 35 | notice () { 36 | setTimeout(() => { 37 | this.$notification = this.$toasted.show(notification[this.$localePath], { 38 | containerClass: 'compatibility-notification', 39 | closeOnSwipe: false, 40 | // you can pass a single action as below 41 | action: { 42 | text: gotIt[this.$localePath], 43 | onClick: (e, toastObject) => { 44 | toastObject.goAway(0) 45 | } 46 | } 47 | }) 48 | }, 500) 49 | } 50 | }, 51 | watch: { 52 | '$page' () { 53 | this.$notification && this.$notification.goAway(0) 54 | }, 55 | '$localePath' () { 56 | this.$notification && this.$notification.goAway(0) 57 | this.notice() 58 | } 59 | }, 60 | mounted () { 61 | this.notice() 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /docs/.vuepress/nav/index.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | text: '文章', 4 | link: '/post/', 5 | }, 6 | // { 7 | // text: "Category", 8 | // items: [ 9 | // { 10 | // text: 'BackEnd', 11 | // items: [ 12 | // { 13 | // text: 'Java', 14 | // link: '/blog/java/' 15 | // }, 16 | // { 17 | // text: 'Python', 18 | // link: '/blog/python/' 19 | // } 20 | // ] 21 | // }, 22 | // { 23 | // text: 'FrontEnd', 24 | // items: [ 25 | // { 26 | // text: 'Frontend', 27 | // link: '/blog/frontend/' 28 | // } 29 | // ] 30 | // }, 31 | // { 32 | // text: 'Linux', 33 | // items: [ 34 | // { 35 | // text: 'Linux', 36 | // link: '/blog/linux/' 37 | // } 38 | // ] 39 | // }, 40 | // { 41 | // text: 'Other', 42 | // items: [ 43 | // { text: 'Git', link: '/blog/others/git/' }, 44 | // { text: 'Wheel', link: '/blog/others/wheel/' }, 45 | // { text: 'Server', link: '/blog/others/server/' }, 46 | // { text: 'LifeRecord', link: '/blog/others/life-record/'} 47 | // ] 48 | // }, 49 | // ] 50 | // }, 51 | // { 52 | // text: 'Another', 53 | // items: [ 54 | // { 55 | // text: 'Project', 56 | // items: [ 57 | // { text: 'Project', link: '/project/'}, 58 | // ] 59 | // }, 60 | // { 61 | // text: 'Tools Sharing', 62 | // items: [ 63 | // { text: 'Book Sharing', link: '/share/book/' }, 64 | // { text: 'Software Sharing', link: '/share/software/' } 65 | // ] 66 | // }, 67 | // ], 68 | // }, 69 | // { 70 | // text: 'Resume', 71 | // link: '/about/' 72 | // }, 73 | { 74 | text: '归档', 75 | link: '/archives/' 76 | }, 77 | { 78 | text: '标签云', 79 | link: '/tags/' 80 | }, 81 | { 82 | text: '友人帐', 83 | link: '/friends/' 84 | } 85 | ]; 86 | -------------------------------------------------------------------------------- /docs/.vuepress/public/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/hero.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/favicon-16x16.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/favicon-32x32.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/msapplication-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/msapplication-icon-144x144.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/icons/mstile-150x150.png -------------------------------------------------------------------------------- /docs/.vuepress/public/icons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.11, written by Peter Selinger 2001-2013 9 | 10 | 12 | 148 | 149 | 150 | -------------------------------------------------------------------------------- /docs/.vuepress/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/public/logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Finen's Blog", 3 | "short_name": "Finen's Blog", 4 | "icons": [ 5 | { 6 | "src": "/icons/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/icons/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "start_url": "/index.html", 17 | "display": "standalone", 18 | "background_color": "#fff", 19 | "theme_color": "#3eaf7c" 20 | } 21 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/README.md: -------------------------------------------------------------------------------- 1 | # @vuepress/theme-default 2 | 3 | > theme-default for VuePress 4 | 5 | ## Plugins 6 | 7 | The default theme has the following plugin built in: 8 | 9 | - [@vuepress/plugin-active-header-links](https://github.com/vuejs/vuepress/tree/master/packages/@vuepress/plugin-active-header-links) 10 | - [@vuepress/plugin-google-analytics](https://github.com/vuejs/vuepress/tree/master/packages/%40vuepress/plugin-google-analytics) 11 | - [@vuepress/plugin-search](https://github.com/vuejs/vuepress/tree/master/packages/%40vuepress/plugin-search) 12 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/AlgoliaSearchBox.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 76 | 77 | 171 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/DropdownLink.vue: -------------------------------------------------------------------------------- 1 | 63 | 64 | 112 | 113 | 231 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/DropdownTransition.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 28 | 29 | 34 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Home.vue: -------------------------------------------------------------------------------- 1 | 72 | 73 | 94 | 95 | 185 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/NavLink.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 88 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/NavLinks.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 124 | 125 | 158 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 94 | 95 | 142 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Page.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 30 | 31 | 39 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/PageEdit.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 109 | 110 | 144 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/PageNav.vue: -------------------------------------------------------------------------------- 1 | 59 | 60 | 147 | 148 | 164 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Sidebar.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 27 | 28 | 65 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/SidebarButton.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 41 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/SidebarGroup.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 82 | 83 | 141 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/SidebarLink.vue: -------------------------------------------------------------------------------- 1 | 103 | 104 | 134 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/SidebarLinks.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 103 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/enhanceApp.js: -------------------------------------------------------------------------------- 1 | // 应用级 2 | import {Timeline, Card, Tag, Icon, Badge, Button, TimelineItem, Pagination, Row} from 'element-ui'; 3 | import 'element-ui/lib/theme-chalk/index.css' 4 | import './font-awesome-4.7.0/css/font-awesome.css' 5 | 6 | export default ({ 7 | Vue, // VuePress 正在使用的 Vue 构造函数 8 | options, // 附加到根实例的一些选项 9 | router, // 当前应用的路由实例 10 | siteData // 站点元数据 11 | }) => { 12 | // 应用级别的路由配置 13 | // router.addRoutes([ 14 | // { 15 | // path: '/archives/', 16 | // component: () => import('@theme/components/Archives.vue') 17 | // }, 18 | // { 19 | // path: '/tags/', 20 | // component: () => import('@theme/components/Tags.vue') 21 | // }, 22 | // { 23 | // path: '/posts/', 24 | // component: () => import('@theme/components/Post.vue') 25 | // } 26 | // ]) 27 | Vue.use(Timeline); 28 | Vue.use(Card); 29 | Vue.use(Tag); 30 | Vue.use(Icon); 31 | Vue.use(Badge); 32 | Vue.use(Button); 33 | Vue.use(TimelineItem); 34 | Vue.use(Pagination); 35 | Vue.use(Row); 36 | } 37 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/font-awesome-4.7.0/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/theme/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /docs/.vuepress/theme/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/theme/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/.vuepress/theme/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/theme/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/.vuepress/theme/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/theme/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/.vuepress/theme/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/docs/.vuepress/theme/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/Archives.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 31 | 32 | 105 | 132 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/Badge.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 45 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/Comments.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 56 | 57 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/HomeLayout.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 68 | 69 | 210 | 215 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/Post.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 128 | 164 | 195 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/Tags.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 120 | 121 | 157 | 158 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/TitleContent.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 46 | 47 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/index.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | // Theme API. 4 | module.exports = (options, ctx) => { 5 | const { themeConfig, siteConfig } = ctx 6 | 7 | // resolve algolia 8 | const isAlgoliaSearch = ( 9 | themeConfig.algolia 10 | || Object 11 | .keys(siteConfig.locales && themeConfig.locales || {}) 12 | .some(base => themeConfig.locales[base].algolia) 13 | ) 14 | 15 | const enableSmoothScroll = themeConfig.smoothScroll === true 16 | 17 | return { 18 | alias () { 19 | return { 20 | '@AlgoliaSearchBox': isAlgoliaSearch 21 | ? path.resolve(__dirname, 'components/AlgoliaSearchBox.vue') 22 | : path.resolve(__dirname, 'noopModule.js') 23 | } 24 | }, 25 | 26 | plugins: [ 27 | ['@vuepress/active-header-links', options.activeHeaderLinks], 28 | '@vuepress/search', 29 | '@vuepress/plugin-nprogress', 30 | ['container', { 31 | type: 'tip', 32 | defaultTitle: { 33 | '/': 'TIP', 34 | '/zh/': '提示' 35 | } 36 | }], 37 | ['container', { 38 | type: 'warning', 39 | defaultTitle: { 40 | '/': 'WARNING', 41 | '/zh/': '注意' 42 | } 43 | }], 44 | ['container', { 45 | type: 'danger', 46 | defaultTitle: { 47 | '/': 'WARNING', 48 | '/zh/': '警告' 49 | } 50 | }], 51 | ['container', { 52 | type: 'details', 53 | before: info => `
${info ? `${info}` : ''}\n`, 54 | after: () => '
\n' 55 | }], 56 | ['smooth-scroll', enableSmoothScroll] 57 | ] 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/layouts/404.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 31 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/layouts/Layout.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 152 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/noopModule.js: -------------------------------------------------------------------------------- 1 | export default {} 2 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@vuepress/theme-default", 3 | "version": "1.3.1", 4 | "description": "Default theme for VuePress", 5 | "keywords": [ 6 | "documentation", 7 | "generator", 8 | "vue", 9 | "vuepress" 10 | ], 11 | "homepage": "https://github.com/vuejs/vuepress/packages/@vuepress/theme-default#readme", 12 | "bugs": { 13 | "url": "https://github.com/vuejs/vuepress/issues" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/vuejs/vuepress.git", 18 | "directory": "packages/@vuepress/theme-default" 19 | }, 20 | "license": "MIT", 21 | "author": "Evan You", 22 | "main": "index.js", 23 | "dependencies": { 24 | "@vuepress/plugin-active-header-links": "^1.3.1", 25 | "@vuepress/plugin-nprogress": "^1.3.1", 26 | "@vuepress/plugin-search": "^1.3.1", 27 | "docsearch.js": "^2.5.2", 28 | "lodash": "^4.17.15", 29 | "stylus": "^0.54.5", 30 | "stylus-loader": "^3.0.2", 31 | "vuepress-plugin-container": "^2.0.2", 32 | "vuepress-plugin-smooth-scroll": "^0.0.3" 33 | }, 34 | "publishConfig": { 35 | "access": "public" 36 | }, 37 | "maintainers": [ 38 | { 39 | "name": "ULIVZ", 40 | "email": "chl814@foxmail.com" 41 | } 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/arrow.styl: -------------------------------------------------------------------------------- 1 | @require './config' 2 | 3 | .arrow 4 | display inline-block 5 | width 0 6 | height 0 7 | &.up 8 | border-left 4px solid transparent 9 | border-right 4px solid transparent 10 | border-bottom 6px solid $arrowBgColor 11 | &.down 12 | border-left 4px solid transparent 13 | border-right 4px solid transparent 14 | border-top 6px solid $arrowBgColor 15 | &.right 16 | border-top 4px solid transparent 17 | border-bottom 4px solid transparent 18 | border-left 6px solid $arrowBgColor 19 | &.left 20 | border-top 4px solid transparent 21 | border-bottom 4px solid transparent 22 | border-right 6px solid $arrowBgColor 23 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/code.styl: -------------------------------------------------------------------------------- 1 | {$contentClass} 2 | code 3 | color lighten($textColor, 20%) 4 | padding 0.25rem 0.5rem 5 | margin 0 6 | font-size 0.85em 7 | background-color rgba(27,31,35,0.05) 8 | border-radius 3px 9 | .token 10 | &.deleted 11 | color #EC5975 12 | &.inserted 13 | color $accentColor 14 | 15 | {$contentClass} 16 | pre, pre[class*="language-"] 17 | line-height 1.4 18 | padding 1.25rem 1.5rem 19 | margin 0.85rem 0 20 | background-color $codeBgColor 21 | border-radius 6px 22 | overflow auto 23 | code 24 | color #fff 25 | padding 0 26 | background-color transparent 27 | border-radius 0 28 | 29 | div[class*="language-"] 30 | position relative 31 | background-color $codeBgColor 32 | border-radius 6px 33 | .highlight-lines 34 | user-select none 35 | padding-top 1.3rem 36 | position absolute 37 | top 0 38 | left 0 39 | width 100% 40 | line-height 1.4 41 | .highlighted 42 | background-color rgba(0, 0, 0, 66%) 43 | pre, pre[class*="language-"] 44 | background transparent 45 | position relative 46 | z-index 1 47 | &::before 48 | position absolute 49 | z-index 3 50 | top 0.8em 51 | right 1em 52 | font-size 0.75rem 53 | color rgba(255, 255, 255, 0.4) 54 | &:not(.line-numbers-mode) 55 | .line-numbers-wrapper 56 | display none 57 | &.line-numbers-mode 58 | .highlight-lines .highlighted 59 | position relative 60 | &:before 61 | content ' ' 62 | position absolute 63 | z-index 3 64 | left 0 65 | top 0 66 | display block 67 | width $lineNumbersWrapperWidth 68 | height 100% 69 | background-color rgba(0, 0, 0, 66%) 70 | pre 71 | padding-left $lineNumbersWrapperWidth + 1 rem 72 | vertical-align middle 73 | .line-numbers-wrapper 74 | position absolute 75 | top 0 76 | width $lineNumbersWrapperWidth 77 | text-align center 78 | color rgba(255, 255, 255, 0.3) 79 | padding 1.25rem 0 80 | line-height 1.4 81 | br 82 | user-select none 83 | .line-number 84 | position relative 85 | z-index 4 86 | user-select none 87 | font-size 0.85em 88 | &::after 89 | content '' 90 | position absolute 91 | z-index 2 92 | top 0 93 | left 0 94 | width $lineNumbersWrapperWidth 95 | height 100% 96 | border-radius 6px 0 0 6px 97 | border-right 1px solid rgba(0, 0, 0, 66%) 98 | background-color $codeBgColor 99 | 100 | 101 | for lang in $codeLang 102 | div{'[class~="language-' + lang + '"]'} 103 | &:before 104 | content ('' + lang) 105 | 106 | div[class~="language-javascript"] 107 | &:before 108 | content "js" 109 | 110 | div[class~="language-typescript"] 111 | &:before 112 | content "ts" 113 | 114 | div[class~="language-markup"] 115 | &:before 116 | content "html" 117 | 118 | div[class~="language-markdown"] 119 | &:before 120 | content "md" 121 | 122 | div[class~="language-json"]:before 123 | content "json" 124 | 125 | div[class~="language-ruby"]:before 126 | content "rb" 127 | 128 | div[class~="language-python"]:before 129 | content "py" 130 | 131 | div[class~="language-bash"]:before 132 | content "sh" 133 | 134 | div[class~="language-php"]:before 135 | content "php" 136 | 137 | @import '~prismjs/themes/prism-tomorrow.css' 138 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/config.styl: -------------------------------------------------------------------------------- 1 | $contentClass = '.theme-default-content' 2 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/custom-blocks.styl: -------------------------------------------------------------------------------- 1 | .custom-block 2 | .custom-block-title 3 | font-weight 600 4 | margin-bottom -0.4rem 5 | &.tip, &.warning, &.danger 6 | padding .1rem 1.5rem 7 | border-left-width .5rem 8 | border-left-style solid 9 | margin 1rem 0 10 | &.tip 11 | background-color #f3f5f7 12 | border-color #42b983 13 | &.warning 14 | background-color rgba(255,229,100,.3) 15 | border-color darken(#ffe564, 35%) 16 | color darken(#ffe564, 70%) 17 | .custom-block-title 18 | color darken(#ffe564, 50%) 19 | a 20 | color $textColor 21 | &.danger 22 | background-color #ffe6e6 23 | border-color darken(red, 20%) 24 | color darken(red, 70%) 25 | .custom-block-title 26 | color darken(red, 40%) 27 | a 28 | color $textColor 29 | &.details 30 | display block 31 | position relative 32 | border-radius 2px 33 | margin 1.6em 0 34 | padding 1.6em 35 | background-color #eee 36 | h4 37 | margin-top 0 38 | figure, p 39 | &:last-child 40 | margin-bottom 0 41 | padding-bottom 0 42 | summary 43 | outline none 44 | cursor pointer 45 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/index.styl: -------------------------------------------------------------------------------- 1 | @require './config' 2 | @require './code' 3 | @require './custom-blocks' 4 | @require './arrow' 5 | @require './wrapper' 6 | @require './toc' 7 | 8 | html, body 9 | padding 0 10 | margin 0 11 | background-color #fff 12 | 13 | body 14 | font-family -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif 15 | -webkit-font-smoothing antialiased 16 | -moz-osx-font-smoothing grayscale 17 | font-size 16px 18 | color $textColor 19 | 20 | .page 21 | padding-left $sidebarWidth 22 | 23 | .navbar 24 | position fixed 25 | z-index 20 26 | top 0 27 | left 0 28 | right 0 29 | height $navbarHeight 30 | background-color #fff 31 | box-sizing border-box 32 | border-bottom 1px solid $borderColor 33 | 34 | .sidebar-mask 35 | position fixed 36 | z-index 9 37 | top 0 38 | left 0 39 | width 100vw 40 | height 100vh 41 | display none 42 | 43 | .sidebar 44 | font-size 16px 45 | background-color #fff 46 | width $sidebarWidth 47 | position fixed 48 | z-index 10 49 | margin 0 50 | top $navbarHeight 51 | left 0 52 | bottom 0 53 | box-sizing border-box 54 | border-right 1px solid $borderColor 55 | overflow-y auto 56 | 57 | {$contentClass}:not(.custom) 58 | @extend $wrapper 59 | > *:first-child 60 | margin-top $navbarHeight 61 | 62 | a:hover 63 | text-decoration underline 64 | 65 | p.demo 66 | padding 1rem 1.5rem 67 | border 1px solid #ddd 68 | border-radius 4px 69 | 70 | img 71 | max-width 100% 72 | 73 | {$contentClass}.custom 74 | padding 0 75 | margin 0 76 | 77 | img 78 | max-width 100% 79 | 80 | a 81 | font-weight 500 82 | color $accentColor 83 | text-decoration none 84 | 85 | p a code 86 | font-weight 400 87 | color $accentColor 88 | 89 | kbd 90 | background #eee 91 | border solid 0.15rem #ddd 92 | border-bottom solid 0.25rem #ddd 93 | border-radius 0.15rem 94 | padding 0 0.15em 95 | 96 | blockquote 97 | font-size 1rem 98 | color #999; 99 | border-left .2rem solid #dfe2e5 100 | margin 1rem 0 101 | padding .25rem 0 .25rem 1rem 102 | 103 | & > p 104 | margin 0 105 | 106 | ul, ol 107 | padding-left 1.2em 108 | 109 | strong 110 | font-weight 600 111 | 112 | h1, h2, h3, h4, h5, h6 113 | font-weight 600 114 | line-height 1.25 115 | 116 | {$contentClass}:not(.custom) > & 117 | margin-top (0.5rem - $navbarHeight) 118 | padding-top ($navbarHeight + 1rem) 119 | margin-bottom 0 120 | 121 | &:first-child 122 | margin-top -1.5rem 123 | margin-bottom 1rem 124 | 125 | + p, + pre, + .custom-block 126 | margin-top 2rem 127 | 128 | &:hover .header-anchor 129 | opacity: 1 130 | 131 | h1 132 | font-size 2.2rem 133 | 134 | h2 135 | font-size 1.65rem 136 | padding-bottom .3rem 137 | border-bottom 1px solid $borderColor 138 | 139 | h3 140 | font-size 1.35rem 141 | 142 | a.header-anchor 143 | font-size 0.85em 144 | float left 145 | margin-left -0.87em 146 | padding-right 0.23em 147 | margin-top 0.125em 148 | opacity 0 149 | 150 | &:hover 151 | text-decoration none 152 | 153 | code, kbd, .line-number 154 | font-family source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace 155 | 156 | p, ul, ol 157 | line-height 1.7 158 | 159 | hr 160 | border 0 161 | border-top 1px solid $borderColor 162 | 163 | table 164 | border-collapse collapse 165 | margin 1rem 0 166 | display: block 167 | overflow-x: auto 168 | 169 | tr 170 | border-top 1px solid #dfe2e5 171 | 172 | &:nth-child(2n) 173 | background-color #f6f8fa 174 | 175 | th, td 176 | border 1px solid #dfe2e5 177 | padding .6em 1em 178 | 179 | .theme-container 180 | &.sidebar-open 181 | .sidebar-mask 182 | display: block 183 | 184 | &.no-navbar 185 | {$contentClass}:not(.custom) > h1, h2, h3, h4, h5, h6 186 | margin-top 1.5rem 187 | padding-top 0 188 | 189 | .sidebar 190 | top 0 191 | 192 | 193 | @media (min-width: ($MQMobile + 1px)) 194 | .theme-container.no-sidebar 195 | .sidebar 196 | display none 197 | 198 | .page 199 | padding-left 0 200 | 201 | @require 'mobile.styl' 202 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/mobile.styl: -------------------------------------------------------------------------------- 1 | @require './config' 2 | 3 | $mobileSidebarWidth = $sidebarWidth * 0.82 4 | 5 | // narrow desktop / iPad 6 | @media (max-width: $MQNarrow) 7 | .sidebar 8 | font-size 15px 9 | width $mobileSidebarWidth 10 | .page 11 | padding-left $mobileSidebarWidth 12 | 13 | // wide mobile 14 | @media (max-width: $MQMobile) 15 | .sidebar 16 | top 0 17 | padding-top $navbarHeight 18 | transform translateX(-100%) 19 | transition transform .2s ease 20 | .page 21 | padding-left 0 22 | .theme-container 23 | &.sidebar-open 24 | .sidebar 25 | transform translateX(0) 26 | &.no-navbar 27 | .sidebar 28 | padding-top: 0 29 | 30 | // narrow mobile 31 | @media (max-width: $MQMobileNarrow) 32 | h1 33 | font-size 1.9rem 34 | {$contentClass} 35 | div[class*="language-"] 36 | margin 0.85rem -1.5rem 37 | border-radius 0 38 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/toc.styl: -------------------------------------------------------------------------------- 1 | .table-of-contents 2 | .badge 3 | vertical-align middle 4 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/wrapper.styl: -------------------------------------------------------------------------------- 1 | $wrapper 2 | max-width $contentWidth 3 | margin 0 auto 4 | padding 2rem 2.5rem 5 | @media (max-width: $MQNarrow) 6 | padding 2rem 7 | @media (max-width: $MQMobileNarrow) 8 | padding 1.5rem 9 | 10 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/util/index.js: -------------------------------------------------------------------------------- 1 | export const hashRE = /#.*$/ 2 | export const extRE = /\.(md|html)$/ 3 | export const endingSlashRE = /\/$/ 4 | export const outboundRE = /^[a-z]+:/i 5 | 6 | export function normalize (path) { 7 | return decodeURI(path) 8 | .replace(hashRE, '') 9 | .replace(extRE, '') 10 | } 11 | 12 | export function getHash (path) { 13 | const match = path.match(hashRE) 14 | if (match) { 15 | return match[0] 16 | } 17 | } 18 | 19 | export function isExternal (path) { 20 | return outboundRE.test(path) 21 | } 22 | 23 | export function isMailto (path) { 24 | return /^mailto:/.test(path) 25 | } 26 | 27 | export function isTel (path) { 28 | return /^tel:/.test(path) 29 | } 30 | 31 | export function ensureExt (path) { 32 | if (isExternal(path)) { 33 | return path 34 | } 35 | const hashMatch = path.match(hashRE) 36 | const hash = hashMatch ? hashMatch[0] : '' 37 | const normalized = normalize(path) 38 | 39 | if (endingSlashRE.test(normalized)) { 40 | return path 41 | } 42 | return normalized + '.html' + hash 43 | } 44 | 45 | export function isActive (route, path) { 46 | const routeHash = decodeURIComponent(route.hash) 47 | const linkHash = getHash(path) 48 | if (linkHash && routeHash !== linkHash) { 49 | return false 50 | } 51 | const routePath = normalize(route.path) 52 | const pagePath = normalize(path) 53 | return routePath === pagePath 54 | } 55 | 56 | export function resolvePage (pages, rawPath, base) { 57 | if (isExternal(rawPath)) { 58 | return { 59 | type: 'external', 60 | path: rawPath 61 | } 62 | } 63 | if (base) { 64 | rawPath = resolvePath(rawPath, base) 65 | } 66 | const path = normalize(rawPath) 67 | for (let i = 0; i < pages.length; i++) { 68 | if (normalize(pages[i].regularPath) === path) { 69 | return Object.assign({}, pages[i], { 70 | type: 'page', 71 | path: ensureExt(pages[i].path) 72 | }) 73 | } 74 | } 75 | console.error(`[vuepress] No matching page found for sidebar item "${rawPath}"`) 76 | return {} 77 | } 78 | 79 | function resolvePath (relative, base, append) { 80 | const firstChar = relative.charAt(0) 81 | if (firstChar === '/') { 82 | return relative 83 | } 84 | 85 | if (firstChar === '?' || firstChar === '#') { 86 | return base + relative 87 | } 88 | 89 | const stack = base.split('/') 90 | 91 | // remove trailing segment if: 92 | // - not appending 93 | // - appending to trailing slash (last segment is empty) 94 | if (!append || !stack[stack.length - 1]) { 95 | stack.pop() 96 | } 97 | 98 | // resolve relative path 99 | const segments = relative.replace(/^\//, '').split('/') 100 | for (let i = 0; i < segments.length; i++) { 101 | const segment = segments[i] 102 | if (segment === '..') { 103 | stack.pop() 104 | } else if (segment !== '.') { 105 | stack.push(segment) 106 | } 107 | } 108 | 109 | // ensure leading slash 110 | if (stack[0] !== '') { 111 | stack.unshift('') 112 | } 113 | 114 | return stack.join('/') 115 | } 116 | 117 | /** 118 | * @param { Page } page 119 | * @param { string } regularPath 120 | * @param { SiteData } site 121 | * @param { string } localePath 122 | * @returns { SidebarGroup } 123 | */ 124 | export function resolveSidebarItems (page, regularPath, site, localePath) { 125 | const { pages, themeConfig } = site 126 | 127 | const localeConfig = localePath && themeConfig.locales 128 | ? themeConfig.locales[localePath] || themeConfig 129 | : themeConfig 130 | 131 | const pageSidebarConfig = page.frontmatter.sidebar || localeConfig.sidebar || themeConfig.sidebar 132 | if (pageSidebarConfig === 'auto') { 133 | return resolveHeaders(page) 134 | } 135 | 136 | const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar 137 | if (!sidebarConfig) { 138 | return [] 139 | } else { 140 | const { base, config } = resolveMatchingConfig(regularPath, sidebarConfig) 141 | return config 142 | ? config.map(item => resolveItem(item, pages, base)) 143 | : [] 144 | } 145 | } 146 | 147 | /** 148 | * @param { Page } page 149 | * @returns { SidebarGroup } 150 | */ 151 | function resolveHeaders (page) { 152 | const headers = groupHeaders(page.headers || []) 153 | return [{ 154 | type: 'group', 155 | collapsable: false, 156 | title: page.title, 157 | path: null, 158 | children: headers.map(h => ({ 159 | type: 'auto', 160 | title: h.title, 161 | basePath: page.path, 162 | path: page.path + '#' + h.slug, 163 | children: h.children || [] 164 | })) 165 | }] 166 | } 167 | 168 | export function groupHeaders (headers) { 169 | // group h3s under h2 170 | headers = headers.map(h => Object.assign({}, h)) 171 | let lastH2 172 | headers.forEach(h => { 173 | if (h.level === 2) { 174 | lastH2 = h 175 | } else if (lastH2) { 176 | (lastH2.children || (lastH2.children = [])).push(h) 177 | } 178 | }) 179 | return headers.filter(h => h.level === 2) 180 | } 181 | 182 | export function resolveNavLinkItem (linkItem) { 183 | return Object.assign(linkItem, { 184 | type: linkItem.items && linkItem.items.length ? 'links' : 'link' 185 | }) 186 | } 187 | 188 | /** 189 | * @param { Route } route 190 | * @param { Array | Array | [link: string]: SidebarConfig } config 191 | * @returns { base: string, config: SidebarConfig } 192 | */ 193 | export function resolveMatchingConfig (regularPath, config) { 194 | if (Array.isArray(config)) { 195 | return { 196 | base: '/', 197 | config: config 198 | } 199 | } 200 | for (const base in config) { 201 | if (ensureEndingSlash(regularPath).indexOf(encodeURI(base)) === 0) { 202 | return { 203 | base, 204 | config: config[base] 205 | } 206 | } 207 | } 208 | return {} 209 | } 210 | 211 | function ensureEndingSlash (path) { 212 | return /(\.html|\/)$/.test(path) 213 | ? path 214 | : path + '/' 215 | } 216 | 217 | function resolveItem (item, pages, base, groupDepth = 1) { 218 | if (typeof item === 'string') { 219 | return resolvePage(pages, item, base) 220 | } else if (Array.isArray(item)) { 221 | return Object.assign(resolvePage(pages, item[0], base), { 222 | title: item[1] 223 | }) 224 | } else { 225 | if (groupDepth > 3) { 226 | console.error( 227 | '[vuepress] detected a too deep nested sidebar group.' 228 | ) 229 | } 230 | const children = item.children || [] 231 | if (children.length === 0 && item.path) { 232 | return Object.assign(resolvePage(pages, item.path, base), { 233 | title: item.title 234 | }) 235 | } 236 | return { 237 | type: 'group', 238 | path: item.path, 239 | title: item.title, 240 | sidebarDepth: item.sidebarDepth, 241 | children: children.map(child => resolveItem(child, pages, base, groupDepth + 1)), 242 | collapsable: item.collapsable !== false 243 | } 244 | } 245 | } 246 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home:true 3 | --- 4 | -------------------------------------------------------------------------------- /docs/about/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: AboutMe 3 | comments: true 4 | --- 5 | 6 | ## 个人信息 7 | 8 | 9 | - Nickname:Finen(菜鸟) 10 | - 邮箱:[hefengen@hotmail.com](mailto:hefengen@hotmail.com) 11 | - 技术博客:[https://www.finen.top/](https://www.finen.top/) 12 | - Github:[https://github.com/hirCodd](https://github.com/hirCodd) 13 | - CSDN:[CSDN](https://blog.csdn.net/HookJony) 14 | - 思否:[思否](https://segmentfault.com/u/hircodd/articles) 15 | 16 | ## 联系方式 17 | 18 | - 手机:18487232698 19 | - Email:hefengen@hotmail.com 20 | 21 | ## 开发技能 22 | 23 | * C语言 24 | * 学的很扎实,但是实际开发并没有太多用,C目前做嵌入式、系统底层设计开发很好,但是并没有考虑过继续学下去。当时把C Prime Plus那本书的代码全部敲完(包括习题),把谭浩强的C语言的书的代码错误全部改完。 25 | * 个人认为C乃至后面的所有语言,如果能够熟练分析内存,就能掌握程序运行时的规则,这对学习一门语言是极其重要的。 26 | * Java(断层了一整年,没有继续写,不过当时学的时候,用Java语言程序设计(上下册的代码全部敲完,把习题也搞完)) 27 | * 开发框架:SpringBoot、MyBatis、SpringMVC、Spring。 28 | * Java中最重要的也是分析内存,Jvm如何处理内存中的垃圾,gc机制,以及jvm的优化问题等等。 29 | * Python 30 | * web开发框架:Django,Flask 31 | * Flask项目:[书籍分享小程序后端](https://github.com/hirCodd/BookSharingBackend) 32 | * Django项目:[OJ二次开发](https://github.com/hirCodd/OnlineJudge) 33 | * 爬虫框架:Scrapy、PySpider 34 | * Scrapy:[爬虫及自动化加题程序](https://github.com/hirCodd/AutoAddProblem) 35 | * 其他爬虫:[other](https://github.com/hirCodd/PythonSpider) 36 | 37 | * PHP 38 | * web开发框架:Laravel、ThinkPHP 39 | 40 | * Web前端开发 41 | 42 | * 桌面端 43 | 44 | * 前端框架 45 | * vue.js(个人认为掌握vue.js的生命周期是最重要的一点!) 46 | * vue.js的ui框架:iview、vant、element(基本都是用过) 47 | 48 | * 移动端 49 | 50 | * 前端框架 51 | * mpvue(更改vue.js的runtime-core而改写的) 52 | * mpvue的ui框架:iview-weapp、vant-weapp 53 | 54 | * 移动端微信小程序项目: 55 | 56 | [微信小程序-书籍分享](https://github.com/hirCodd/BookSharing) 57 | 58 | 59 | ## 我的网站简历 60 | [简历](https://hircodd.github.io/animating-resume/public/) 61 | 62 | -------------------------------------------------------------------------------- /docs/archives/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/blog/Java/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Java百度翻译API 3 | copyright: true 4 | date: 2018-03-28 22:57:32 5 | comments: true 6 | post: true 7 | categories: 8 | - Java 9 | tags: 10 | - Java API 11 | --- 12 | 13 | ## 百度翻译工具包的下载 14 | 15 | > **以下是提供两个百度翻译翻译的工具包下载地址:** 16 | 17 | > 1.百度翻译开发者平台: 18 | 19 | [百度开发者平台](http://appcdn.fanyi.baidu.com/api/demo/java.zip) 20 | 21 | > 2.csdn的百度翻译工具包: 22 | 23 | 24 | [百度翻译工具包](http://download.csdn.net/download/hookjony/9957737) 25 | 26 | 27 | > 备注:经过本人测试,百度翻译官网下载下来的可能有问题——MD5 类有错误,所以大家可以到本人上传的第2个资源链接中下载需要使用的工具类。因为CSDN不在具有免费的资源下载,所以大家还是需要给我贡献小小的1积分,再此谢谢大家。 28 | 29 | ---------- 30 | 31 | ## 百度翻译API——新建项目以及各个包文件的导入 32 | ### gson 包的下载 33 | 34 | > gson 包的下载: 35 | 36 | [gson下载](https://download.csdn.net/download/hookjony/9957777) 37 | 38 | ## 新建项目并且导入百度翻译工具包 39 | 40 | ![新建java项目](https://finen-1251602255.cos.ap-shanghai.myqcloud.com/images/images/20170830200128921.png) 41 | 42 | > 新建完成之后可以直接下载下来的百度翻译工具包下的com文件夹导入到项目中(或者将com文件夹拖入到src目录下),本文导入项目再次不在一一赘述,因为更加方便打方式是可以拖入。 43 | 44 | 45 | ---------- 46 | 47 | 48 | ### 导入gson包以及json包 49 | > 在项目下新建文件夹libs,并且将gson包以及json包导入libs目录下,如果需要看源码,请导入各自的源码即可。(笔者建议大家导入源码,方便大家学习) 50 | 51 | >导入后的目录结构如下 52 | ![项目目录结构](https://finen-1251602255.cos.ap-shanghai.myqcloud.com/images/images/20170831112115079.png) 53 | 54 | 55 | ---------- 56 | 57 | 58 | ### 编写Main函数 59 | ```java 60 | package com.baidu.translate.test; 61 | 62 | import java.util.Scanner; 63 | import com.baidu.translate.demo.TransApi; 64 | import com.google.gson.Gson; 65 | 66 | public class Main { 67 | 68 | private static final String APP_ID = ""; // your ID 69 | private static final String SECURITY_KEY = ""; //your key 70 | 71 | public static void main(String[] args) { 72 | // TODO Auto-generated method stub 73 | TransApi api = new TransApi(APP_ID, SECURITY_KEY); 74 | 75 | String query = ""; 76 | 77 | //通过Scanner工具类完成用户输入 78 | System.out.println("请输入需要翻译的语句(all->English):"); 79 | Scanner scanner = new Scanner(System.in); 80 | query = scanner.nextLine(); 81 | 82 | //通过api将语句转化为json 数据 83 | String json = api.getTransResult(query, "auto", "en"); 84 | 85 | //通过gson解析 86 | Gson gson = new Gson(); 87 | TranslateData data = gson.fromJson(json,TranslateData.class); 88 | String dst = data.getTrans_result().get(0).getDst(); 89 | 90 | System.out.println(dst); 91 | } 92 | } 93 | ``` 94 | > **上述函数的APP_ID 以及SECURITY_KEY 需要到百度开发者平台申请** 95 | 96 | > **百度翻译开发者平台:http://api.fanyi.baidu.com/api/trans/product/index** 97 | 98 | 99 | ---------- 100 | 101 | 102 | ## 解析Json数据的类 103 | ### TranslateData 类 104 | ```java 105 | package com.baidu.translate.test; 106 | 107 | import java.util.List; 108 | 109 | public class TranslateData { 110 | String from; 111 | String to; 112 | List trans_result; 113 | 114 | public String getFrom() { 115 | return from; 116 | } 117 | public void setFrom(String from) { 118 | this.from = from; 119 | } 120 | public String getTo() { 121 | return to; 122 | } 123 | public void setTo(String to) { 124 | this.to = to; 125 | } 126 | public List getTrans_result() { 127 | return trans_result; 128 | } 129 | public void setTrans_result(List trans_result) { 130 | this.trans_result = trans_result; 131 | } 132 | 133 | @Override 134 | public String toString() { 135 | return "TranslateData [from=" + from + ", to=" + to + ", trans_result=" + trans_result + "]"; 136 | } 137 | 138 | } 139 | 140 | ``` 141 | ### TranslateResult类 142 | 143 | ```java 144 | package com.baidu.translate.test; 145 | 146 | public class TranslateResult { 147 | String src; 148 | String dst; 149 | 150 | public String getSrc() { 151 | return src; 152 | } 153 | public void setSrc(String src) { 154 | this.src = src; 155 | } 156 | public String getDst() { 157 | return dst; 158 | } 159 | public void setDst(String dst) { 160 | this.dst = dst; 161 | } 162 | @Override 163 | public String toString() { 164 | return "TransalateResult [src=" + src + ", dst=" + dst + "]"; 165 | } 166 | } 167 | 168 | ``` 169 | -------------------------------------------------------------------------------- /docs/friends/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 友链 3 | date: 2018-04-27 21:13:11 4 | comments: true 5 | --- 6 | 7 | |✌️✌️名称|👍👍链接|简介:tada: :100:| 8 | | --------| :----- | :----: | 9 | |赵俊|[赵俊的博客](http://www.zhaojun.im/)|一个 Java 学习者的博客| 10 | |R'Blog|[R'Blog](http://bolg.rvich.com/)|分享资源| 11 | |Yorushika Shi|[Yorushika Shi](https://sh.yorushika.live/)|杂谈与技术| 12 | |董沅鑫|[董沅鑫的个人网站](https://godbmw.com/)|有干货 有态度 亦有你| 13 | |随遇而安|[随遇而安](https://www.iszy.cc/)|技术分享&生活吐槽| 14 | |GongJS|[GongJS](https://gongjs.github.io/)|Talk is cheap,show me the code.| 15 | |嘉美伯爵|[嘉美伯爵](https://blog.gaozhe.top)|Like author,like book.| 16 | |隔壁老王的随笔|[隔壁老王的随笔](https://dojay.cn/)|一个喜欢撸猫的前端码农的YY天地| 17 | |谭升的博客|[谭升的博客](https://face2ai.com)|人工智能算法,数学基础类原创博客| 18 | |冰水鉴心的博客|[冰水鉴心的博客](https://xq773939719.github.io/)|.软工渣.编程痴.开发宅.系统迷.强迫症| 19 | |Mulander|[Mulander](https://mulander-j.github.io/Wiki1001Pro/)|Meet 1000 Books & Unit Them Into 1 Wiki| 20 | |LmCjl在线工具|[LmCjl在线工具](https://www.lmcjl.com)|| 21 | |YuYe|[YuYe](https://chenyeah.com/)|专注于前端技术| 22 | |笨小孩杂谈|[笨小孩杂谈](https://rocky-191.github.io/)|专注前端技术| 23 | 24 | ::: tip 25 | 26 | 欢迎留言提交互加友链!最好提供你网站的简介哟
27 | 如果您需要更改您的链接或者链接有错误,请联系我: [hefengen@hotmail.com](mailto:hefengen@hotmail.com) 28 | ::: 29 | 30 | ::: tip 我的个人链接 31 | 昵称:Finen
32 | 链接:https://www.finen.top/
33 | 头像链接:https://finen-1251602255.cos.ap-shanghai.myqcloud.com/file/pic/finen.png
34 | 介绍:Stay Hungry! Stay Foolish! 35 | ::: -------------------------------------------------------------------------------- /docs/project/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: project 3 | --- 4 | 5 | ## project 6 | 1. [QDUOJ自动化加题程序](https://github.com/hirCodd/AutoAddProblem) 7 | -------------------------------------------------------------------------------- /docs/project/qduoj-add-problem.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: qduoj自动化加题程序 3 | comments: true 4 | tags: 5 | - qduoj 6 | - python 7 | --- 8 | 9 | ## 缘由 10 | QDUOJ的开发以及众多OJ的题库,使得我们自动化添加题目更加轻松。前提是您需要获得各OJ的测试数据。请注意本方法只用在您的机器上运行即可,不用再OJ服务器运行! 11 | 12 | ## 概况 13 | 目前主要模块分为 14 | 15 | 爬虫部分-WebSpider 16 | * 自动化加题部分-AddProblem 17 | * 用了爬虫scrapy,并且爬虫获取到的数据相对而言文档更容易解析与添加。如果您能够通过pandoc转文件后,将文本提取出来也可以。 -------------------------------------------------------------------------------- /docs/share/book/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Books Sharing 3 | comments: true 4 | --- 5 | 6 | |ID|书名|链接|分类|说明| 7 | |:----|:----|:----|----|----| 8 | |1|Pro Git|[Pro Git](https://pan.baidu.com/s/1rKpbjEWE6weOOV0INiqVsg)|git|Pro Git是一本讲授git操作的书籍,通过此书基本能够掌握git基本操作。| -------------------------------------------------------------------------------- /docs/share/software/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Software Sharing 3 | date: 2018-8-20 22:00:00 4 | comments: true 5 | --- 6 | 7 | |ID|名称|链接|说明| 8 | |:----|:----:|:----|----| 9 | |1|MobaXterm|[MobaXterm](https://mobaxterm.mobatek.net/download.html)|MobaXterm是一款非常好用的ssh工具| 10 | |2|Vnote|[Vnote](https://github.com/tamlok/vnote)|Vnote是一款很好用的Markdown文档编辑器,可使用于做md笔记| 11 | |3|Robo 3T|[Robo 3T](https://robomongo.org/)|Robo是一款异常好用且免费的MongoDB桌面可视化管理工具| 12 | 13 | :::tip 14 | 如果您有好用的软件欢迎留言分享! 15 | ::: -------------------------------------------------------------------------------- /docs/share/software/index2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: vue 3 | comments: true 4 | --- 5 | ## Vuepress网站 6 | [vuepress](https://vuepress.vuejs.org/zh/) 7 | 8 | ## 开始搭建vuepress-blog 9 | 10 | ```sh 11 | # 安装 12 | yarn global add vuepress # 或者:npm install -g vuepress 13 | 14 | # 新建一个 markdown 文件 15 | echo '# Hello VuePress!' > README.md 16 | 17 | # 开始写作 18 | vuepress dev . 19 | 20 | # 构建静态文件 21 | vuepress build . 22 | ``` 23 | 接着,在 `package.json` 里加一些脚本: 24 | 25 | ```json 26 | { 27 | "scripts": { 28 | "docs:dev": "vuepress dev docs", 29 | "docs:build": "vuepress build docs" 30 | } 31 | } 32 | ``` 33 | 34 | yarn docs:dev # 或者:npm run docs:dev 35 | 36 | 37 | 当然这对于大多数人来说都是很简单的问题,自vuepress公开以后,有太多筒子想要vuepress添加评论系统,可是目测大佬们并没有这个想法,不过对于vue.js生态环境而言,给我们很多自己动手的可能。下面请食用我的开发方法。 38 | ## 选择一个第三方评论系统 39 | 1. gitment 40 | 2. 来必立 41 | 3. Valine 42 | 前两者都是有厚实的长城,所以我建议各位就别想了,虽然有搭建过的blog。如果有想了解的请看[VuePress 集成第三方评论模块](https://hughfenghen.github.io/fe/vuepress-gitment.html)。 43 | 44 | 我选择了Valine,请大家看。 45 | ![comment.png][1] 46 | 47 | > 看到上面是不是觉得挺好看...接下来开发 48 | ## Valine食用方法 49 | [Valine.js食用方法](https://valine.js.org/) 50 | 51 | ## 开发代码 52 | > 在Page.vue中写入以下代码: 53 | 54 | ```js 55 | mounted: function(){ 56 | // require window 57 | const Valine = require('valine'); 58 | if (typeof window !== 'undefined') { 59 | this.window = window 60 | window.AV = require('leancloud-storage') 61 | } 62 | 63 | new Valine({ 64 | el: '#vcomments' , 65 | appId: '',// your appId 66 | appKey: '', // your appKey 67 | notify:false, 68 | verify:false, 69 | avatar:'mm', 70 | placeholder: 'just go go' 71 | }); 72 | }, 73 | ``` 74 | > 加入以上代码即可完成真个评论系统,然后 `yarn dev`即可看到效果! 75 | 76 | ## 我的开源项目地址 77 | [vuepress-blog](https://github.com/hirCodd/vuepress-blog) 欢迎star!mmm 78 | 79 | [我的blog](https://www.finen.tech/) 80 | 81 | [1]: https://finen-1251602255.cos.ap-shanghai.myqcloud.com/images/images/comment.png -------------------------------------------------------------------------------- /docs/tags/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | ## Tags Cloud 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "docs:dev": "vuepress dev docs", 4 | "docs:build": "vuepress build docs" 5 | }, 6 | "dependencies": { 7 | "vuepress": "^2.0.0-beta.32" 8 | }, 9 | "devDependencies": { 10 | "@vuepress/plugin-back-to-top": "^2.0.0-beta.32", 11 | "@vuepress/plugin-container": "^2.0.0-beta.32", 12 | "@vuepress/plugin-git": "^2.0.0-beta.32", 13 | "@vuepress/plugin-google-analytics": "^2.0.0-beta.32", 14 | "@vuepress/plugin-medium-zoom": "^2.0.0-beta.32", 15 | "@vuepress/plugin-nprogress": "^2.0.0-beta.32", 16 | "@vuepress/plugin-pwa": "^2.0.0-beta.32", 17 | "@vuepress/plugin-pwa-popup": "^2.0.0-beta.32", 18 | "@vuepress/plugin-search": "^2.0.0-beta.32", 19 | "@vuepress/plugin-toc": "^2.0.0-beta.32", 20 | "typescript": "^4.5.2", 21 | "vuepress-plugin-valine-comment": "file:E:\\MyBlog\\vuepress-blog\\packages\\vuepress-plugin-valine-comment" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/client/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/packages/vuepress-plugin-valine-comment/lib/client/index.d.ts -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/client/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/node/index..d.ts: -------------------------------------------------------------------------------- 1 | import { valineCommentPlugin } from './valineComment'; 2 | export * from "./valineComment"; 3 | export default valineCommentPlugin; 4 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/node/index..js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 5 | }) : (function(o, m, k, k2) { 6 | if (k2 === undefined) k2 = k; 7 | o[k2] = m[k]; 8 | })); 9 | var __exportStar = (this && this.__exportStar) || function(m, exports) { 10 | for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 11 | }; 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | const valineComment_1 = require("./valineComment"); 14 | __exportStar(require("./valineComment"), exports); 15 | exports.default = valineComment_1.valineCommentPlugin; 16 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/node/valineComment.d.ts: -------------------------------------------------------------------------------- 1 | import type { ValineOptions } from "../shared"; 2 | import type { Plugin } from "@vuepress/core"; 3 | export * from '../shared'; 4 | export declare const valineCommentPlugin: Plugin; 5 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/node/valineComment.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 5 | }) : (function(o, m, k, k2) { 6 | if (k2 === undefined) k2 = k; 7 | o[k2] = m[k]; 8 | })); 9 | var __exportStar = (this && this.__exportStar) || function(m, exports) { 10 | for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 11 | }; 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | exports.valineCommentPlugin = void 0; 14 | __exportStar(require("../shared"), exports); 15 | console.log("load---"); 16 | const valineCommentPlugin = (options, app) => ({ 17 | name: "vuepress-plugin-valine-comment" 18 | // const valeneOptions: ValineOptions = (options as ValineOptions) 19 | // 20 | // const config: PluginObject = { 21 | // name: "vuepress-plugin-valine-comment" 22 | // }; 23 | // 24 | // return config; 25 | }); 26 | exports.valineCommentPlugin = valineCommentPlugin; 27 | // import { addViteOptimizeDeps, getLocales } from "@mr-hope/vuepress-shared"; 28 | // import { path } from "@vuepress/utils"; 29 | // import { useReadingTimePlugin } from "vuepress-plugin-reading-time2"; 30 | // import { usePalettePlugin } from "vuepress-plugin-sass-palette"; 31 | // import { pageInfoI18n, walineI18n } from "./i18n"; 32 | // 33 | // import type { CommentOptions } from "../shared"; 34 | // import type { Plugin, PluginObject } from "@vuepress/core"; 35 | // 36 | // export * from "../shared"; 37 | // 38 | // const commentPlugin: Plugin = (options, app) => { 39 | // const { themeConfig } = app.options; 40 | // // @ts-ignore 41 | // const commentOptions: CommentOptions = 42 | // Object.keys(options).length > 0 43 | // ? (options as CommentOptions) 44 | // : (themeConfig.comment as CommentOptions) || { type: "disable" }; 45 | // 46 | // addViteOptimizeDeps(app, "@waline/client"); 47 | // 48 | // useReadingTimePlugin(app, { wordPerminute: options.wordPerminute }); 49 | // usePalettePlugin(app, { id: "hope" }); 50 | // 51 | // const config: PluginObject = { 52 | // name: "vuepress-plugin-comment2", 53 | // 54 | // alias: { 55 | // "@Waline": 56 | // commentOptions.type === "waline" 57 | // ? path.resolve(__dirname, "../client/components/Waline.js") 58 | // : "@mr-hope/vuepress-shared/client/noopModule.js", 59 | // }, 60 | // 61 | // define: () => ({ 62 | // COMMENT_OPTIONS: { 63 | // hint: !themeConfig.pure, 64 | // ...commentOptions, 65 | // }, 66 | // PAGE_INFO_I18N: getLocales(app, pageInfoI18n, options.pageInfoLocale), 67 | // WALINE_I18N: getLocales(app, walineI18n, options.walineLocale), 68 | // }), 69 | // 70 | // clientAppEnhanceFiles: path.resolve(__dirname, "../client/appEnhance.js"), 71 | // }; 72 | // 73 | // // if (commentOptions.type === "vssue") 74 | // // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 75 | // // config.plugins!.push(["@vssue/vuepress-plugin-vssue", commentOptions]); 76 | // 77 | // return config; 78 | // }; 79 | // 80 | // export default commentPlugin; 81 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/shared/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './valineOptions'; 2 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/shared/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 5 | }) : (function(o, m, k, k2) { 6 | if (k2 === undefined) k2 = k; 7 | o[k2] = m[k]; 8 | })); 9 | var __exportStar = (this && this.__exportStar) || function(m, exports) { 10 | for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 11 | }; 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | __exportStar(require("./valineOptions"), exports); 14 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/shared/valineOptions.d.ts: -------------------------------------------------------------------------------- 1 | export interface ValineOptions { 2 | /** 3 | * leancloud appId 4 | */ 5 | appId: string; 6 | /** 7 | * leanCloud appKey 8 | */ 9 | appKey: string; 10 | /** 11 | * 评论框占位提示符 12 | */ 13 | placeholder: string; 14 | /** 15 | * 类型:String 16 | * 默认值:window.location.pathname 17 | * 必要性:false 18 | */ 19 | path: string; 20 | /** 21 | * 类型:String 22 | * 默认值:mp 23 | * 必要性:false 24 | */ 25 | avatar: string; 26 | /** 27 | * 类型:Number 28 | * 默认值:10 29 | * 必要性:false 30 | */ 31 | pageSize: number; 32 | /** 33 | * 文章访问量统计。 34 | * 类型:Boolean 35 | * 默认值:false 36 | * 必要性:false 37 | */ 38 | visitor: boolean; 39 | /** 40 | * 类型:Boolean 41 | * 默认值: true 42 | * 必要性: false 43 | */ 44 | highlight: boolean; 45 | /** 46 | * 类型: Boolean 47 | * 默认值: false 48 | * 必要性: false 49 | */ 50 | avatarForce: boolean; 51 | /** 52 | * 类型: Boolean 53 | * 默认值: false 54 | * 必要性: false 55 | */ 56 | recordIP: boolean; 57 | /** 58 | * 类型: String 59 | * 默认值: http[s]://[tab/us].avoscloud.com 60 | * 必要性: false 61 | */ 62 | serverURLs: string; 63 | /** 64 | * 类型: String 65 | * 默认值: 66 | * 必要性: false 67 | */ 68 | emojiCDN: string; 69 | /** 70 | * 类型: Object 71 | * 默认值: null 72 | * 必要性: false 73 | */ 74 | emojiMaps: object; 75 | /** 76 | * 类型: Boolean 77 | * 默认值: false 78 | * 必要性: false 79 | */ 80 | enableQQ: boolean; 81 | } 82 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/lib/shared/valineOptions.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuepress-plugin-valine-comment", 3 | "version": "1.0.0", 4 | "main": "lib/node/index.js", 5 | "types": "lib/node/index.d.ts", 6 | "license": "MIT", 7 | "files": [ 8 | "lib" 9 | ], 10 | "scripts": { 11 | "build": "tsc -b tsconfig.build.json", 12 | "clean": "rimraf lib *.tsbuildinfo", 13 | "copy": "cpx \"src/**/*.{css,svg}\" lib" 14 | }, 15 | "dependencies": { 16 | "@vuepress/core": "2.0.0-beta.32", 17 | "@vuepress/utils": "2.0.0-beta.32", 18 | "ts-debounce": "^4.0.0", 19 | "vue": "^3.2.24" 20 | }, 21 | "devDependencies": { 22 | "valine": "^1.4.16" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/src/client/component/Comment.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 23 | 24 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/src/client/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moremind/vuepress-blog/f113f75b59c0cb0797cb679eba76182bf86985b4/packages/vuepress-plugin-valine-comment/src/client/index.ts -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/src/node/index..ts: -------------------------------------------------------------------------------- 1 | import { valineCommentPlugin } from './valineComment' 2 | 3 | export * from "./valineComment" 4 | 5 | export default valineCommentPlugin -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/src/node/valineComment.ts: -------------------------------------------------------------------------------- 1 | import { logger, path } from '@vuepress/utils'; 2 | 3 | import type { ValineOptions } from "../shared"; 4 | 5 | import type { Plugin, PluginObject } from "@vuepress/core"; 6 | 7 | 8 | export * from '../shared'; 9 | console.log("load---") 10 | export const valineCommentPlugin: Plugin = (options, app) => ({ 11 | 12 | name: "vuepress-plugin-valine-comment" 13 | 14 | // const valeneOptions: ValineOptions = (options as ValineOptions) 15 | // 16 | // const config: PluginObject = { 17 | // name: "vuepress-plugin-valine-comment" 18 | // }; 19 | // 20 | // return config; 21 | 22 | }); 23 | 24 | 25 | 26 | 27 | 28 | // import { addViteOptimizeDeps, getLocales } from "@mr-hope/vuepress-shared"; 29 | // import { path } from "@vuepress/utils"; 30 | // import { useReadingTimePlugin } from "vuepress-plugin-reading-time2"; 31 | // import { usePalettePlugin } from "vuepress-plugin-sass-palette"; 32 | // import { pageInfoI18n, walineI18n } from "./i18n"; 33 | // 34 | // import type { CommentOptions } from "../shared"; 35 | // import type { Plugin, PluginObject } from "@vuepress/core"; 36 | // 37 | // export * from "../shared"; 38 | // 39 | // const commentPlugin: Plugin = (options, app) => { 40 | // const { themeConfig } = app.options; 41 | // // @ts-ignore 42 | // const commentOptions: CommentOptions = 43 | // Object.keys(options).length > 0 44 | // ? (options as CommentOptions) 45 | // : (themeConfig.comment as CommentOptions) || { type: "disable" }; 46 | // 47 | // addViteOptimizeDeps(app, "@waline/client"); 48 | // 49 | // useReadingTimePlugin(app, { wordPerminute: options.wordPerminute }); 50 | // usePalettePlugin(app, { id: "hope" }); 51 | // 52 | // const config: PluginObject = { 53 | // name: "vuepress-plugin-comment2", 54 | // 55 | // alias: { 56 | // "@Waline": 57 | // commentOptions.type === "waline" 58 | // ? path.resolve(__dirname, "../client/components/Waline.js") 59 | // : "@mr-hope/vuepress-shared/client/noopModule.js", 60 | // }, 61 | // 62 | // define: () => ({ 63 | // COMMENT_OPTIONS: { 64 | // hint: !themeConfig.pure, 65 | // ...commentOptions, 66 | // }, 67 | // PAGE_INFO_I18N: getLocales(app, pageInfoI18n, options.pageInfoLocale), 68 | // WALINE_I18N: getLocales(app, walineI18n, options.walineLocale), 69 | // }), 70 | // 71 | // clientAppEnhanceFiles: path.resolve(__dirname, "../client/appEnhance.js"), 72 | // }; 73 | // 74 | // // if (commentOptions.type === "vssue") 75 | // // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 76 | // // config.plugins!.push(["@vssue/vuepress-plugin-vssue", commentOptions]); 77 | // 78 | // return config; 79 | // }; 80 | // 81 | // export default commentPlugin; 82 | 83 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/src/shared/index.ts: -------------------------------------------------------------------------------- 1 | export * from './valineOptions' -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/src/shared/valineOptions.ts: -------------------------------------------------------------------------------- 1 | export interface ValineOptions { 2 | 3 | /** 4 | * leancloud appId 5 | */ 6 | appId: string; 7 | 8 | /** 9 | * leanCloud appKey 10 | */ 11 | appKey: string; 12 | 13 | /** 14 | * 评论框占位提示符 15 | */ 16 | placeholder: string; 17 | 18 | /** 19 | * 类型:String 20 | * 默认值:window.location.pathname 21 | * 必要性:false 22 | */ 23 | path: string; 24 | 25 | /** 26 | * 类型:String 27 | * 默认值:mp 28 | * 必要性:false 29 | */ 30 | avatar: string; 31 | 32 | /** 33 | * 类型:Number 34 | * 默认值:10 35 | * 必要性:false 36 | */ 37 | pageSize: number; 38 | 39 | /** 40 | * 文章访问量统计。 41 | * 类型:Boolean 42 | * 默认值:false 43 | * 必要性:false 44 | */ 45 | visitor: boolean; 46 | 47 | /** 48 | * 类型:Boolean 49 | * 默认值: true 50 | * 必要性: false 51 | */ 52 | highlight: boolean; 53 | 54 | /** 55 | * 类型: Boolean 56 | * 默认值: false 57 | * 必要性: false 58 | */ 59 | avatarForce: boolean; 60 | 61 | /** 62 | * 类型: Boolean 63 | * 默认值: false 64 | * 必要性: false 65 | */ 66 | recordIP: boolean; 67 | 68 | /** 69 | * 类型: String 70 | * 默认值: http[s]://[tab/us].avoscloud.com 71 | * 必要性: false 72 | */ 73 | serverURLs: string; 74 | 75 | /** 76 | * 类型: String 77 | * 默认值: 78 | * 必要性: false 79 | */ 80 | emojiCDN: string; 81 | 82 | /** 83 | * 类型: Object 84 | * 默认值: null 85 | * 必要性: false 86 | */ 87 | emojiMaps: object; 88 | 89 | /** 90 | * 类型: Boolean 91 | * 默认值: false 92 | * 必要性: false 93 | */ 94 | enableQQ: boolean; 95 | 96 | 97 | 98 | 99 | } -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "references": [ 4 | // { "path": "./core/tsconfig.build.json" }, 5 | // { "path": "../utils/tsconfig.build.json" }, 6 | { "path": "./tsconfig.esm.json" }, 7 | { "path": "./tsconfig.cjs.json" } 8 | ], 9 | "files": [] 10 | } 11 | 12 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "CommonJS", 5 | "rootDir": "./src", 6 | "outDir": "./lib" 7 | }, 8 | "include": ["src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/vuepress-plugin-valine-comment/tsconfig.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "ES2020", 5 | "rootDir": "./src", 6 | "outDir": "./lib" 7 | }, 8 | "include": ["src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/vuepress-theme-tassel/lib/global/Comments.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 22 | 23 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /packages/vuepress-theme-tassel/lib/global/HomeLayout.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 68 | 69 | 210 | 215 | -------------------------------------------------------------------------------- /packages/vuepress-theme-tassel/lib/layouts/Layout.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 21 | 22 | -------------------------------------------------------------------------------- /packages/vuepress-theme-tassel/lib/node/index.js: -------------------------------------------------------------------------------- 1 | const { path } = require('@vuepress/utils') 2 | 3 | module.exports = { 4 | // 你的主题 5 | name: 'vuepress-theme-tassel', 6 | // 要继承的父主题 7 | extends: '@vuepress/theme-default', 8 | // 覆盖父主题的布局 9 | layouts: { 10 | Layout: path.resolve(__dirname, '../layouts/Layout.vue'), 11 | }, 12 | } -------------------------------------------------------------------------------- /packages/vuepress-theme-tassel/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuepress-theme-tassel", 3 | "version": "1.0.0", 4 | "main": "lib/node/index.js", 5 | "license": "MIT", 6 | "files": [ 7 | "lib" 8 | ], 9 | "devDependencies": { 10 | "valine": "^1.4.16" 11 | }, 12 | "dependencies": { 13 | "vuepress-plugin-valine-comment": "1.0.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2019.3.9 2 | chardet==3.0.4 3 | cos-python-sdk-v5==1.6.6 4 | coscmd==1.8.5.32 5 | DateTime==4.3 6 | dicttoxml==1.7.4 7 | idna==2.8 8 | prettytable==0.7.2 9 | pytz==2018.9 10 | PyYAML==5.4 11 | requests==2.21.0 12 | six==1.12.0 13 | tqdm==4.31.1 14 | urllib3==1.26.5 15 | zope.interface==4.6.0 16 | -------------------------------------------------------------------------------- /scripts/deploy-cos.sh: -------------------------------------------------------------------------------- 1 | # 部署到腾讯云cos 2 | coscmd upload -r /blog/vuepress/ / -------------------------------------------------------------------------------- /scripts/deploy-gh.sh: -------------------------------------------------------------------------------- 1 | # cd vuepress 2 | # git init 3 | # git add -A 4 | # git commit -m 'deploy' 5 | # git push -f git@github.com:docschina/vuepress.git master:gh-pages 6 | 7 | 8 | # 确保脚本抛出遇到的错误 9 | # set -e 10 | 11 | # # 生成静态文件 12 | # npm run docs:build 13 | 14 | # 进入生成的文件夹 15 | cd .. 16 | cd vuepress 17 | 18 | # 如果是发布到自定义域名 19 | # echo 'www.finen.top' > CNAME 20 | # 初始化git仓库 21 | git init 22 | git add -A 23 | git commit -m 'update' 24 | 25 | # 如果发布到 https://.github.io 26 | # git push -f git@github.com:/.github.io.git master 27 | 28 | # 如果发布到 https://.github.io/ 29 | #git push -f git@git.coding.net:aqazzz/Finen.git master 30 | git push -f git@github.com:hirCodd/Finen.git master 31 | 32 | cd - 33 | -------------------------------------------------------------------------------- /scripts/release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Select a option to release (input a serial number):" 4 | echo 5 | 6 | select VERSION in patch minor major "Specific Version" 7 | do 8 | echo 9 | if [[ $REPLY =~ ^[1-4]$ ]]; then 10 | if [[ $REPLY == 4 ]]; then 11 | read -p "Enter a specific version: " -r VERSION 12 | echo 13 | if [[ -z $REPLY ]]; then 14 | VERSION=$REPLY 15 | fi 16 | fi 17 | 18 | read -p "Release $VERSION - are you sure? (y/n) " -n 1 -r 19 | echo 20 | 21 | if [[ $REPLY =~ ^[Yy]$ || -z $REPLY ]]; then 22 | # pre release task 23 | npm run lint 24 | npm run test 25 | 26 | # bump version 27 | npm version $VERSION 28 | NEW_VERSION=$(node -p "require('./package.json').version") 29 | echo Releasing ${NEW_VERSION} ... 30 | 31 | # npm release 32 | npm whoami 33 | npm publish 34 | echo "✅ Released to npm." 35 | 36 | # github release 37 | git add CHANGELOG.md 38 | git commit -m "chore: changelog" 39 | git push 40 | git push origin refs/tags/v${NEW_VERSION} 41 | echo "✅ Released to Github." 42 | else 43 | echo Cancelled 44 | fi 45 | break 46 | else 47 | echo Invalid \"${REPLY}\" 48 | echo "To continue, please input a serial number(1-4) of an option." 49 | echo 50 | fi 51 | done 52 | 53 | -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "declaration": true, 5 | "declarationMap": false, 6 | "lib": ["DOM", "ES2020"], 7 | "moduleResolution": "node", 8 | "newLine": "lf", 9 | "noEmitOnError": true, 10 | "noImplicitAny": false, 11 | "resolveJsonModule": true, 12 | "skipLibCheck": true, 13 | "sourceMap": false, 14 | "strict": true, 15 | "strictNullChecks": true, 16 | "target": "ES2018" 17 | } 18 | } -------------------------------------------------------------------------------- /tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.base.json", 3 | "references": [ 4 | { "path": "./packages/vupress-plugin-valine-comment/tsconfig.build.json" }, 5 | // { "path": "./packages/@vuepress/bundler-vite/tsconfig.build.json" }, 6 | // { "path": "./packages/@vuepress/bundler-webpack/tsconfig.build.json" }, 7 | // { "path": "./packages/@vuepress/cli/tsconfig.build.json" }, 8 | // { "path": "./packages/@vuepress/client/tsconfig.build.json" }, 9 | // { "path": "./packages/@vuepress/core/tsconfig.build.json" }, 10 | // { "path": "./packages/@vuepress/markdown/tsconfig.build.json" }, 11 | // { 12 | // "path": "./packages/@vuepress/plugin-active-header-links/tsconfig.build.json" 13 | // }, 14 | // { "path": "./packages/@vuepress/plugin-back-to-top/tsconfig.build.json" }, 15 | // { "path": "./packages/@vuepress/plugin-container/tsconfig.build.json" }, 16 | // { "path": "./packages/@vuepress/plugin-debug/tsconfig.build.json" }, 17 | // { "path": "./packages/@vuepress/plugin-docsearch/tsconfig.build.json" }, 18 | // { 19 | // "path": "./packages/@vuepress/plugin-external-link-icon/tsconfig.build.json" 20 | // }, 21 | // { "path": "./packages/@vuepress/plugin-git/tsconfig.build.json" }, 22 | // { 23 | // "path": "./packages/@vuepress/plugin-google-analytics/tsconfig.build.json" 24 | // }, 25 | // { "path": "./packages/@vuepress/plugin-medium-zoom/tsconfig.build.json" }, 26 | // { "path": "./packages/@vuepress/plugin-nprogress/tsconfig.build.json" }, 27 | // { 28 | // "path": "./packages/@vuepress/plugin-palette/tsconfig.build.json" 29 | // }, 30 | // { 31 | // "path": "./packages/@vuepress/plugin-prismjs/tsconfig.build.json" 32 | // }, 33 | // { "path": "./packages/@vuepress/plugin-pwa/tsconfig.build.json" }, 34 | // { "path": "./packages/@vuepress/plugin-pwa-popup/tsconfig.build.json" }, 35 | // { 36 | // "path": "./packages/@vuepress/plugin-register-components/tsconfig.build.json" 37 | // }, 38 | // { "path": "./packages/@vuepress/plugin-search/tsconfig.build.json" }, 39 | // { "path": "./packages/@vuepress/plugin-shiki/tsconfig.build.json" }, 40 | // { "path": "./packages/@vuepress/plugin-theme-data/tsconfig.build.json" }, 41 | // { "path": "./packages/@vuepress/plugin-toc/tsconfig.build.json" }, 42 | // { "path": "./packages/@vuepress/shared/tsconfig.build.json" }, 43 | // { "path": "./packages/@vuepress/theme-default/tsconfig.build.json" }, 44 | // { "path": "./packages/@vuepress/utils/tsconfig.build.json" }, 45 | // { "path": "./packages/vuepress/tsconfig.build.json" }, 46 | // { "path": "./packages/vuepress-vite/tsconfig.build.json" }, 47 | // { "path": "./packages/vuepress-webpack/tsconfig.build.json" } 48 | ], 49 | "files": [] 50 | } 51 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.base.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "module": "ES2020", 6 | "paths": { 7 | "@internal/searchIndex": [ 8 | "./packages/@vuepress/plugin-search/src/client/searchIndex" 9 | ], 10 | "@internal/themeData": [ 11 | "./packages/@vuepress/plugin-theme-data/src/client/themeData" 12 | ], 13 | "@internal/*": ["./packages/@vuepress/client/src/types/internal/*"], 14 | "@vuepress/*": ["./packages/@vuepress/*/src"], 15 | "vuepress": ["./packages/vuepress/src"], 16 | "vuepress-vite": ["./packages/vuepress-vite/src"], 17 | "vuepress-webpack": ["./packages/vuepress-webpack/src"] 18 | }, 19 | "types": ["webpack-env", "vite/client", "@types/jest"] 20 | }, 21 | "include": ["**/.vuepress/**/*", "packages/**/*"], 22 | "exclude": ["node_modules", ".temp", "lib", "dist"] 23 | } 24 | --------------------------------------------------------------------------------