From 8c31d98cb53351f6b848342b3aa3a3bfd1420194 Mon Sep 17 00:00:00 2001 From: xugaoyi <894072666@qq.com> Date: Sun, 15 Mar 2020 22:34:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=E9=A1=B5?= =?UTF-8?q?=E7=9A=84=20=E9=9D=A2=E5=8C=85=E5=B1=91=20=E5=92=8C=20=E6=96=87?= =?UTF-8?q?=E7=AB=A0=E4=BF=A1=E6=81=AF=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vuepress/config.js | 7 + docs/.vuepress/config/sidebar-auto.js | 30 ++-- docs/.vuepress/styles/index.styl | 2 + .../theme/components/ArticleInfo.vue | 131 ++++++++++++++++++ docs/.vuepress/theme/components/Home.vue | 26 +++- docs/.vuepress/theme/components/Page.vue | 12 +- docs/00.目录页/04.更多.md | 16 +++ .../25.JavaScript文章/02.new命令原理.md | 3 + docs/05.关于/01.关于.md | 2 +- docs/index.md | 4 +- utils/sidebar.js | 20 ++- 11 files changed, 227 insertions(+), 26 deletions(-) create mode 100644 docs/.vuepress/theme/components/ArticleInfo.vue create mode 100644 docs/00.目录页/04.更多.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 5756ab1..5131e00 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -11,6 +11,9 @@ module.exports = { ['meta', { name: 'baidu-site-verification', content: '7F55weZDDc'}], ['meta', { name: 'theme-color', content: '#11a8cd'}], // 移动浏览器主题颜色 + // 不蒜子访问量统计 + // ['script', { src: '//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js', async: 'async'}] + // 以下是vuepress-plugin-demo-block插件所需依赖 // ['script', { src: 'https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js' }], // 此文件会影响导航router-link-active样式的切换 // ['script', { src: 'https://cdn.jsdelivr.net/npm/@babel/standalone/babel.min.js' }], @@ -21,6 +24,10 @@ module.exports = { themeConfig: { // 主题配置 nav, sidebar, // 侧边栏 'auto' | 自定义 + author: { // 文章默认的作者信息(此项非官方配置,是新增的一项配置),可在md文件中另外指定此项配置 + name: 'Evan xu', // 必需 + href: 'https://github.com/xugaoyi' // 非必需 + }, sidebarDepth: 2, // 侧边栏显示深度,默认1,最大2(显示到h3标题) logo: '/img/EB-logo.png', // 导航栏logo repo: 'xugaoyi/vuepress-theme-vdoing-blog', // 导航栏右侧生成Github链接 diff --git a/docs/.vuepress/config/sidebar-auto.js b/docs/.vuepress/config/sidebar-auto.js index 1e94f82..d8530f9 100644 --- a/docs/.vuepress/config/sidebar-auto.js +++ b/docs/.vuepress/config/sidebar-auto.js @@ -1,27 +1,33 @@ -// 侧边栏自动生成 // 最里面的数组,格式:[, , <permalink>],其中permalink并非侧边栏所需,而是提供给其他页面使用 +/** + * 自动生成的侧边栏 + * 说明: + * 1. 最里边的数组,格式:[<path>, <title>, <permalink>],其中permalink并非侧边栏所需,而是提供给其他页面(目录页)使用 + * 2. catalogue属性是提供给面包屑所需的目录页数据 + */ module.exports = { - "/00.目录页/": [["01.前端.md","前端","/web"],["02.页面.md","页面","/ui"],["03.技术.md","技术","/technology"]], + "/00.目录页/": [["01.前端.md","前端","/web"],["02.页面.md","页面","/ui"],["03.技术.md","技术","/technology"],["04.更多.md","更多","/more"]], - "/01.前端/": [{"title":"JavaScript文章","collapsable":false,"children":[["25.JavaScript文章/02.new命令原理.md","new命令原理","/pages/8143cc480faf9a11"],["25.JavaScript文章/03.ES5面向对象.md","ES5面向对象","/pages/b1af5cb8996363c5"],["25.JavaScript文章/04.ES6面向对象.md","ES6面向对象","/pages/1f4123be6f45abcd"],["25.JavaScript文章/06.多种数组去重性能对比.md","多种数组去重性能对比","/pages/e808fba1fa8fbab2"],["25.JavaScript文章/50.JS随机打乱数组.md","JS随机打乱数组","/pages/40b4db2d38ba85f2"],["25.JavaScript文章/60.判断是否为移动端浏览器.md","判断是否为移动端浏览器","/pages/40f623be692cf8bc"],["25.JavaScript文章/70.将一维数组按指定长度转为二维数组.md","将一维数组按指定长度转为二维数组","/pages/f1acb712033ac8da"],["25.JavaScript文章/80.防抖与节流函数.md","防抖与节流函数","/pages/0f6a0ac99b62ede5"],["25.JavaScript文章/90.JS获取和修改url参数.md","JS获取和修改url参数","/pages/7a91be2d502346ce"]]},{"title":"Vue文章","collapsable":false,"children":[["30.Vue文章/10.Vue项目开发前的一些准备工作.md","Vue项目开发前的一些准备工作","/pages/802a1ca6f7b71c59"],["30.Vue文章/20.Vue CLi3 修改webpack配置.md","Vue CLi3 修改webpack配置","/pages/5d463fbdb172d43b"],["30.Vue文章/30.Vue中的scoped和scoped穿透.md","Vue中的scoped和scoped穿透","/pages/c80d2751cf1f4268"],["30.Vue文章/40.Vue项目使用mock数据的几种方式.md","Vue项目使用mock数据的几种方式","/pages/bd1af2f75fd361fc"]]},{"title":"学习笔记","collapsable":false,"children":[["40.学习笔记/00.《JavaScript教程》笔记.md","《JavaScript教程》笔记","/note/javascript"],["40.学习笔记/10.《ES6 教程》笔记.md","《ES6 教程》笔记","/note/es6"],["40.学习笔记/20.《Vue》笔记.md","《Vue》笔记","/note/vue"],["40.学习笔记/30.《TypeScript 从零实现 axios》.md","《TypeScript 从零实现 axios》","/note/typescript-axios"],["40.学习笔记/40.小程序笔记.md","小程序笔记","/note/wx-miniprogram"]]}], + "/01.前端/": [{"title":"JavaScript文章","collapsable":false,"children":[["25.JavaScript文章/02.new命令原理.md","new命令原理","/pages/8143cc480faf9a11"],["25.JavaScript文章/03.ES5面向对象.md","ES5面向对象","/pages/b1af5cb8996363c5"],["25.JavaScript文章/04.ES6面向对象.md","ES6面向对象","/pages/1f4123be6f45abcd"],["25.JavaScript文章/06.多种数组去重性能对比.md","多种数组去重性能对比","/pages/e808fba1fa8fbab2"],["25.JavaScript文章/50.JS随机打乱数组.md","JS随机打乱数组","/pages/40b4db2d38ba85f2"],["25.JavaScript文章/60.判断是否为移动端浏览器.md","判断是否为移动端浏览器","/pages/40f623be692cf8bc"],["25.JavaScript文章/70.将一维数组按指定长度转为二维数组.md","将一维数组按指定长度转为二维数组","/pages/f1acb712033ac8da"],["25.JavaScript文章/80.防抖与节流函数.md","防抖与节流函数","/pages/0f6a0ac99b62ede5"],["25.JavaScript文章/90.JS获取和修改url参数.md","JS获取和修改url参数","/pages/7a91be2d502346ce"]]},{"title":"Vue文章","collapsable":false,"children":[["30.Vue文章/10.Vue项目开发前的一些准备工作.md","Vue项目开发前的一些准备工作","/pages/802a1ca6f7b71c59"],["30.Vue文章/20.Vue CLi3 修改webpack配置.md","Vue CLi3 修改webpack配置","/pages/5d463fbdb172d43b"],["30.Vue文章/30.Vue中的scoped和scoped穿透.md","Vue中的scoped和scoped穿透","/pages/c80d2751cf1f4268"],["30.Vue文章/40.Vue项目使用mock数据的几种方式.md","Vue项目使用mock数据的几种方式","/pages/bd1af2f75fd361fc"]]},{"title":"学习笔记","collapsable":false,"children":[["40.学习笔记/00.《JavaScript教程》笔记.md","《JavaScript教程》笔记","/note/javascript"],["40.学习笔记/10.《ES6 教程》笔记.md","《ES6 教程》笔记","/note/es6"],["40.学习笔记/20.《Vue》笔记.md","《Vue》笔记","/note/vue"],["40.学习笔记/30.《TypeScript 从零实现 axios》.md","《TypeScript 从零实现 axios》","/note/typescript-axios"],["40.学习笔记/40.小程序笔记.md","小程序笔记","/note/wx-miniprogram"]]}], - "/02.页面/": [{"title":"HTML","collapsable":false,"children":[["10.HTML/10.常用meta整理.md","常用meta整理","/pages/8309a5b876fc95e3"]]},{"title":"CSS","collapsable":false,"children":[["20.CSS/01.flex布局语法.md","flex布局语法","/pages/0a83b083bdf257cb"],["20.CSS/02.flex布局案例-基础.md","flex布局案例-基础","/pages/ea6db1530c42ad51"],["20.CSS/03.flex布局案例-骰子.md","flex布局案例-骰子","/pages/eff61bc8b4f4695d"],["20.CSS/04.flex布局案例-圣杯布局.md","flex布局案例-圣杯布局","/pages/df9e7c7214fa5046"],["20.CSS/05.flex布局案例-网格布局.md","flex布局案例-网格布局","/pages/85b5a3fe218a34b7"],["20.CSS/06.flex布局案例-输入框布局.md","flex布局案例-输入框布局","/pages/05cc577fb51c7998"],["20.CSS/07.CSS3之transform过渡.md","CSS3之transform过渡","/pages/02d7f59d98d87409"],["20.CSS/08.CSS3之animation动画.md","CSS3之animation动画","/pages/c2c0432138f6e042"],["20.CSS/20.「布局技巧」图片未加载前自动撑开元素高度.md","「布局技巧」图片未加载前自动撑开元素高度","/pages/3d52574260725aea"],["20.CSS/30.文字在一行或两行时超出显示省略号.md","文字在一行或两行时超出显示省略号","/pages/42b66999cc27dc25"],["20.CSS/35.从box-sizing属性入手,了解盒子模型.md","从box-sizing属性入手,了解盒子模型","/pages/20a978023139589d"],["20.CSS/40.水平垂直居中的几种方式-案例.md","水平垂直居中的几种方式-案例","/pages/cb7cb251adba4bf7"]]},{"title":"stylus","collapsable":false,"children":[["25.stylus/10.混入(Mixins).md","混入(Mixins)","/pages/9f15c1a281d8bedb"]]}], + "/02.页面/": [{"title":"HTML","collapsable":false,"children":[["10.HTML/10.常用meta整理.md","常用meta整理","/pages/8309a5b876fc95e3"]]},{"title":"CSS","collapsable":false,"children":[["20.CSS/01.flex布局语法.md","flex布局语法","/pages/0a83b083bdf257cb"],["20.CSS/02.flex布局案例-基础.md","flex布局案例-基础","/pages/ea6db1530c42ad51"],["20.CSS/03.flex布局案例-骰子.md","flex布局案例-骰子","/pages/eff61bc8b4f4695d"],["20.CSS/04.flex布局案例-圣杯布局.md","flex布局案例-圣杯布局","/pages/df9e7c7214fa5046"],["20.CSS/05.flex布局案例-网格布局.md","flex布局案例-网格布局","/pages/85b5a3fe218a34b7"],["20.CSS/06.flex布局案例-输入框布局.md","flex布局案例-输入框布局","/pages/05cc577fb51c7998"],["20.CSS/07.CSS3之transform过渡.md","CSS3之transform过渡","/pages/02d7f59d98d87409"],["20.CSS/08.CSS3之animation动画.md","CSS3之animation动画","/pages/c2c0432138f6e042"],["20.CSS/20.「布局技巧」图片未加载前自动撑开元素高度.md","「布局技巧」图片未加载前自动撑开元素高度","/pages/3d52574260725aea"],["20.CSS/30.文字在一行或两行时超出显示省略号.md","文字在一行或两行时超出显示省略号","/pages/42b66999cc27dc25"],["20.CSS/35.从box-sizing属性入手,了解盒子模型.md","从box-sizing属性入手,了解盒子模型","/pages/20a978023139589d"],["20.CSS/40.水平垂直居中的几种方式-案例.md","水平垂直居中的几种方式-案例","/pages/cb7cb251adba4bf7"]]},{"title":"stylus","collapsable":false,"children":[["25.stylus/10.混入(Mixins).md","混入(Mixins)","/pages/9f15c1a281d8bedb"]]}], - "/03.技术/": [{"title":"技术文档","collapsable":false,"children":[["01.技术文档/01.Git使用手册.md","Git使用手册","/pages/9a7ee40fc232253e"],["01.技术文档/02.Markdown使用教程.md","Markdown使用教程","/pages/ad247c4332211551"],["01.技术文档/03.npm常用命令.md","npm常用命令","/pages/61f2f95fd7da14fd"],["01.技术文档/04.yaml语言教程.md","yaml语言教程","/pages/4e8444e2d534d14f"]]},{"title":"GitHub技巧","collapsable":false,"children":[["02.GitHub技巧/01.GitHub高级搜索技巧.md","GitHub高级搜索技巧","/pages/4c778760be26d8b3"],["02.GitHub技巧/02.GitHub Actions 实现自动部署静态博客.md","GitHub Actions 实现自动部署静态博客","/pages/6b9d359ec5aa5019"],["02.GitHub技巧/03.GitHub Actions 定时运行代码:每天定时百度链接推送.md","GitHub Actions 定时运行代码:每天定时百度链接推送","/pages/f44d2f9ad04ab8d3"],["02.GitHub技巧/10.GitHub加速下载项目的方法.md","GitHub加速下载项目的方法","/pages/95331c6a9613faf8"]]},{"title":"Nodejs","collapsable":false,"children":[["03.Nodejs/01.nodejs递归读取所有文件.md","nodejs递归读取所有文件","/pages/117708e0af7f0bd9"]]},{"title":"博客搭建","collapsable":false,"children":[["04.博客搭建/01.解决百度无法收录搭建在GitHub上的个人博客的问题.md","解决百度无法收录搭建在GitHub上的个人博客的问题","/pages/41f87d890d0a02af"],["04.博客搭建/02.使用Gitalk实现静态博客无后台评论系统.md","使用Gitalk实现静态博客无后台评论系统","/pages/1da0bf9a988eafe5"],["04.博客搭建/03.GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床.md","GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床","/pages/a5f73af5185fdf0a"]]}], + "/03.技术/": [{"title":"技术文档","collapsable":false,"children":[["01.技术文档/01.Git使用手册.md","Git使用手册","/pages/9a7ee40fc232253e"],["01.技术文档/02.Markdown使用教程.md","Markdown使用教程","/pages/ad247c4332211551"],["01.技术文档/03.npm常用命令.md","npm常用命令","/pages/61f2f95fd7da14fd"],["01.技术文档/04.yaml语言教程.md","yaml语言教程","/pages/4e8444e2d534d14f"]]},{"title":"GitHub技巧","collapsable":false,"children":[["02.GitHub技巧/01.GitHub高级搜索技巧.md","GitHub高级搜索技巧","/pages/4c778760be26d8b3"],["02.GitHub技巧/02.GitHub Actions 实现自动部署静态博客.md","GitHub Actions 实现自动部署静态博客","/pages/6b9d359ec5aa5019"],["02.GitHub技巧/03.GitHub Actions 定时运行代码:每天定时百度链接推送.md","GitHub Actions 定时运行代码:每天定时百度链接推送","/pages/f44d2f9ad04ab8d3"],["02.GitHub技巧/10.GitHub加速下载项目的方法.md","GitHub加速下载项目的方法","/pages/95331c6a9613faf8"]]},{"title":"Nodejs","collapsable":false,"children":[["03.Nodejs/01.nodejs递归读取所有文件.md","nodejs递归读取所有文件","/pages/117708e0af7f0bd9"]]},{"title":"博客搭建","collapsable":false,"children":[["04.博客搭建/01.解决百度无法收录搭建在GitHub上的个人博客的问题.md","解决百度无法收录搭建在GitHub上的个人博客的问题","/pages/41f87d890d0a02af"],["04.博客搭建/02.使用Gitalk实现静态博客无后台评论系统.md","使用Gitalk实现静态博客无后台评论系统","/pages/1da0bf9a988eafe5"],["04.博客搭建/03.GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床.md","GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床","/pages/a5f73af5185fdf0a"]]}], - "/04.更多/": [{"title":"学习","collapsable":false,"children":[["01.学习/02.提高学习效率的策略.md","提高学习效率的策略","/pages/a8692ab3bdcb4588"],["01.学习/03.提高记忆的技巧.md","提高记忆的技巧","/pages/996822b2a2ca6e3b"],["01.学习/04.自律小建议.md","自律小建议","/pages/c3f302a03c8daf79"],["01.学习/05.处理问题的思路.md","处理问题的思路","/pages/9ba2b8fb13de1957"]]},{"title":"面试","collapsable":false,"children":[["03.面试/01.面试问题集锦.md","面试问题集锦","/pages/aea6571b7a8bae86"]]},{"title":"英语","collapsable":false,"children":[["04.英语/01.英语基础.md","英语基础","/pages/6f9525eecdd51d5a"]]},{"title":"心情杂货","collapsable":false,"children":[["05.心情杂货/01.一个完美主义者的自我救赎.md","一个完美主义者的自我救赎","/pages/2d615df9a36a98ed"]]},["97.学习网站.md","学习网站","/pages/2e9ba3fa6e1ed0e9"],["98.在线工具.md","在线工具","/pages/9c2232288caaa8ec"],["99.友情链接.md","友情链接","/pages/844eea1b2387fb96"]], + "/04.更多/": [{"title":"学习","collapsable":false,"children":[["01.学习/02.提高学习效率的策略.md","提高学习效率的策略","/pages/a8692ab3bdcb4588"],["01.学习/03.提高记忆的技巧.md","提高记忆的技巧","/pages/996822b2a2ca6e3b"],["01.学习/04.自律小建议.md","自律小建议","/pages/c3f302a03c8daf79"],["01.学习/05.处理问题的思路.md","处理问题的思路","/pages/9ba2b8fb13de1957"]]},{"title":"面试","collapsable":false,"children":[["03.面试/01.面试问题集锦.md","面试问题集锦","/pages/aea6571b7a8bae86"]]},{"title":"英语","collapsable":false,"children":[["04.英语/01.英语基础.md","英语基础","/pages/6f9525eecdd51d5a"]]},{"title":"心情杂货","collapsable":false,"children":[["05.心情杂货/01.一个完美主义者的自我救赎.md","一个完美主义者的自我救赎","/pages/2d615df9a36a98ed"]]},["97.学习网站.md","学习网站","/pages/2e9ba3fa6e1ed0e9"],["98.在线工具.md","在线工具","/pages/9c2232288caaa8ec"],["99.友情链接.md","友情链接","/pages/844eea1b2387fb96"]], - "/05.关于/": [["01.关于.md","关于","/about"]], + "/05.关于/": [["01.关于.md","关于","/about"]], - "/06.时间轴/": [["01.时间轴.md","时间轴","/timeline"]], + "/06.时间轴/": [["01.时间轴.md","时间轴","/timeline"]], - "/《ES6 教程》笔记/": [["01.ECMAScript 6 简介.md","ECMAScript 6 简介","/pages/f344d070a1031ef7"],["02.let 和 const 命令.md","let 和 const 命令","/pages/c1edd70a6b7c7872"],["03.变量的解构赋值.md","变量的解构赋值","/pages/b1ab10a62f7564da"],["04.字符串的扩展.md","字符串的扩展","/pages/ca89eca8adeba5f4"],["05.字符串的新增方法.md","字符串的新增方法","/pages/a650b4a0ebfc9350"],["06.正则的扩展.md","正则的扩展","/pages/0473261a6ab0ee8c"],["07.数值的扩展.md","数值的扩展","/pages/5dfea9a0f2d1a392"],["08.函数的扩展.md","函数的扩展","/pages/8ed309d668b20264"],["09.数组的扩展.md","数组的扩展","/pages/e34009d60d8bc4b2"],["10.对象的扩展.md","对象的扩展","/pages/b5e3e0a0ff6e9c25"],["11.对象的新增方法.md","对象的新增方法","/pages/e85e68947502cf90"],["12.Symbol.md","Symbol","/pages/02c86eb2792f3262"],["13.Set 和 Map 数据结构.md","Set 和 Map 数据结构","/pages/0c21dae358fca16b"],["14.Proxy.md","Proxy","/pages/f56ec2ab97d60483"],["15.Reflect.md","Reflect","/pages/74de3e45e4491e95"],["16.Promise 对象.md","Promise 对象","/pages/2810ae8985e9bd52"],["17.Iterator 和 for-of 循环.md","Iterator 和 for-of 循环","/pages/48df907ad3570f3d"],["18.Generator 函数的语法.md","Generator 函数的语法","/pages/718b48ed9ce0adce"],["19.Generator 函数的异步应用.md","Generator 函数的异步应用","/pages/75af7031eb66847b"],["20.async 函数.md","async 函数","/pages/3777253e65bac487"],["21.Class 的基本语法.md","Class 的基本语法","/pages/e831e1593c82bbe0"],["22.Class 的继承.md","Class 的继承","/pages/83f8c3a0cd87dd83"],["23.Module 的语法.md","Module 的语法","/pages/efe2fb04eb8ac5fb"],["24.Module 的加载实现.md","Module 的加载实现","/pages/a79ca2e64ceae213"],["25.编程风格.md","编程风格","/pages/984bf549204bb266"],["26.读懂 ECMAScript 规格.md","读懂 ECMAScript 规格","/pages/32c35f7651d6e58e"],["27.异步遍历器.md","异步遍历器","/pages/16121351be68691b"],["28.ArrayBuffer.md","ArrayBuffer","/pages/a2ba314746bfdbdd"],["29.最新提案.md","最新提案","/pages/7188882b8d65af1b"],["30.装饰器.md","装饰器","/pages/e97bc1e5626b082c"],["31.函数式编程.md","函数式编程","/pages/1cf50330655efc69"],["32.Mixin.md","Mixin","/pages/6a8e2dc558da1b39"],["33.SIMD.md","SIMD","/pages/8e8f80f69b775a56"],["34.参考链接.md","参考链接","/pages/ea6f3b870f6dab69"]], + "/《ES6 教程》笔记/": [["01.ECMAScript 6 简介.md","ECMAScript 6 简介","/pages/f344d070a1031ef7"],["02.let 和 const 命令.md","let 和 const 命令","/pages/c1edd70a6b7c7872"],["03.变量的解构赋值.md","变量的解构赋值","/pages/b1ab10a62f7564da"],["04.字符串的扩展.md","字符串的扩展","/pages/ca89eca8adeba5f4"],["05.字符串的新增方法.md","字符串的新增方法","/pages/a650b4a0ebfc9350"],["06.正则的扩展.md","正则的扩展","/pages/0473261a6ab0ee8c"],["07.数值的扩展.md","数值的扩展","/pages/5dfea9a0f2d1a392"],["08.函数的扩展.md","函数的扩展","/pages/8ed309d668b20264"],["09.数组的扩展.md","数组的扩展","/pages/e34009d60d8bc4b2"],["10.对象的扩展.md","对象的扩展","/pages/b5e3e0a0ff6e9c25"],["11.对象的新增方法.md","对象的新增方法","/pages/e85e68947502cf90"],["12.Symbol.md","Symbol","/pages/02c86eb2792f3262"],["13.Set 和 Map 数据结构.md","Set 和 Map 数据结构","/pages/0c21dae358fca16b"],["14.Proxy.md","Proxy","/pages/f56ec2ab97d60483"],["15.Reflect.md","Reflect","/pages/74de3e45e4491e95"],["16.Promise 对象.md","Promise 对象","/pages/2810ae8985e9bd52"],["17.Iterator 和 for-of 循环.md","Iterator 和 for-of 循环","/pages/48df907ad3570f3d"],["18.Generator 函数的语法.md","Generator 函数的语法","/pages/718b48ed9ce0adce"],["19.Generator 函数的异步应用.md","Generator 函数的异步应用","/pages/75af7031eb66847b"],["20.async 函数.md","async 函数","/pages/3777253e65bac487"],["21.Class 的基本语法.md","Class 的基本语法","/pages/e831e1593c82bbe0"],["22.Class 的继承.md","Class 的继承","/pages/83f8c3a0cd87dd83"],["23.Module 的语法.md","Module 的语法","/pages/efe2fb04eb8ac5fb"],["24.Module 的加载实现.md","Module 的加载实现","/pages/a79ca2e64ceae213"],["25.编程风格.md","编程风格","/pages/984bf549204bb266"],["26.读懂 ECMAScript 规格.md","读懂 ECMAScript 规格","/pages/32c35f7651d6e58e"],["27.异步遍历器.md","异步遍历器","/pages/16121351be68691b"],["28.ArrayBuffer.md","ArrayBuffer","/pages/a2ba314746bfdbdd"],["29.最新提案.md","最新提案","/pages/7188882b8d65af1b"],["30.装饰器.md","装饰器","/pages/e97bc1e5626b082c"],["31.函数式编程.md","函数式编程","/pages/1cf50330655efc69"],["32.Mixin.md","Mixin","/pages/6a8e2dc558da1b39"],["33.SIMD.md","SIMD","/pages/8e8f80f69b775a56"],["34.参考链接.md","参考链接","/pages/ea6f3b870f6dab69"]], - "/《JavaScript教程》笔记/": [["01.基础.md","基础","/pages/0796ba76b4b55368"],["02.内置对象.md","内置对象","/pages/74d2ab3fbfeaaa68"],["03.面向对象.md","面向对象","/pages/659b5af5e2e704e0"],["04.异步操作.md","异步操作","/pages/d61b1cb4cdac1f63"],["05.DOM.md","DOM","/pages/7d961b8030c6099e"],["06.事件.md","事件","/pages/10b2761db5a8e089"],["07.浏览器模型.md","浏览器模型","/pages/bab4930124ad2c10"]], + "/《JavaScript教程》笔记/": [["01.基础.md","基础","/pages/0796ba76b4b55368"],["02.内置对象.md","内置对象","/pages/74d2ab3fbfeaaa68"],["03.面向对象.md","面向对象","/pages/659b5af5e2e704e0"],["04.异步操作.md","异步操作","/pages/d61b1cb4cdac1f63"],["05.DOM.md","DOM","/pages/7d961b8030c6099e"],["06.事件.md","事件","/pages/10b2761db5a8e089"],["07.浏览器模型.md","浏览器模型","/pages/bab4930124ad2c10"]], - "/《TypeScript 从零实现 axios》/": [{"title":"初识 TypeScript","collapsable":false,"children":[["01.初识 TypeScript/01.简介.md","简介","/pages/e05dce83e5129785"],["01.初识 TypeScript/02.安装 TypeScript.md","安装 TypeScript","/pages/064e0f7b6b6142c8"],["01.初识 TypeScript/03.编写第一个 TypeScript 程序.md","编写第一个 TypeScript 程序","/pages/c85249f40e7a3517"]]},{"title":"TypeScript 常用语法","collapsable":false,"children":[["02.TypeScript 常用语法/01.基础类型.md","基础类型","/pages/28672e2743bbc3a7"],["02.TypeScript 常用语法/02.变量声明.md","变量声明","/pages/54add7f5cf78088e"],["02.TypeScript 常用语法/03.接口.md","接口","/pages/54ea89b497ec3bb3"],["02.TypeScript 常用语法/04.类.md","类","/pages/fad060bd9a8bfac6"],["02.TypeScript 常用语法/05.函数.md","函数","/pages/870a51ba2a9edfad"],["02.TypeScript 常用语法/06.泛型.md","泛型","/pages/8045759ec4ad3c01"],["02.TypeScript 常用语法/07.类型推断.md","类型推断","/pages/7279420c899c505d"],["02.TypeScript 常用语法/08.高级类型.md","高级类型","/pages/3fb6c2f52ab398e3"]]},{"title":"ts-axios 项目初始化","collapsable":false,"children":[["03.ts-axios 项目初始化/01.需求分析.md","需求分析","/pages/195af93fcc871b8b"],["03.ts-axios 项目初始化/02.初始化项目.md","初始化项目","/pages/6e11ac76475a2b3e"],["03.ts-axios 项目初始化/03.编写基础请求代码.md","编写基础请求代码","/pages/acfe1e0b401fa984"]]},{"title":"ts-axios 基础功能实现","collapsable":false,"children":[["04.ts-axios 基础功能实现/01.处理请求 url 参数.md","处理请求 url 参数","/pages/1313dae575f6dddf"],["04.ts-axios 基础功能实现/02.处理请求 body 数据.md","处理请求 body 数据","/pages/887cd0918e2543d8"],["04.ts-axios 基础功能实现/03.处理请求 header.md","处理请求 header","/pages/35c0ec1bb0b0faaf"],["04.ts-axios 基础功能实现/04.获取响应数据.md","获取响应数据","/pages/a57debe141e1e4f4"],["04.ts-axios 基础功能实现/05.处理响应 header.md","处理响应 header","/pages/927161662ca32c24"],["04.ts-axios 基础功能实现/06.处理响应 data.md","处理响应 data","/pages/922cb4268499dc3f"]]},{"title":"ts-axios 异常情况处理","collapsable":false,"children":[["05.ts-axios 异常情况处理/01.错误处理.md","错误处理","/pages/6a8bef7b98dfdcf9"],["05.ts-axios 异常情况处理/02.错误信息增强.md","错误信息增强","/pages/22d581d8c2860b8a"]]},{"title":"ts-axios 接口扩展","collapsable":false,"children":[["06.ts-axios 接口扩展/01.扩展接口.md","扩展接口","/pages/034e320f4af88bd4"],["06.ts-axios 接口扩展/02.axios 函数重载.md","axios 函数重载","/pages/8af227eae851ec97"],["06.ts-axios 接口扩展/03.响应数据支持泛型.md","响应数据支持泛型","/pages/c4489d0bab02cc0c"]]},{"title":"ts-axios 拦截器实现","collapsable":false,"children":[["07.ts-axios 拦截器实现/01.拦截器设计与实现.md","拦截器设计与实现","/pages/70651900f022f586"]]},{"title":"ts-axios 配置化实现","collapsable":false,"children":[["08.ts-axios 配置化实现/01.合并配置的设计与实现.md","合并配置的设计与实现","/pages/937e4de6b81edeca"],["08.ts-axios 配置化实现/02.请求和响应配置化.md","请求和响应配置化","/pages/f5b627bfebba87fc"],["08.ts-axios 配置化实现/03.扩展 create 静态接口.md","扩展 create 静态接口","/pages/7b49658c26f613bf"]]},{"title":"ts-axios 取消功能实现","collapsable":false,"children":[["09.ts-axios 取消功能实现/01.取消功能的设计与实现.md","取消功能的设计与实现","/pages/fdc6da5372397430"]]},{"title":"ts-axios 更多功能实现","collapsable":false,"children":[["10.ts-axios 更多功能实现/01.withCredentials.md","withCredentials","/pages/5dce43eba796a2ab"],["10.ts-axios 更多功能实现/02.XSRF 防御.md","XSRF 防御","/pages/390cb70e2b619449"],["10.ts-axios 更多功能实现/03.上传和下载的进度监控.md","上传和下载的进度监控","/pages/1376fd897809036e"],["10.ts-axios 更多功能实现/04.HTTP 授权.md","HTTP 授权","/pages/89cd6496c23159ae"],["10.ts-axios 更多功能实现/05.自定义合法状态码.md","自定义合法状态码","/pages/40b41ce8e8159567"],["10.ts-axios 更多功能实现/06.自定义参数序列化.md","自定义参数序列化","/pages/7753b8141663e54a"],["10.ts-axios 更多功能实现/07.baseURL.md","baseURL","/pages/0b9f2ee2b4dbb728"],["10.ts-axios 更多功能实现/08.静态方法扩展.md","静态方法扩展","/pages/c26b053540a7dafa"]]},{"title":"ts-axios 单元测试","collapsable":false,"children":[["11.ts-axios 单元测试/01.前言.md","前言","/pages/df36888424843793"],["11.ts-axios 单元测试/02.Jest 安装和配置.md","Jest 安装和配置","/pages/bf5c625a35757b37"],["11.ts-axios 单元测试/03.辅助模块单元测试.md","辅助模块单元测试","/pages/13f147a9b355c4c1"],["11.ts-axios 单元测试/04.请求模块单元测试.md","请求模块单元测试","/pages/e1d15dec8634e6b5"],["11.ts-axios 单元测试/05.headers 模块单元测试.md","headers 模块单元测试","/pages/ddd86ec39b5dfe33"],["11.ts-axios 单元测试/06.Axios 实例模块单元测试.md","Axios 实例模块单元测试","/pages/2eac7a0a0d644c15"],["11.ts-axios 单元测试/07.拦截器模块单元测试.md","拦截器模块单元测试","/pages/97de6fd6293a2c6e"],["11.ts-axios 单元测试/08.mergeConfig 模块单元测试.md","mergeConfig 模块单元测试","/pages/cdf59840306f9e81"],["11.ts-axios 单元测试/09.请求取消模块单元测试.md","请求取消模块单元测试","/pages/6fa16aee29527032"],["11.ts-axios 单元测试/10.剩余模块单元测试.md","剩余模块单元测试","/pages/9572134781ba6a25"]]},{"title":"ts-axios 部署与发布","collapsable":false,"children":[["12.ts-axios 部署与发布/01.ts-axios 编译与发布.md","ts-axios 编译与发布","/pages/3e5d5a45ad50f198"],["12.ts-axios 部署与发布/02.引用 ts-axios 库.md","引用 ts-axios 库","/pages/c6bdbd5bd60adf5a"]]}], + "/《TypeScript 从零实现 axios》/": [{"title":"初识 TypeScript","collapsable":false,"children":[["01.初识 TypeScript/01.简介.md","简介","/pages/e05dce83e5129785"],["01.初识 TypeScript/02.安装 TypeScript.md","安装 TypeScript","/pages/064e0f7b6b6142c8"],["01.初识 TypeScript/03.编写第一个 TypeScript 程序.md","编写第一个 TypeScript 程序","/pages/c85249f40e7a3517"]]},{"title":"TypeScript 常用语法","collapsable":false,"children":[["02.TypeScript 常用语法/01.基础类型.md","基础类型","/pages/28672e2743bbc3a7"],["02.TypeScript 常用语法/02.变量声明.md","变量声明","/pages/54add7f5cf78088e"],["02.TypeScript 常用语法/03.接口.md","接口","/pages/54ea89b497ec3bb3"],["02.TypeScript 常用语法/04.类.md","类","/pages/fad060bd9a8bfac6"],["02.TypeScript 常用语法/05.函数.md","函数","/pages/870a51ba2a9edfad"],["02.TypeScript 常用语法/06.泛型.md","泛型","/pages/8045759ec4ad3c01"],["02.TypeScript 常用语法/07.类型推断.md","类型推断","/pages/7279420c899c505d"],["02.TypeScript 常用语法/08.高级类型.md","高级类型","/pages/3fb6c2f52ab398e3"]]},{"title":"ts-axios 项目初始化","collapsable":false,"children":[["03.ts-axios 项目初始化/01.需求分析.md","需求分析","/pages/195af93fcc871b8b"],["03.ts-axios 项目初始化/02.初始化项目.md","初始化项目","/pages/6e11ac76475a2b3e"],["03.ts-axios 项目初始化/03.编写基础请求代码.md","编写基础请求代码","/pages/acfe1e0b401fa984"]]},{"title":"ts-axios 基础功能实现","collapsable":false,"children":[["04.ts-axios 基础功能实现/01.处理请求 url 参数.md","处理请求 url 参数","/pages/1313dae575f6dddf"],["04.ts-axios 基础功能实现/02.处理请求 body 数据.md","处理请求 body 数据","/pages/887cd0918e2543d8"],["04.ts-axios 基础功能实现/03.处理请求 header.md","处理请求 header","/pages/35c0ec1bb0b0faaf"],["04.ts-axios 基础功能实现/04.获取响应数据.md","获取响应数据","/pages/a57debe141e1e4f4"],["04.ts-axios 基础功能实现/05.处理响应 header.md","处理响应 header","/pages/927161662ca32c24"],["04.ts-axios 基础功能实现/06.处理响应 data.md","处理响应 data","/pages/922cb4268499dc3f"]]},{"title":"ts-axios 异常情况处理","collapsable":false,"children":[["05.ts-axios 异常情况处理/01.错误处理.md","错误处理","/pages/6a8bef7b98dfdcf9"],["05.ts-axios 异常情况处理/02.错误信息增强.md","错误信息增强","/pages/22d581d8c2860b8a"]]},{"title":"ts-axios 接口扩展","collapsable":false,"children":[["06.ts-axios 接口扩展/01.扩展接口.md","扩展接口","/pages/034e320f4af88bd4"],["06.ts-axios 接口扩展/02.axios 函数重载.md","axios 函数重载","/pages/8af227eae851ec97"],["06.ts-axios 接口扩展/03.响应数据支持泛型.md","响应数据支持泛型","/pages/c4489d0bab02cc0c"]]},{"title":"ts-axios 拦截器实现","collapsable":false,"children":[["07.ts-axios 拦截器实现/01.拦截器设计与实现.md","拦截器设计与实现","/pages/70651900f022f586"]]},{"title":"ts-axios 配置化实现","collapsable":false,"children":[["08.ts-axios 配置化实现/01.合并配置的设计与实现.md","合并配置的设计与实现","/pages/937e4de6b81edeca"],["08.ts-axios 配置化实现/02.请求和响应配置化.md","请求和响应配置化","/pages/f5b627bfebba87fc"],["08.ts-axios 配置化实现/03.扩展 create 静态接口.md","扩展 create 静态接口","/pages/7b49658c26f613bf"]]},{"title":"ts-axios 取消功能实现","collapsable":false,"children":[["09.ts-axios 取消功能实现/01.取消功能的设计与实现.md","取消功能的设计与实现","/pages/fdc6da5372397430"]]},{"title":"ts-axios 更多功能实现","collapsable":false,"children":[["10.ts-axios 更多功能实现/01.withCredentials.md","withCredentials","/pages/5dce43eba796a2ab"],["10.ts-axios 更多功能实现/02.XSRF 防御.md","XSRF 防御","/pages/390cb70e2b619449"],["10.ts-axios 更多功能实现/03.上传和下载的进度监控.md","上传和下载的进度监控","/pages/1376fd897809036e"],["10.ts-axios 更多功能实现/04.HTTP 授权.md","HTTP 授权","/pages/89cd6496c23159ae"],["10.ts-axios 更多功能实现/05.自定义合法状态码.md","自定义合法状态码","/pages/40b41ce8e8159567"],["10.ts-axios 更多功能实现/06.自定义参数序列化.md","自定义参数序列化","/pages/7753b8141663e54a"],["10.ts-axios 更多功能实现/07.baseURL.md","baseURL","/pages/0b9f2ee2b4dbb728"],["10.ts-axios 更多功能实现/08.静态方法扩展.md","静态方法扩展","/pages/c26b053540a7dafa"]]},{"title":"ts-axios 单元测试","collapsable":false,"children":[["11.ts-axios 单元测试/01.前言.md","前言","/pages/df36888424843793"],["11.ts-axios 单元测试/02.Jest 安装和配置.md","Jest 安装和配置","/pages/bf5c625a35757b37"],["11.ts-axios 单元测试/03.辅助模块单元测试.md","辅助模块单元测试","/pages/13f147a9b355c4c1"],["11.ts-axios 单元测试/04.请求模块单元测试.md","请求模块单元测试","/pages/e1d15dec8634e6b5"],["11.ts-axios 单元测试/05.headers 模块单元测试.md","headers 模块单元测试","/pages/ddd86ec39b5dfe33"],["11.ts-axios 单元测试/06.Axios 实例模块单元测试.md","Axios 实例模块单元测试","/pages/2eac7a0a0d644c15"],["11.ts-axios 单元测试/07.拦截器模块单元测试.md","拦截器模块单元测试","/pages/97de6fd6293a2c6e"],["11.ts-axios 单元测试/08.mergeConfig 模块单元测试.md","mergeConfig 模块单元测试","/pages/cdf59840306f9e81"],["11.ts-axios 单元测试/09.请求取消模块单元测试.md","请求取消模块单元测试","/pages/6fa16aee29527032"],["11.ts-axios 单元测试/10.剩余模块单元测试.md","剩余模块单元测试","/pages/9572134781ba6a25"]]},{"title":"ts-axios 部署与发布","collapsable":false,"children":[["12.ts-axios 部署与发布/01.ts-axios 编译与发布.md","ts-axios 编译与发布","/pages/3e5d5a45ad50f198"],["12.ts-axios 部署与发布/02.引用 ts-axios 库.md","引用 ts-axios 库","/pages/c6bdbd5bd60adf5a"]]}], - "/《Vue》笔记/": [{"title":"基础","collapsable":false,"children":[["01.基础/00.MVVM模式.md","MVVM模式","/pages/114158caa9e96df0"],["01.基础/10.生命周期.md","生命周期","/pages/176808a1b5f843b8"],["01.基础/20.计算属性 vs 方法 vs 侦听属性.md","计算属性 vs 方法 vs 侦听属性","/pages/351f72ecd9c41129"],["01.基础/30.v-if vs v-show.md","v-if vs v-show","/pages/73e4064340277b05"],["01.基础/35.列表渲染之数组、对象更新检测.md","列表渲染之数组、对象更新检测","/pages/04783a6691cc9d06"]]},{"title":"组件","collapsable":false,"children":[["02.组件/36.使用组件的细节点.md","使用组件的细节点","/pages/83a1ab785e7fd70c"],["02.组件/40.父组件给子组件传值.md","父组件给子组件传值","/pages/07b384c2e6232e07"],["02.组件/50.子组件派发事件和值给父组件.md","子组件派发事件和值给父组件","/pages/0f19a1bcac14fd41"],["02.组件/52.Prop 验证 与 非 Prop 的 Attribute.md","Prop 验证 与 非 Prop 的 Attribute","/pages/a3080f60f6596eb4"],["02.组件/55.自定义事件.md","自定义事件","/pages/9651417d08d1779d"],["02.组件/60.兄弟组件传值.md","兄弟组件传值","/pages/809f4582d9ca9552"],["02.组件/65.非父子组件传值.md","非父子组件传值","/pages/d408e64f666f146d"],["02.组件/70.父组件调用子组件方法并传入值.md","父组件调用子组件方法并传入值","/pages/2e24dab728769e0c"],["02.组件/75.插槽slot.md","插槽slot","/pages/055ecee9a4325386"],["02.组件/80.动态组件与 v-once 指令.md","动态组件与 v-once 指令","/pages/636ca33122e9a64b"],["02.组件/90.vue父子组件的生命周期顺序.md","vue父子组件的生命周期顺序","/pages/e6cec47efa42d7f1"]]},{"title":"过渡&动画","collapsable":false,"children":[["03.过渡&动画/110.transition过渡&动画.md","transition过渡&动画","/pages/184a96b493a97078"],["03.过渡&动画/112.使用animate库.md","使用animate库","/pages/3b0a20e70805fcea"],["03.过渡&动画/120.transition-group列表过渡.md","transition-group列表过渡","/pages/0aa92922ace6bb5e"]]},{"title":"可复用性&组合","collapsable":false,"children":[["04.可复用性&组合/01.Mixin混入.md","Mixin混入","/pages/bd36a3c1bc3e0821"]]},{"title":"工具","collapsable":false,"children":[["05.工具/10.Vue CLi v3 创建项目使用记录.md","Vue CLi v3 创建项目使用记录","/pages/d00311f8174119b2"]]},{"title":"规模化","collapsable":false,"children":[["06.规模化/100.vuex操作相关.md","vuex操作相关","/pages/d9d62d6ab8ff99a6"],["06.规模化/140.路由懒加载.md","路由懒加载","/pages/38ecac9a9b92f037"]]},{"title":"其他","collapsable":false,"children":[["99.其他/80.Vue中的防抖函数封装和使用.md","Vue中的防抖函数封装和使用","/pages/fb08e252dfd8fdfd"],["99.其他/90.操作本地缓存.md","操作本地缓存","/pages/30a94dbe96873b33"]]}], + "/《Vue》笔记/": [{"title":"基础","collapsable":false,"children":[["01.基础/00.MVVM模式.md","MVVM模式","/pages/114158caa9e96df0"],["01.基础/10.生命周期.md","生命周期","/pages/176808a1b5f843b8"],["01.基础/20.计算属性 vs 方法 vs 侦听属性.md","计算属性 vs 方法 vs 侦听属性","/pages/351f72ecd9c41129"],["01.基础/30.v-if vs v-show.md","v-if vs v-show","/pages/73e4064340277b05"],["01.基础/35.列表渲染之数组、对象更新检测.md","列表渲染之数组、对象更新检测","/pages/04783a6691cc9d06"]]},{"title":"组件","collapsable":false,"children":[["02.组件/36.使用组件的细节点.md","使用组件的细节点","/pages/83a1ab785e7fd70c"],["02.组件/40.父组件给子组件传值.md","父组件给子组件传值","/pages/07b384c2e6232e07"],["02.组件/50.子组件派发事件和值给父组件.md","子组件派发事件和值给父组件","/pages/0f19a1bcac14fd41"],["02.组件/52.Prop 验证 与 非 Prop 的 Attribute.md","Prop 验证 与 非 Prop 的 Attribute","/pages/a3080f60f6596eb4"],["02.组件/55.自定义事件.md","自定义事件","/pages/9651417d08d1779d"],["02.组件/60.兄弟组件传值.md","兄弟组件传值","/pages/809f4582d9ca9552"],["02.组件/65.非父子组件传值.md","非父子组件传值","/pages/d408e64f666f146d"],["02.组件/70.父组件调用子组件方法并传入值.md","父组件调用子组件方法并传入值","/pages/2e24dab728769e0c"],["02.组件/75.插槽slot.md","插槽slot","/pages/055ecee9a4325386"],["02.组件/80.动态组件与 v-once 指令.md","动态组件与 v-once 指令","/pages/636ca33122e9a64b"],["02.组件/90.vue父子组件的生命周期顺序.md","vue父子组件的生命周期顺序","/pages/e6cec47efa42d7f1"]]},{"title":"过渡&动画","collapsable":false,"children":[["03.过渡&动画/110.transition过渡&动画.md","transition过渡&动画","/pages/184a96b493a97078"],["03.过渡&动画/112.使用animate库.md","使用animate库","/pages/3b0a20e70805fcea"],["03.过渡&动画/120.transition-group列表过渡.md","transition-group列表过渡","/pages/0aa92922ace6bb5e"]]},{"title":"可复用性&组合","collapsable":false,"children":[["04.可复用性&组合/01.Mixin混入.md","Mixin混入","/pages/bd36a3c1bc3e0821"]]},{"title":"工具","collapsable":false,"children":[["05.工具/10.Vue CLi v3 创建项目使用记录.md","Vue CLi v3 创建项目使用记录","/pages/d00311f8174119b2"]]},{"title":"规模化","collapsable":false,"children":[["06.规模化/100.vuex操作相关.md","vuex操作相关","/pages/d9d62d6ab8ff99a6"],["06.规模化/140.路由懒加载.md","路由懒加载","/pages/38ecac9a9b92f037"]]},{"title":"其他","collapsable":false,"children":[["99.其他/80.Vue中的防抖函数封装和使用.md","Vue中的防抖函数封装和使用","/pages/fb08e252dfd8fdfd"],["99.其他/90.操作本地缓存.md","操作本地缓存","/pages/30a94dbe96873b33"]]}], + "catalogue": {"前端":"/web","页面":"/ui","技术":"/technology","更多":"/more","《JavaScript教程》笔记":"/note/javascript","《ES6 教程》笔记":"/note/es6","《Vue》笔记":"/note/vue","《TypeScript 从零实现 axios》":"/note/typescript-axios"} } \ No newline at end of file diff --git a/docs/.vuepress/styles/index.styl b/docs/.vuepress/styles/index.styl index b7635c2..751af4a 100644 --- a/docs/.vuepress/styles/index.styl +++ b/docs/.vuepress/styles/index.styl @@ -1,3 +1,5 @@ +// 引入字体图标 +@import '//at.alicdn.com/t/font_1678482_m18ipwgi2da.css' // 样式重置 body diff --git a/docs/.vuepress/theme/components/ArticleInfo.vue b/docs/.vuepress/theme/components/ArticleInfo.vue new file mode 100644 index 0000000..a1f0c78 --- /dev/null +++ b/docs/.vuepress/theme/components/ArticleInfo.vue @@ -0,0 +1,131 @@ +<template> + <div class="articleInfo-wrap"> + <div class="articleInfo"> + <ul class="breadcrumbs"> + <li> + <router-link to="/" class="iconfont icon-ai-home icon-home" /> + </li> + <li v-if="articleInfo.classify1"> + <router-link v-if="articleInfo.cataloguePermalink" :to="articleInfo.cataloguePermalink">{{articleInfo.classify1}}</router-link> + <span v-else>{{articleInfo.classify1}}</span> + </li> + <li v-if="articleInfo.classify2"> + <span>{{articleInfo.classify2}}</span> + </li> + </ul> + <div class="info"> + <div class="author iconfont icon-touxiang" v-if="articleInfo.author"> + <a :href="articleInfo.author.href" v-if="articleInfo.author.href" target="_blank" title="作者">{{articleInfo.author.name}}</a> + </div> + <div class="date iconfont icon-ic_calendar" v-if="articleInfo.date"> + <a href="javascript:;" title="创建时间">{{articleInfo.date}}</a> + </div> + </div> + </div> + </div> +</template> + +<script> +export default { + data() { + return { + articleInfo: {} + } + }, + mounted() { + this.articleInfo = this.getPageInfo() + }, + watch: { + $route: { + handler:function(){ + this.articleInfo = this.getPageInfo() + } + } + }, + methods: { + getPageInfo() { + const pageInfo = this.$page + const { relativePath } = pageInfo + const { catalogue } = this.$themeConfig.sidebar + const relativePathArr = relativePath.split('/') + const classifyArr = relativePathArr[0].split('.') + const classify1 = classifyArr.length > 1 ? classifyArr[1] : classifyArr[0] // 文章一级分类名称 + const classify2 = relativePathArr.length > 2 ? relativePathArr[1].split('.')[1] : undefined// 文章二级分类名称 + const cataloguePermalink = catalogue ? catalogue[classify1] : undefined// 目录页永久链接 + const author = this.$frontmatter.author || this.$themeConfig.author // 作者 + let date = pageInfo.frontmatter.date || pageInfo.lastUpdated // 文章创建时间 + date = Date.parse(date) ? dateFormat(new Date(date)) : undefined + return { + date, + classify1, + classify2, + cataloguePermalink, + author + } + } + } +} + +// 日期格式化 +function dateFormat(date) { + if (!(date instanceof Date)) { + date = new Date(date) + } + return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())}` +} + +// 小于10补0 +function zero(d){ + return d.toString().padStart(2,'0') +} +</script> + +<style lang='stylus' scoped> + +.articleInfo-wrap + margin-bottom -3.6rem + padding-bottom 0 + color gray + .articleInfo + overflow hidden + .breadcrumbs + margin 0 + padding 0 + overflow hidden + display inline-block + @media (max-width: 960px) + width 100% + li + list-style-type none + float left + padding-right 5px + &:after + content '→' + margin-left: 5px; + &:last-child + &:after + content '' + .icon-home + color gray + text-decoration none + &:hover + color $accentColor + .info + float right + line-height 32px + @media (max-width: 960px) + float left + div + float left + margin-left 20px + font-size .9rem + @media (max-width: 960px) + margin 0 20px 0 0 + &:before + margin-right 3px + a + color gray + &.date + a + text-decoration none +</style> diff --git a/docs/.vuepress/theme/components/Home.vue b/docs/.vuepress/theme/components/Home.vue index 4136dde..eeccfe9 100644 --- a/docs/.vuepress/theme/components/Home.vue +++ b/docs/.vuepress/theme/components/Home.vue @@ -106,7 +106,9 @@ </aside> </div> - <div class="footer" v-if="data.footer">Copyright © {{ data.footer.year }}-{{ new Date().getFullYear() }} {{ data.footer.content }}</div> + <div class="footer" v-if="data.footer"> + Copyright © {{ data.footer.year }}-{{ new Date().getFullYear() }} {{ data.footer.content }} + </div> </div> </template> @@ -218,8 +220,6 @@ export default { </script> <style lang="stylus"> -// @import '//at.alicdn.com/t/font_1678482_k8ld4et1y2f.css' - .slide-banner margin-top: 2rem; .banner-wrapper @@ -438,7 +438,9 @@ body .main-wrapper{ .image_title { width: 11rem; height: 11rem; - transition: all .3s; + // transition: all .3s; + animation: heart 1.2s ease-in-out 0s infinite alternate; + animation-play-state: paused } h2 { @@ -447,20 +449,34 @@ body .main-wrapper{ border-bottom: none; padding-bottom: 0; color: lighten($textColor, 10%); + transition: all 1.2s; } p { color: lighten($textColor, 25%); + transition: all 1.2s; } } .feature:hover { .image_title { - transform:scale(1.1,1.1) + // transform:scale(1.1,1.1); + animation-play-state: running; + } + h2{ + color: lighten($textColor, 80%); + } + p{ + color: lighten($textColor, 25%); } } } +@keyframes heart{ + from{transform:translate(0,0)} + to{transform:translate(0,8px)} +} + .footer { padding: 2.5rem; margin-bottom 2rem; diff --git a/docs/.vuepress/theme/components/Page.vue b/docs/.vuepress/theme/components/Page.vue index 3f5b765..dcd7fe4 100644 --- a/docs/.vuepress/theme/components/Page.vue +++ b/docs/.vuepress/theme/components/Page.vue @@ -1,8 +1,10 @@ <template> <main class="page"> <slot name="top" /> + + <ArticleInfo class="theme-default-content" v-if="isArticle()" /> - <component v-if="pageComponent" :is="pageComponent" /> + <component class="theme-default-content" v-if="pageComponent" :is="pageComponent" /> <Content class="theme-default-content" /> <PageEdit /> @@ -18,17 +20,23 @@ <script> import PageEdit from '@theme/components/PageEdit.vue' import PageNav from '@theme/components/PageNav.vue' +import ArticleInfo from './ArticleInfo.vue' import Catalogue from './Catalogue.vue' import Article from './Article.vue' import Timeline from './Timeline.vue' export default { - components: { PageEdit, PageNav, Catalogue, Article, Timeline}, + components: { PageEdit, PageNav, ArticleInfo, Catalogue, Article, Timeline}, props: ['sidebarItems'], computed: { pageComponent () { return this.$frontmatter.pageComponent ? this.$frontmatter.pageComponent.name : false } + }, + methods: { + isArticle() { + return this.$frontmatter.article !== false + } } } </script> diff --git a/docs/00.目录页/04.更多.md b/docs/00.目录页/04.更多.md new file mode 100644 index 0000000..ae59bef --- /dev/null +++ b/docs/00.目录页/04.更多.md @@ -0,0 +1,16 @@ +--- +pageComponent: + name: Catalogue + data: + key: 04.更多 + imgUrl: /img/other.png + description: 学习、面试、在线工具等更多文章和页面 + +title: 更多 +date: 2020-03-11 21:50:56 +permalink: /more +sidebar: false +article: false +comment: false +editLink: false +--- \ No newline at end of file diff --git a/docs/01.前端/25.JavaScript文章/02.new命令原理.md b/docs/01.前端/25.JavaScript文章/02.new命令原理.md index 70cf83e..15ef304 100644 --- a/docs/01.前端/25.JavaScript文章/02.new命令原理.md +++ b/docs/01.前端/25.JavaScript文章/02.new命令原理.md @@ -2,6 +2,9 @@ title: new命令原理 date: 2019-12-25 14:27:01 permalink: /pages/8143cc480faf9a11 +author: + name: '阮一峰' + href: 'https://github.com/xugaoyi' --- # new命令原理 diff --git a/docs/05.关于/01.关于.md b/docs/05.关于/01.关于.md index 485a1c5..8360931 100644 --- a/docs/05.关于/01.关于.md +++ b/docs/05.关于/01.关于.md @@ -1,6 +1,6 @@ --- title: 关于 -date: 2019-12-25 ‏‎14:27:01 +date: 2019-12-25 14:27:01 permalink: /about sidebar: false article: false diff --git a/docs/index.md b/docs/index.md index e6bb217..b801f28 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,7 +18,7 @@ features: imgname: /img/other.png aside: avatar: https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200103123203.jpg - iconfontCssFile: //at.alicdn.com/t/font_1678482_u4nrnp8xp6g.css # 阿里矢量图标库在线css文件地址 + # iconfontCssFile: //at.alicdn.com/t/font_1678482_u4nrnp8xp6g.css # 阿里图标库在线css文件地址,对于原本没有的图标可以另外添加 icons: # - iconClass: icon-QQ # title: QQ @@ -33,7 +33,7 @@ aside: title: 听音乐 link: https://music.163.com/#/playlist?id=755597173 blogger: - name: Evan Xu + name: Evan xu slogan: 前端界的小学生 footer: year: 2019 diff --git a/utils/sidebar.js b/utils/sidebar.js index 6aa1470..5a9a561 100644 --- a/utils/sidebar.js +++ b/utils/sidebar.js @@ -10,15 +10,21 @@ const matter = require('gray-matter'); // FrontMatter解析器 const docsRoot = path.join(__dirname, '..', 'docs'); // docs文件路径 const sidebarPath = path.join(__dirname, '..', 'docs', '.vuepress', 'config', 'sidebar-auto.js'); // 侧边栏js文件要保存的路径 - +const catalogueData = {}; // 目录页数据 // sidebar-auto.js代码模板 const sidebarTemplate = ` -// 侧边栏自动生成 // 最里面的数组,格式:[<path>, <title>, <permalink>],其中permalink并非侧边栏所需,而是提供给其他页面使用 +/** + * 自动生成的侧边栏 + * 说明: + * 1. 最里边的数组,格式:[<path>, <title>, <permalink>],其中permalink并非侧边栏所需,而是提供给其他页面(目录页)使用 + * 2. catalogue属性是提供给面包屑所需的目录页数据 + */ module.exports = { <% for (let item of sidebarData) { %> - "<%- item.path %>": <%- JSON.stringify(item.sidebarArr) %>, + "<%- item.path %>": <%- JSON.stringify(item.sidebarArr) %>, <% } %> + "catalogue": <%- JSON.stringify(catalogueData) %> }`; main(); @@ -43,7 +49,7 @@ function main() { }) }) - const sidebarDataTem = ejs.render(sidebarTemplate, { sidebarData }); + const sidebarDataTem = ejs.render(sidebarTemplate, { sidebarData, catalogueData }); fs.writeFileSync(sidebarPath, sidebarDataTem); // 同步写入文件, 参数一:写入到的文件, 参数二:写入的数据 logger.info('侧边栏生成成功!') } @@ -103,6 +109,12 @@ function mapTocToSidebar(root, prefix){ const { data } = matter(contentStr) // 解析出front matter数据 const permalink = data.permalink || '' sidebar[order] = [prefix + filename, title, permalink ]; // [<路径>, <文件标题>, <永久链接>] + + // 目录页和永久链接,用于给面包屑提供数据 + const pageComponent = data.pageComponent + if (pageComponent && pageComponent.name && pageComponent.name === "Catalogue") { + catalogueData[title] = permalink + } } })