├── .github ├── ISSUE_TEMPLATE.md └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── _config.yml ├── _travis.sh ├── gulpfile.js ├── languages ├── default.yml ├── ja.yml ├── zh-CN.yml └── zh-TW.yml ├── layout ├── _partial │ ├── _head-sections │ │ ├── IE.ejs │ │ ├── seo.ejs │ │ ├── style.ejs │ │ └── title.ejs │ ├── archive.ejs │ ├── article-meta.ejs │ ├── article.ejs │ ├── busuanzi.ejs │ ├── copyright.ejs │ ├── footer.ejs │ ├── gallery.ejs │ ├── head.ejs │ ├── header.ejs │ ├── nav.ejs │ ├── pagination.ejs │ ├── reward.ejs │ ├── script.ejs │ ├── sidebar.ejs │ └── toc.ejs ├── _vendor │ ├── analytics │ │ ├── baidu.ejs │ │ ├── cnzz.ejs │ │ ├── google.ejs │ │ ├── index.ejs │ │ └── tencent.ejs │ ├── baidu_sitemap.ejs │ └── comments │ │ ├── changyan.ejs │ │ ├── disqus.ejs │ │ ├── gitalk.ejs │ │ ├── gitment.ejs │ │ ├── index.ejs │ │ ├── livere.ejs │ │ ├── utterances.ejs │ │ ├── uyan.ejs │ │ └── valine.ejs ├── _widget │ ├── archive.ejs │ ├── category.ejs │ ├── friends.ejs │ ├── notification.ejs │ ├── search.ejs │ ├── social.ejs │ ├── stick.ejs │ └── tagcloud.ejs ├── archive.ejs ├── category.ejs ├── index.ejs ├── layout.ejs ├── page.ejs ├── post.ejs └── tag.ejs ├── package-lock.json ├── package.json ├── scripts ├── helper.js └── process.js └── source ├── assets ├── highlight.pack.js ├── tagcanvas.min.js └── valine.min.js ├── css ├── bootstrap.min.css ├── font-awesome.min.css ├── less │ ├── _highlight.less │ ├── _mixins.less │ ├── _reward.less │ ├── _scrollbar.less │ ├── _style.less │ ├── _timeline.less │ └── _variable.less └── style.css ├── favicon.ico ├── fonts ├── FontAwesome.otf ├── fontawesome-webfont.eot ├── fontawesome-webfont.svg ├── fontawesome-webfont.ttf ├── fontawesome-webfont.woff └── fontawesome-webfont.woff2 ├── img ├── avatar.jpg ├── branding.png ├── head-img.jpg ├── loading.gif ├── reward-wepay.jpg ├── timeline-clock.gif ├── timeline-dot.gif └── timeline.gif └── js ├── app.js └── search.js /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | ### 该问题是怎么引起的? 7 | 8 | ### 重现步骤 9 | 10 | ### 报错信息 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | --- 5 | 6 | > 请先确认以下情况: 7 | 8 | - [ ] 拉取主题最新代码,问题依然存在。 9 | - [ ] 已经搜索 Issues 历史记录,并阅读过:[主题常见问题](https://github.com/shenliyang/hexo-theme-snippet#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) 10 | - [ ] 提 Issues 前建议先阅读:[《你不知道的提 Issues 技巧》](https://github.com/shenliyang/hexo-theme-snippet#你不知道的提Issues技巧) 11 | 12 | > 为了能精准定位问题,希望尽量提供一下信息 13 | 14 | 1. 相关问题截图 15 | 2. 有线上环境,建议提供一下网址 16 | 3. 如果是兼容 bug,建议提供下设备型号,浏览器名称及版本 17 | 18 | ------- **如果是意见或建议,可以忽略以内容** ------------ 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | --- 5 | 6 | **Is your feature request related to a problem? Please describe.** 7 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 8 | 9 | **Describe the solution you'd like** 10 | A clear and concise description of what you want to happen. 11 | 12 | **Describe alternatives you've considered** 13 | A clear and concise description of any alternative solutions or features you've considered. 14 | 15 | **Additional context** 16 | Add any other context or screenshots about the feature request here. 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | Thumbs.db 3 | ehthumbs.db 4 | *.log 5 | node_modules/ 6 | public/ 7 | .deploy*/ 8 | .idea/ 9 | .vscode/ -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "11.12.0" 4 | 5 | sudo: false 6 | 7 | #cache 8 | cache: 9 | directories: 10 | - "node_modules" 11 | 12 | notifications: 13 | # 钉钉机器人消息推送部署结果 14 | webhooks: 15 | urls: 16 | - https://oapi.dingtalk.com/robot/send?access_token=${DINGDING_ACCESS_TOKEN} 17 | on_success: change 18 | on_failure: always 19 | 20 | # 邮件发送部署结果通知 21 | email: 22 | recipients: 23 | - snippet@91h5.cc 24 | on_success: change 25 | on_failure: always 26 | 27 | # S: Build Lifecycle 28 | before_install: 29 | - sudo apt-get install libnotify-bin 30 | 31 | install: 32 | - npm install 33 | # - gem install travis 34 | # - travis login --pro --github-token ${GH_TOKEN} 35 | 36 | before_script: 37 | - export TZ='Asia/Shanghai' 38 | - npm install -g gulp 39 | - chmod +x _travis.sh 40 | 41 | script: 42 | - hexo clean && hexo g 43 | - gulp 44 | 45 | after_success: 46 | 47 | # - LAST_BUILD_NUMBER=68 48 | # - for i in $(seq 1 $LAST_BUILD_NUMBER ); do travis logs $i --delete --force ; done 49 | after_script: 50 | - ./_travis.sh 51 | 52 | # E: Build LifeCycle 53 | branches: 54 | only: 55 | - dev 56 | 57 | # - global env 58 | env: 59 | global: 60 | - GH_REF: github.com/shenliyang/shenliyang.github.io.git 61 | - GITEE_REF: gitee.com/shenliyang/shenliyang.git 62 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Snippet 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.md: -------------------------------------------------------------------------------- 1 | # hexo-theme-snippet 2 | 3 | Snippet 简洁而不简单,也许是一款你寻找已久 hexo 主题。 4 | 5 | 如果本主题也是你喜欢的菜,请动动手指 [Star](https://github.com/shenliyang/hexo-theme-snippet/stargazers) 支持一下 6 | 7 | [![Build Status](https://api.travis-ci.com/shenliyang/hexo-theme-snippet.svg?branch=develop)](https://travis-ci.com/shenliyang/hexo-theme-snippet) 8 | [![Read the Docs](https://img.shields.io/badge/docs-complete-brightgreen)](https://github.com/shenliyang/hexo-theme-snippet/blob/master/README.md) 9 | [![mnt-image](https://img.shields.io/maintenance/yes/2030.svg)](../../commits/master) 10 | [![codebeat badge](https://codebeat.co/badges/6ef2dcd2-af90-40e0-9628-ac689441f774)](https://codebeat.co/projects/github-com-shenliyang-hexo-theme-snippet-master) 11 | [![GitHub stars](https://img.shields.io/github/stars/shenliyang/hexo-theme-snippet.svg)](https://github.com/shenliyang/hexo-theme-snippet/stargazers) 12 | [![GitHub forks](https://img.shields.io/github/forks/shenliyang/hexo-theme-snippet.svg)](https://github.com/shenliyang/hexo-theme-snippet/network) 13 | [![hexo version](https://img.shields.io/badge/hexo-%3E%3D%203.0-blue.svg)](http://hexo.io) 14 | [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/shenliyang/hexo-theme-snippet/blob/master/LICENSE) 15 | 16 | [主题 Demo 戳这里](http://shenliyang.github.io?rf=gh-demo) 17 | 18 | ![hexo-theme-snippet](https://hexo-theme-snippet-1251680922.cos.ap-beijing.myqcloud.com/img/snippet-screenshots1000.jpg "Snippet主题") 19 | 20 | ## 主题特点 21 | 22 | - [x] 原生 JavaScript 实现,去 jQuery 化 23 | - [x] 样式支持 CSS 预处理器 Less,方便主题自定义 24 | - [x] 文章过期提醒功能 25 | - [x] 文章阅读进度条 26 | - [x] 网站公告功能 27 | - [x] 首页图片懒加载 28 | - [x] 首页文章缩略图自动检索文章内图片,支持自动随机图片 29 | - [x] 主题支持响应式 30 | - [x] 支持 3D 云标签 31 | - [x] 支持文章推送和文章打赏 32 | - [x] 站内本地搜索和谷歌搜索 33 | - [x] 支持多个第三方评论系统 34 | - [x] 支持网站统计和不蒜子访客统计 35 | - [x] 移动端的简洁设计 36 | - [x] 支持代码高亮并支持自定义高亮样式 37 | - [x] 支持 Shell 脚本通过 Travis CI 自动化部署 Hexo 博客 38 | - [x] 支持 Hexo 自动化部署结果发送邮件和实时推送到钉钉 39 | 40 | # **基础篇** 41 | 42 | > 如果你在此之前使用的是 `Hexo 2.x` 版本,为了避免未知的错误,请备份好数据,或者建立新的博客目录 43 | 44 | > "主题目录" => `themes\hexo-theme-snippet`, "Hexo 根目录" => 项目主目录; 45 | > "主题配置" => `themes\hexo-theme-snippet\_config.yml`, "Hexo 配置" => 项目主目录下`_config.yml` 46 | 47 | ### 1. 环境搭建 48 | 49 | 需要`Node.js` 环境、`Git` 环境以及 `Hexo` ,如果你尚未安装或者不了解 `Hexo`,请参考 [官方教程](https://hexo.io/zh-cn/docs/index.html) 进行了解以及安装。如果需要构建工具请自行安装,或使用本主题的 Gulp 方式。 50 | 51 | ### 2. 下载主题 52 | 53 | 有两种方式获取本主题--下载 `*.zip` 文件和通过 `git`方式: 54 | 55 | 1. 下载 [Snippet 主题](https://github.com/shenliyang/hexo-theme-snippet) 文件解压后放在 `themes` 目录下,和博客中的 landscape 为同级目录 56 | 57 | 2. Git 方式,在 Hexo 根目录执行: 58 | 59 | ```bash 60 | git clone git://github.com/shenliyang/hexo-theme-snippet.git themes/hexo-theme-snippet 61 | ``` 62 | 63 | ### 3. 安装主题插件 64 | 65 | 因为 **hexo-theme-snippet** 使用了 `ejs` 模版引擎 、 `Less` CSS 预编译语言以及在官方插件的基础上 66 | 进行功能的开发,以下为必装插件: 67 | 68 | ```bash 69 | npm i hexo-renderer-ejs hexo-renderer-less hexo-deployer-git -S 70 | ``` 71 | 72 | ### 4. 部署主题 73 | 74 | > 如果没有更改过主题源文件,也不需要代码优化可以跳过 1,2,3 步骤 75 | 76 | 1. gulp 打包构建,拷贝主题目录下`package.json`文件到 Hexo 根目录下,然后安装项目的开发依赖。 [Gulp 入门指南](http://www.gulpjs.com.cn/docs/getting-started/) 77 | 78 | ```bash 79 | npm i //安装项目依赖 80 | ``` 81 | 82 | 2. 在 Hexo 根目录下创建一个名为 gulpfile.js 的文件: 83 | 84 | ```bash 85 | require('./themes/hexo-theme-snippet/gulpfile'); 86 | ``` 87 | 88 | 3. 运行 gulp: 89 | 90 | ```bash 91 | gulp 或者 gulp default //执行打包任务 92 | ``` 93 | 94 | 4. 清空 hexo 静态文件和缓存,并重新生成 95 | 96 | ```bash 97 | hexo clean && hexo g //清空缓存并生成静态文件 98 | ``` 99 | 100 | 5. 本地预览,确没有问题再进行发布 101 | 102 | ```bash 103 | hexo s -p 4000 或者 hexo s //启动本地服务默认 104 | ``` 105 | 106 | 6. 当 gulp 执行完成,并提示 `please execute: hexo d` 时,可以进行发布 107 | 108 | ```bash 109 | hexo d 或者 gulp deploy //部署发布 110 | ``` 111 | 112 | ### 5. 更新主题 113 | 114 | 主题可能会不定时优化和更新,更新主题代码: 115 | 116 | ```bash 117 | cd themes/hexo-theme-snippet 118 | git pull 119 | ``` 120 | 121 | # **主题篇** 122 | 123 | ### 1. 主题配置 124 | 125 | ```yaml 126 | 127 | ## menu -- 导航菜单显示{[@page:名字,@url:地址,@icon:图标]} 128 | menu: 129 | - page: home 130 | url: / 131 | icon: fa-home 132 | 133 | ## favicon -- 网站图标位置{@favicon} 134 | favicon: /favicon.ico 135 | 136 | ## rss --rss文件位置{@rss} 137 | rss: /atom.xml 138 | 139 | 140 | # 各个小工具的设置 141 | 142 | ## widgets -- 6个左边小工具{@widgets:[notification,category,archive,tagcloud,friends]} 143 | widgets: 144 | - search 145 | - notification 146 | - social 147 | - category 148 | - archive 149 | - tagcloud 150 | - friends 151 | 152 | # 各个小工具的设置 153 | 154 | ## 搜索 155 | jsonContent: 156 | searchLocal: true // 是否启用本地搜索 157 | searchGoogle: true //是否启用谷歌搜索 158 | posts: 159 | title: true 160 | text: true 161 | content: true 162 | categories: false 163 | tags: false 164 | 165 | ## notification config --网站公告设置,支持 html 和 纯文本 166 | notification: |- 167 |

主题已经上线!欢迎下载或更新~
168 | 主题下载:Snippet主题
169 |


接受贡献,包括不限于提交问题与需求,修复代码。欢迎Pull Request
支持主题:Star一下

170 | 171 | ## 社交设置{@name:社交工具名字,@icon:社交工具图标,@href:设置工具链接} [参考图标](http://fontawesome.io/icons/) 172 | social: 173 | - name: Github 174 | icon: git 175 | href: //github.com/shenliyang 176 | 177 | ## 文章分类设置{@cate_config:{@show_count:是否显示数字,@show_current: 是否高亮当前category}} 178 | cate_config: 179 | show_count: true 180 | show_current: true 181 | 182 | ## 文章归档设置{@arch_config:/*参数参考:https://hexo.io/zh-cn/docs/helpers.html#list-archives*/} 183 | ## 推荐组合方式:[{type: 'monthly',format: 'YYYY年MM月'},{type: 'yearly',format: 'YYYY年'}] 184 | arch_config: 185 | type: 'monthly' 186 | format: 'YYYY年MM月' 187 | show_count: true 188 | order: -1 189 | 190 | ## 标签云设置{/*参数参考:http://www.goat1000.com/tagcanvas-options.php */} 191 | tagcloud: 192 | tag3d: false // 是否启用3D标签云 193 | textColour: '#444' // 字体颜色 194 | outlineMethod: 'block' // 选中模式(outline|classic|block|colour|size|none) 195 | outlineColour: '#FFDAB9' // 选中模式的颜色 196 | interval: 30 // 动画帧之间的时间间隔,值越大,转动幅度越大 197 | freezeActive: true // 选中的标签是否继续滚动 198 | frontSelect: true // 不选标签云后部的标签 199 | reverse: true // 是否反向触发 200 | wheelZoom: false // 是否启用鼠标滚轮 201 | 202 | ## 友链设置{@链接名称:链接地址{@links:[,,,]}} 203 | links: 204 | - Hexo官网: https://hexo.io/zh-cn/ 205 | 206 | 207 | # 主题自定义个性化配置 208 | 209 | ## 网站宣传语{@branding:网站宣传语(不设置显示本地图片)} 210 | branding: 从未如此简单有趣 211 | 212 | ## 设置banner背景图片{@img:自定义图片地址(支持绝对和相对路径),主题默认{"静态背景":"banner.jpg"},{"动态背景":"banner2.jpg"},{"动态星空背景":"banner3.jpg"}} 213 | ## 例如:https://hexo-theme-snippet-1251680922.cos.ap-beijing.myqcloud.com/img/banner|2|3.jpg, 或者 './img/banner-img.jpg'(相对本地资源地址) 214 | banner: 215 | img: https://hexo-theme-snippet-1251680922.cos.ap-beijing.myqcloud.com/img/banner.jpg 216 | 217 | 218 | ## 设置carousel{@img:图片地址,@url:点击跳转链接(默认值:"javascript:")} 219 | carousel: 220 | img: 'img/head-img.jpg' 221 | url: 'javascript:' 222 | 223 | ## 首页列表底部面板{@homePanel: 是否开启} 224 | homePanel: true 225 | 226 | ## 首页文章列表缩略图 227 | ### 加载规则: 自定义文章缩略图(在Front-matter中添加的'img'字段) > 文章内的图片 > defaultImgs(随机获取) > 无图模式列表 228 | 229 | ## 自定义随机图片 230 | defaultImgs: 231 | - http://www.example.jpg //远程图片链接示例 232 | - /img/default-1.jpg //本地图片链接示例 233 | 234 | ### 文章摘要{@摘要显示优先级:自定义摘要 > 自动截取摘要 } 235 | ### 自定义摘要范围{@:截取more之前的内容为摘要} 236 | ### 自动截取摘要{@excerptLength:自动截取文章前多少个字为摘要,不配置默认:120字} 237 | excerptLength: 120 238 | 239 | ## 是否开启文章目录 240 | toc: true 241 | 242 | ## 代码高亮配置{@highlightTheme: 主题名称,(配置暂时不可用,后续开发中…)} 243 | 244 | highlightTheme: default //TODO 245 | 246 | ## 文章过期提醒功能 {@warning:{days:临界天数(默认300天,设置0关闭功能),text:提醒文字/*%d为过期总天数占位符*/}} 247 | warning: 248 | days: 300 249 | text: '本文于%d天之前发表,文中内容可能已经过时。' 250 | 251 | ## 文章内声明{@declaration: {enable:是否开启,title:声明标题,tip:提示内容}} 252 | declaration: 253 | enable: true 254 | title: '转载声明' 255 | tip: |- 256 | 商业转载请联系作者获得授权,非商业转载请注明出处 © Snippet 257 | 258 | ## 文章打赏{@reward: {alipay:支付宝打赏,wepay:微信打赏,tip:打赏提示语; 链接都为空,关闭打赏功能}} 259 | reward: 260 | alipay: '' 261 | wepay: '../img/reward-wepay.jpg' 262 | tip: 赞赏是不耍流氓的鼓励 263 | 264 | 265 | ## 主题评论 266 | 267 | ## utterances评论: 一款基于 GitHub issues 的评论工具; 首先在 github 上进行安装 utterances,访问 [utterances应用程序](https://github.com/apps/utterances);然后在主题内配置 [utterances更多配置](https://utteranc.es/) 268 | utterances: 269 | enable: true 270 | repo: shenliyang/snippet-comment // github仓库名字, 格式为 user-name/repo-name 271 | issueTerm: pathname // 标识issue类型 1. pathname(推荐); 2. url; 3.title; 3. og:title; 4. issue-number 5. specific-term; 272 | issueNumber: 123 // 非必填,当配置 issueTerm = "issue-number"时,需要配置issue号 273 | theme: github-light // 主题配置 1. github-light(推荐); 2. github-dark; 3. preferred-color-scheme; 4. github-dark-orange; 5. icy-dark; 6. dark-blue; 7. photon-dark; 8. boxy-light 274 | label: // 非必填 275 | cdn: // 使用自定义utteranc脚本加载。 非必填,默认:"https://utteranc.es/client.js" 276 | 277 | ### gitment 278 | gitment: 279 | enable: false 280 | owner: 281 | repo: 282 | client_id: 283 | client_secret: 284 | labels: 285 | perPage: 286 | maxCommentHeight: 287 | 288 | ### 来必力 289 | livere: 290 | enable: false 291 | livere_uid: 292 | 293 | ### 友言评论(服务不稳定,经常无法加载) 294 | uyan: 295 | enable: false 296 | uyan_id: 297 | 298 | ### Disqus评论(需要翻墙,或者搭建代理) 299 | disqus: 300 | enable: false 301 | shortname: snippet 302 | count: false 303 | 304 | ### 畅言评论(需要ICP备案) 305 | changyan: 306 | enable: false 307 | appid: 308 | conf: 309 | 310 | ### Valine评论(leancloud需要实名认证) 参考网站: [valine评论](https://valine.js.org/) 311 | valine: 312 | enable: false 313 | appId: 314 | appKey: 315 | placeholder: 说点什么吧 316 | notify: false // 邮件通知 317 | verify: false // 验证码 318 | avatar: mm // avatar头像 319 | meta: nick,mail // 输入框内容,可选值nick,mail,link 320 | pageSize: 10 321 | 322 | ## Gitalk评论 参考网站: [一个基于Github Issue和Preact开发的评论插件](https://gitalk.github.io/) 323 | gitalk: 324 | enable: false 325 | clientID: "" // Github 应用ID 326 | clientSecret: "" // Github 应用密钥 327 | repo: shenliyang.github.io // Github仓库地址 328 | owner: shenliyang // Github 用户名(Github仓库拥有者) 329 | admin: shenliyang // GitHub repository 的所有者和合作者 (对这个 repository 有写权限的用户)可以有一个或多个,如果有多名可使用,例如:admin: admin1,admin2 配置 330 | perPage: 10 // 每次加载的数据大小,最多100 331 | distractionFreeMode: true // 是否启用无干扰模式,类似Facebook评论框的全屏遮罩效果 332 | 333 | // 以下参数主题会默认处理,不需要配置 334 | language // 语言类型,默认为站点配置中选项 335 | id // 页面的唯一标识, 已使用md5对pathname转换生成唯一id处理 336 | 337 | ## 网站访客统计 [不蒜子统计](http://busuanzi.ibruce.info/) 338 | visit_counter: 339 | site: true // 总访问量和访问人数统计 340 | page: true // 文章阅读量统计 341 | 342 | ## 网站访问统计 343 | 344 | ### 网盟CNZZ统计 参考网站: [网盟CNZZ](http://www.umeng.com/) 345 | cnzz_anaylytics: 346 | 347 | ### 百度统计 参考网站: [百度统计](https://tongji.baidu.com/) 348 | baidu_anaylytics: 349 | 350 | ### 谷歌统计 参考网站:[谷歌统计](https://www.google-analytics.com/) 351 | google_anaylytics: 352 | 353 | ### 腾讯分析 参考网站:[腾讯分析](http://ta.qq.com/) 354 | tencent_analytics: 355 | 356 | ### 百度站点认证 357 | baidu-site-verification: 358 | 359 | ### 百度自动推送(@baidu_push: 是否启用百度自动推送) 参考网站: [百度站长资源](https://ziyuan.baidu.com/college/courseinfo?id=267&page=2#h2_article_title18) 360 | baidu_push: 361 | 362 | ## ICON配置 (不配则启用本地Font Icon) 363 | fontAwesome: //cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css 364 | 365 | ## 网站主题配置 366 | since: 2017 //建站时间 367 | beian: '京ICP备04000001号' //网站备案号 368 | robot: 'all' //控制搜索引擎的抓取和索引编制行为,默认为all 369 | version: 1.3.0 //当前主题版本号 370 | ``` 371 | 372 | ### 主题使用技巧及功能扩展 373 | 374 | 1. 修改新增文章 Front-matter 模板,修改`scaffolds`目录下的`post.md`模板 375 | > 模板文件内部不要保留注释部分,关键词后面请使用英文冒号 376 | 377 | ```yml 378 | --- 379 | title: {{ title }} // 标题 380 | date: {{ date }} // 时间 381 | categories: ['分类1','分类2'] // 分类 382 | tags: ['标签1','标签2'] // 标签 383 | comments: false // 是否开启评论 384 | img: // 自定义缩略图 385 | --- 386 | ``` 387 | 388 | 2. 启用站内本地搜索功能 389 | 390 | 如果要使用本地站点搜索,必须安装插件 hexo-generator-json-content 来创建本地搜索 json 文件 391 | 392 | ```bash 393 | npm i hexo-generator-json-content@2.2.0 -S 394 | ``` 395 | 396 | 然后修改主题配置\_config.yml 文件下`jsonContent`相关参数。 397 | 398 | # **提升篇** 399 | 400 | ## 1. Travis CI 介绍 401 | 402 | CI 即持续集成系统。对个人而言,就是让你的代码在提交到远程(这里是 GitHub),立即自动编译,自动化测试、自动部署等。 403 | 404 | 不需要在担心更换电脑时,还要从新部署环境的问题,只要你能向远程推送文章,其他的事情就都可以交给 Travis CI 处理就 ok 了。 405 | 406 | ## 2. Travis CI 使用 407 | 408 | > 默认前提是已经通过 Github 进行授权登录 Travis 网站,并关联了 GitHub 上的仓库和相关配置。 409 | 410 | 1. 拷贝主题下的`gulpfile.js` `travis.yml` `travis.sh` 到项目根目录 411 | 412 | 2. 配置 travis.yml 文件 413 | 414 | ```yml 415 | language: node_js #使用Node语言环境 416 | node_js: stable #安装稳定版Node 417 | 418 | sudo: false 419 | 420 | #cache 启用缓存,加快构建速度 421 | cache: 422 | directories: 423 | - "node_modules" 424 | 425 | notifications: #启用通知 426 | email: 427 | recipients: 428 | - snippet@aliyun.com #接收构建消息的邮件 不需要可设置为false 429 | on_success: never #部署成功时,可设置alway never change 430 | on_failure: always #部署失败时,同上 431 | 432 | # S: Build Lifecycle 433 | 434 | before_install: 435 | - sudo apt-get install libnotify-bin #支持linux桌面提醒库 436 | 437 | install: 438 | - npm install #安装依赖 439 | 440 | before_script: 441 | - export TZ='Asia/Shanghai' #设置时区 442 | - npm install -g gulp #全局安装Gulp 443 | - chmod +x _travis.sh #授权脚本执行权限 444 | 445 | script: 446 | - hexo clean && hexo g #清除缓存并生成静态文件 447 | - gulp #执行gulp任务 448 | 449 | after_success: #执行成功时(以后扩展功能使用) 450 | 451 | after_script: 452 | - ./_travis.sh #执行部署脚本 453 | # E: Build LifeCycle 454 | 455 | branches: 456 | only: 457 | - dev #需要监听部署的分支 458 | env: 459 | global: 460 | - GH_REF: github.com/shenliyang/shenliyang.github.io.git #更改为自己git地址 461 | ``` 462 | 463 | 3. 提交代码到 Github,实现自动部署 464 | 4. 当 `.travis.yml `配置文件修改完成后,将其提交到远程仓库的 hexo 分支下,此时如果之前的配置一切 ok,我们应该能在 Travis CI 的博客项目主页页面中看到自动构建已经在开始执行了。上面会显示出构建过程中的日志信息及状态等。 465 | 466 | ## 3. 主题开发 467 | 468 | Gulp 执行启用主题开发模式 469 | 470 | ```bash 471 | gulp dev 472 | ``` 473 | 474 | 会监听样式 less 或者 JS 文件的变动。然后执行上面的【主题发布】即可。 475 | 476 | ### 运行预览 477 | 478 | ```bash 479 | hexo clean && hexo g && hexo s -p 4000 480 | ``` 481 | 482 | 监听 4000 端口,使用浏览器打开地址`http://localhost:4000`进行预览。 483 | 484 | # **其他** 485 | 486 | ## 感谢 487 | 488 | 在设计这款主题的时候参考了好多主题和博客的设计和创意,深表感谢! 489 | 490 | ## 鼓励 491 | 492 | **如果觉得本主题还不错,您的支持和鼓励才是后续更新最大的动力,== 欢迎 [Star](https://github.com/shenliyang/hexo-theme-snippet/stargazers)下 ==** 493 | 494 | ![Stargazers over time](https://starchart.cc/shenliyang/hexo-theme-snippet.svg) 495 | 496 | ## 宗旨 497 | 498 | 主题宗旨:**致力主题简洁轻量,配置方便开箱即用**,该主题项目会持续维护和更新。 499 | 500 | ## 贡献 501 | 502 | 接受各种形式的贡献,包括但不限于提交问题或需求,修复代码。 503 | 欢迎大家提 Issue 或者 Pull Request。 504 | 505 | > Hexo 框架追求的是快速、简洁,高效。喜欢绚丽,添加各种功能,折腾的朋友,建议移步至:[wordpress 官网](https://cn.wordpress.org/) 506 | 507 | ## 你不知道的提 Issues 技巧 508 | 509 | > 强烈推荐阅读 [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way)、[《如何向开源社区提问题》](https://github.com/seajs/seajs/issues/545) 和 [《如何有效地报告 Bug》](http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html)、[《如何向开源项目提交无法解答的问题》](https://zhuanlan.zhihu.com/p/25795393),更好的问题更容易获得帮助。 510 | 511 | \* 已阅读以上文章,并知晓,可以 [提 Issues](https://github.com/shenliyang/hexo-theme-snippet/issues/new) 了。 512 | 513 | ## 常见问题 514 | 515 | #### 1. 搜索功能不能用,content.json 文件找不到? 516 | 517 | 需要安装 hexo-generator-json-content 插件: 518 | 519 | ```bash 520 | npm i hexo-generator-json-content@2.2.0 -S 521 | ``` 522 | 523 | #### 2. 谷歌搜索没有响应? 524 | 525 | 如果使用谷歌搜索没有响应,确定是否已经科学上网 526 | 527 | #### 3. 怎么设置首页文章缩略图自动检索文章内图片? 528 | 529 | 首页文章缩略图加载规则: 自定义文章缩略图 > 自动检索文章内的图片 > defaultImgs(随机获取) > 无图模式列表 530 | 531 | 在`Front-matter`中: 532 | 指定 img 变量 -> 为固定缩略图 533 | 不指定 img 变量 -> 自动检索文章内的图片 534 | 535 | #### 4. 在 url 哪里可以访问到本地静态文件吗? 536 | 537 | 在主题 `source` 目录下新建文件夹,例如: `static`文件夹,然后添加静态资源,例如: xxx.pdf 文件, 访问:_`http://yoursite.com/static/xxx.pdf`_ 538 | 539 | #### 5. 这个主题有分页功能吗? 540 | 541 | 主题已经集成分页功能,在 Hexo 配置中修改 542 | 543 | | 参数 | 描述 | 默认值 | 544 | | -------------- | :---------------------------------: | :----: | 545 | | per_page | 每页显示的文章量 (0 = 关闭分页功能) | 10 | 546 | | pagination_dir | 分页目录 | page | 547 | 548 | #### 6. 为什么右侧小工具标题都为英文呢? 549 | 550 | 可能是您忘记预设网站语言,而启用默认语言了,请先在 Hexo 配置中调整 language 设定 551 | 552 | ```bash 553 | language: zh-CN 554 | ``` 555 | 556 | #### 7. 关于 Hexo 标签和分类方法的分歧 557 | 558 | > 只有文章支持分类和标签,您可以在 Front-matter 中设置。在其他系统中,分类和标签听起来很接近,但是在 Hexo 中两者有着明显的差别:分类具有顺序性和层次性,也就是说 `Foo, Bar` 不等于 `Bar, Foo`;而标签没有顺序和层次。 559 | 560 | 如果您有过使用 WordPress 的经验,就很容易误解 Hexo 的分类方式。WordPress 支持对一篇文章设置多个分类,而且这些分类可以是同级的,也可以是父子分类。但是 Hexo 不支持指定多个同级分类。下面的指定方法: 561 | 562 | ```bash 563 | categories: 564 | - Diary 565 | - Life 566 | ``` 567 | 568 | 会使分类 Life 成为 Diary 的子分类,而不是并列分类。因此,有必要为您的文章选择尽可能准确的分类。 569 | 570 | Hexo 官方文档: [分类方法的分歧](https://hexo.io/zh-cn/docs/front-matter#分类和标签) 571 | 572 | #### 8. tags 以及 categories 页面显示不正确,不能访问,显示 404? 573 | 574 | 当使用主题访问,域名+/tags 或 域名+ /categories 若访问 404,是正常情况的。因为这些路径本不属于主题或者 Hexo 框架的一部分。而是由用户主动新建页面扩展而来。 575 | 576 | 可以新建页面,比如:tags 和 categories,按以下命令格式: 577 | 578 | ```bash 579 | hexo new page tags 和 hexo new page categories 580 | ``` 581 | 582 | 当使用主题访问,域名+/tags 或 域名+ /categories 若访问 404,是正常情况的。因为这些路径本不属于主题或者 Hexo 框架的一部分。而是由用户主动新建页面扩展而来。 583 | 584 | 可以新建页面,比如:tags 和 categories,按以下命令格式: 585 | 586 | ```bash 587 | hexo new page tags 和 hexo new page categories 588 | ``` 589 | 590 | > 没有找到你需要的问题解决方案,建议阅读[《你不知道的提 Issues 技巧》](https://github.com/shenliyang/hexo-theme-snippet#你不知道的提Issues技巧) 再提 Issues。 591 | 592 | ## 版本更新日志 593 | 594 | - 增加 Gitalk 评论系统 595 | - 增加博客自动化部署结果实时推送到手机钉钉上,第一时间了解部署情况 596 | 597 | 自动化部署结果通知示例: 598 | 599 | ![自动化部署结果通知示例](https://s2.ax1x.com/2019/03/06/kvnejs.jpg) 600 | 601 | ## License 602 | 603 | [MIT License](/LICENSE) 604 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # --------------------------------------------------------------- 2 | # Site Information And Theme Configuration Settings 3 | # language: zh-CN 4 | # --------------------------------------------------------------- 5 | 6 | ## menu 7 | menu: 8 | - page: home 9 | url: / 10 | icon: 11 | - page: 前端 12 | url: /categories/前端/ 13 | icon: 14 | - page: 后端 15 | url: /categories/后端/ 16 | icon: 17 | - page: 工具 18 | url: /categories/工具/ 19 | icon: 20 | - page: 时间轴 21 | url: /archives/ 22 | icon: 23 | 24 | ## favicon 25 | favicon: /favicon.ico 26 | 27 | ## Feed 28 | rss: /atom.xml 29 | 30 | ## Carousel 31 | carousel: 32 | img: "./img/head-img.jpg" 33 | url: "https://promotion.aliyun.com/ntms/act/qwbk.html?userCode=xs0pypd2" 34 | 35 | # 各个小工具的设置 36 | 37 | ## widgets 38 | widgets: 39 | - search 40 | - notification 41 | - social 42 | - category 43 | - archive 44 | - tagcloud 45 | - friends 46 | 47 | ## 搜索 48 | jsonContent: 49 | searchLocal: true 50 | searchGoogle: false 51 | posts: 52 | title: true 53 | text: true 54 | content: true 55 | categories: false 56 | tags: false 57 | 58 | ## 网站公告设置 59 | notification: |- 60 |

61 | 主题下载:Snippet主题
62 | 主题使用:常见使用问题
63 | 支持主题:Star一下 64 |

65 | 66 | ## 社交设置 67 | social: 68 | - name: Github 69 | icon: git 70 | href: //github.com/shenliyang 71 | - name: 邮箱 72 | icon: envelope-o 73 | href: mailto:snippet@aliyun.com 74 | - name: 联系QQ 75 | icon: qq 76 | href: / 77 | - name: 微信 78 | icon: weixin 79 | href: / 80 | - name: QQ群 81 | icon: users 82 | href: / 83 | - name: RSS 84 | icon: feed 85 | href: /atom.xml 86 | 87 | ## 文章分类设置 88 | cate_config: 89 | show_count: true 90 | show_current: true 91 | 92 | ## 文章归档设置 93 | arch_config: 94 | type: "monthly" 95 | format: "YYYY年MM月" 96 | show_count: true 97 | order: -1 98 | 99 | ## 标签云设置 100 | tagcloud: 101 | tag3d: false 102 | textColour: "#444" 103 | outlineMethod: "block" 104 | outlineColour: "#FFDAB9" 105 | interval: 30 106 | freezeActive: true 107 | frontSelect: true 108 | reverse: true 109 | wheelZoom: false 110 | 111 | ## 友链设置 112 | links: 113 | - Hexo官网: https://hexo.io/zh-cn/ 114 | 115 | # 主题自定义个性化配置 116 | 117 | ## 网站宣传语 118 | branding: 119 | 120 | ## 设置banner背景图片 121 | banner: 122 | img: https://hexo-theme-snippet-1251680922.cos.ap-beijing.myqcloud.com/img/banner.jpg 123 | 124 | ## 首页列表底部面板 125 | homePanel: true 126 | 127 | ## 缩略图自定义随机图片 128 | defaultImgs: 129 | - 130 | 131 | ## 截取文章首页描述字数 132 | excerptLength: 120 133 | 134 | ## 是否开启文章目录 135 | toc: true 136 | 137 | ## 代码高亮配置 138 | highlightTheme: 139 | 140 | ## bootstrap配置 141 | bootstrap: 142 | 143 | ## ICON配置 144 | fontAwesome: 145 | 146 | ## 文章过期提醒功能 147 | warning: 148 | days: 300 149 | text: "本文于%d天之前发表,文中内容可能已经过时。" 150 | 151 | ## 文章内声明 152 | declaration: 153 | enable: true 154 | title: "转载声明" 155 | tip: |- 156 | 商业转载请联系作者获得授权,非商业转载请注明出处 © Snippet 157 | 158 | ## 文章打赏 159 | reward: 160 | alipay: "" 161 | wepay: "" 162 | tip: 赞赏是不耍流氓的鼓励 163 | 164 | ## 主题评论 165 | 166 | ## utterances评论 167 | utterances: 168 | enable: true 169 | repo: shenliyang/snippet-comment 170 | issueTerm: pathname 171 | issueNumber: 172 | theme: github-light 173 | label: 174 | cdn: 175 | 176 | ## Valine评论 177 | valine: 178 | enable: false 179 | appId: xOKV9J4UeQAtVkvnJC7Kq2Jn-gzGzoHsz 180 | appKey: erIpQac4azoCmgfBB7Dl9maa 181 | placeholder: 说点什么吧 182 | notify: false 183 | verify: true 184 | avatar: mm 185 | meta: nick,mail 186 | pageSize: 10 187 | 188 | ### 畅言评论(需要ICP备案) 189 | changyan: 190 | enable: false 191 | appid: 192 | conf: 193 | 194 | ### 来必力 195 | livere: 196 | enable: false 197 | livere_uid: MTAyMC8zMzA1MS85NjEz 198 | 199 | ## Gitalk评论 200 | gitalk: 201 | enable: false 202 | clientID: 203 | clientSecret: 204 | repo: 205 | owner: 206 | admin: 207 | perPage: 208 | distractionFreeMode: true 209 | 210 | ### Disqus评论 211 | disqus: 212 | enable: false 213 | shortname: snippet 214 | count: false 215 | 216 | ### gitment评论(长期不更新,不建议使用) 217 | gitment: 218 | enable: false 219 | owner: 220 | repo: 221 | client_id: 222 | client_secret: 223 | perPage: 10 224 | 225 | ### 友言评论(服务不稳定) 226 | uyan: 227 | enable: false 228 | uyan_id: 1966422 229 | 230 | ## 网站访客统计 231 | visit_counter: 232 | site: false 233 | page: false 234 | 235 | ## 网站访问统计分析 236 | 237 | ### 网盟CNZZ统计 238 | cnzz_analytics: 1263868967 239 | 240 | ### 百度统计 241 | baidu_analytics: 242 | 243 | ### 谷歌统计 244 | google_analytics: 245 | 246 | ### 腾讯分析 247 | tencent_analytics: 248 | 249 | ### 百度站点认证 250 | baidu_site_verification: 251 | 252 | ### 百度自动推送 253 | baidu_push: false 254 | 255 | #网站主题配置 256 | since: 2017 257 | beian: 258 | robot: "all" ### 控制搜索引擎的抓取和索引编制行为,默认为all 259 | version: 1.3.0 260 | -------------------------------------------------------------------------------- /_travis.sh: -------------------------------------------------------------------------------- 1 | #-------------------------------------------- 2 | #!/bin/bash 3 | # author:shenliyang 4 | # website:https://github.com/shenliyang 5 | # slogan:梦想还是要有的,万一实现了呢。 6 | #-------------------------------------------- 7 | 8 | #定义时间 9 | time=`date +%Y-%m-%d\ %H:%M:%S` 10 | 11 | #执行成功 12 | function success(){ 13 | echo "success" 14 | } 15 | 16 | #执行失败 17 | function failure(){ 18 | echo "failure" 19 | } 20 | 21 | #默认执行 22 | function default(){ 23 | 24 | git clone https://${GH_REF} .deploy_git 25 | cd .deploy_git 26 | 27 | git checkout master 28 | cd ../ 29 | 30 | mv .deploy_git/.git/ ./public/ 31 | cd ./public 32 | 33 | cat <> README.md 34 | 部署状态 | 集成结果 | 参考值 35 | ---|---|--- 36 | 完成时间 | $time | yyyy-mm-dd hh:mm:ss 37 | 部署环境 | $TRAVIS_OS_NAME + $TRAVIS_NODE_VERSION | window \| linux + stable 38 | 部署类型 | $TRAVIS_EVENT_TYPE | push \| pull_request \| api \| cron 39 | 启用Sudo | $TRAVIS_SUDO | false \| true 40 | 仓库地址 | $TRAVIS_REPO_SLUG | owner_name/repo_name 41 | 提交分支 | $TRAVIS_COMMIT | hash 16位 42 | 提交信息 | $TRAVIS_COMMIT_MESSAGE | 43 | Job ID | $TRAVIS_JOB_ID | 44 | Job NUM | $TRAVIS_JOB_NUMBER | 45 | EOF 46 | 47 | git init 48 | git config user.name "shenliyang" 49 | git config user.email "" 50 | git add . 51 | git commit -m "Update Blog By TravisCI With Build $TRAVIS_BUILD_NUMBER" 52 | # Github Pages 53 | git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master 54 | # Gitee Pages 55 | git push --force --quiet "https://shenliyang:${GITEE_TOKEN}@${GITEE_REF}" master:master 56 | 57 | # Create Tag 58 | git tag v1.3.$TRAVIS_BUILD_NUMBER -a -m "Auto Taged By TravisCI With Build $TRAVIS_BUILD_NUMBER" 59 | # Github Pages 60 | git push --quiet "https://${GH_TOKEN}@${GH_REF}" master:master --tags 61 | # Gitee Pages 62 | git push --quiet "https://shenliyang:${GITEE_TOKEN}@${GITEE_REF}" master:master --tags 63 | } 64 | 65 | case $1 in 66 | "success") 67 | success 68 | ;; 69 | "failure") 70 | failure 71 | ;; 72 | *) 73 | default 74 | esac 75 | 76 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | "use strict"; 3 | var gulp = require("gulp"), 4 | less = require("gulp-less"), 5 | rename = require("gulp-rename"), 6 | minifycss = require("gulp-minify-css"), 7 | autoprefixer = require("gulp-autoprefixer"), 8 | uglify = require("gulp-uglify"), 9 | jshint = require("gulp-jshint"), 10 | stylish = require("jshint-stylish"), 11 | notify = require("gulp-notify"), 12 | plumber = require("gulp-plumber"), 13 | htmlclean = require("gulp-htmlclean"), 14 | htmlmin = require("gulp-htmlmin"), 15 | rev = require("gulp-rev-append"), 16 | sequence = require("gulp-sequence"), 17 | path = require("path"), 18 | paths = { 19 | root: "./", 20 | source: "./themes/hexo-theme-snippet/source/", //主题下原文件 21 | }; 22 | 23 | /*==================================================== 24 | 开发主题 25 | ====================================================*/ 26 | 27 | // CSS预处理 28 | gulp.task("less-task", function () { 29 | return gulp 30 | .src(paths.source + "css/less/_style.less") 31 | .pipe( 32 | plumber({ 33 | errorHandler: notify.onError("Error: <%= error.message %>"), 34 | }) 35 | ) 36 | .pipe(less()) 37 | .pipe(rename({ basename: "style" })) 38 | .pipe(gulp.dest(paths.source + "css")) 39 | .pipe(notify({ message: "less compile complete" })); 40 | }); 41 | 42 | // 校验JS语法和风格 43 | gulp.task("js-task", function () { 44 | return gulp 45 | .src(paths.source + "js/*.js") 46 | .pipe(jshint()) 47 | .pipe(jshint.reporter(stylish)) 48 | .pipe(gulp.dest(paths.source + "js/")) 49 | .pipe(notify({ message: "js compile complete" })); 50 | }); 51 | 52 | // 监听任务-主题开发模式 53 | gulp.task("dev", function () { 54 | gulp.watch(paths.source + "css/less/*.less", ["less-task"]); 55 | gulp.watch(paths.source + "js/*.js", ["js-task"]); 56 | }); 57 | 58 | /*==================================================== 59 | 部署前代码处理 60 | ====================================================*/ 61 | 62 | // 压缩处理 css 63 | gulp.task("minify-css", function () { 64 | return gulp 65 | .src("./public/**/*.css") 66 | .pipe( 67 | autoprefixer({ 68 | browsers: [ 69 | "last 10 versions", 70 | "Firefox >= 20", 71 | "Opera >= 36", 72 | "ie >= 9", 73 | "Android >= 4.0", 74 | ], 75 | cascade: true, //是否美化格式 76 | remove: false, //是否删除不必要的前缀 77 | }) 78 | ) 79 | .pipe(minifycss()) 80 | .pipe(gulp.dest("./public")) 81 | .pipe(notify({ message: "css minify complete" })); 82 | }); 83 | 84 | // 压缩处理 js 85 | gulp.task("minify-js", function () { 86 | return gulp 87 | .src("./public/js/*.js") 88 | .pipe(uglify()) 89 | .pipe(gulp.dest("./public/js")) 90 | .pipe(notify({ message: "js minify complete" })); 91 | }); 92 | 93 | // 压缩处理 html 94 | gulp.task("minify-html", function () { 95 | return gulp 96 | .src("./public/**/*.html") 97 | .pipe(htmlclean()) 98 | .pipe( 99 | htmlmin({ 100 | removeComments: true, //清除HTML注释 101 | collapseWhitespace: true, //压缩HTML 102 | minifyJS: true, //压缩页面JS 103 | minifyCSS: true, //压缩页面CSS 104 | minifyURLs: true, 105 | }) 106 | ) 107 | .pipe(gulp.dest("./public")); 108 | }); 109 | 110 | // 添加版本号 111 | gulp.task("rev", function () { 112 | return gulp 113 | .src("./public/**/*.html") 114 | .pipe(rev()) 115 | .pipe(gulp.dest("./public")); 116 | }); 117 | 118 | // 同步执行task 119 | gulp.task( 120 | "deploy", 121 | sequence(["minify-css", "minify-js"], "rev", "minify-html") 122 | ); 123 | 124 | // 部署前代码处理 125 | gulp.task("default", ["deploy"], function (e) { 126 | console.log("[complete] please execute: hexo d"); 127 | }); 128 | })(); 129 | -------------------------------------------------------------------------------- /languages/default.yml: -------------------------------------------------------------------------------- 1 | categories: Categories 2 | search: Search 3 | tags: Tags 4 | tagcloud: Tag Cloud 5 | tweets: Tweets 6 | prev: Prev 7 | next: Next 8 | comment: Comments 9 | archive_a: Archives 10 | archive_b: "Archives: %s" 11 | page: Page %d 12 | recent_posts: Recent Posts 13 | newer: Newer 14 | older: Older 15 | share: Share 16 | rss_feed: RSS 17 | rss: RSS 18 | category: Category 19 | tag: Tag 20 | social: Social 21 | friend_links: Friends 22 | read_more: Read 23 | home: Home 24 | archives: Archives 25 | about: About 26 | search_local: localSearch 27 | search_google: googleSearch 28 | search_placeholder: Search What? 29 | author: Author 30 | date: Published Date 31 | update: Updated Date 32 | post_categories: Categories 33 | post_tags: Tags 34 | post_licence: License 35 | notification: Notification 36 | toc: Table of Contents 37 | visit_counter_uv: Visitors 38 | visit_counter_pv: Total 39 | -------------------------------------------------------------------------------- /languages/ja.yml: -------------------------------------------------------------------------------- 1 | categories: カテゴリー 2 | search: 検索 3 | tags: タグ 4 | tagcloud: タグクラウド 5 | tweets: ツイート 6 | prev: 前へ 7 | next: 次へ 8 | comment: コメント 9 | archive_a: アーカイブ 10 | archive_b: "アーカイブ: %s" 11 | page: "%d ページ" 12 | recent_posts: 最新の投稿 13 | newer: 新しい投稿 14 | older: 以前の投稿 15 | share: 共有 16 | rss_feed: RSS 17 | rss: RSS 18 | category: カテゴリー 19 | tag: タグ 20 | social: ソーシャル 21 | friend_links: リンク 22 | read_more: 続きを読む 23 | home: ホーム 24 | archives: アーカイブ 25 | about: 私について 26 | search_local: ローカル検索 27 | search_google: Google検索 28 | search_placeholder: 検索ポイントは何ですか 29 | author: 著者 30 | date: 公開日 31 | update: 更新日 32 | post_categories: カテゴリー 33 | post_tags: タグ 34 | post_licence: ライセンス 35 | notification: お知らせ 36 | toc: 目次 37 | visit_counter_uv: アクセス量 38 | visit_counter_pv: 訪問者数 39 | -------------------------------------------------------------------------------- /languages/zh-CN.yml: -------------------------------------------------------------------------------- 1 | categories: 分类 2 | search: 搜索 3 | tags: 标签 4 | tagcloud: 标签云 5 | tweets: 推文 6 | prev: 上一页 7 | next: 下一页 8 | comment: 留言 9 | archive_a: 归档 10 | archive_b: 归档:%s 11 | page: 第 %d 页 12 | recent_posts: 最新文章 13 | newer: Newer 14 | older: Older 15 | share: Share 16 | rss_feed: RSS 17 | rss: RSS 18 | category: 分类 19 | tag: 标签 20 | social: 社交 21 | friend_links: 友链 22 | read_more: 阅读全文 23 | home: 首页 24 | about: 关于我 25 | archives: 归档 26 | search_local: 站内搜索 27 | search_google: 谷歌搜索 28 | search_placeholder: 搜点什么呢? 29 | author: 作者 30 | date: 发表日期 31 | update: 最后编辑日期 32 | post_categories: 文章分类 33 | post_tags: 文章标签 34 | post_licence: 版权声明 35 | notification: 网站公告 36 | toc: 文章目录 37 | visit_counter_uv: 访客数 38 | visit_counter_pv: 访问量 39 | -------------------------------------------------------------------------------- /languages/zh-TW.yml: -------------------------------------------------------------------------------- 1 | categories: 分類 2 | search: 搜尋 3 | tags: 標籤 4 | tagcloud: 標籤雲 5 | tweets: 推文 6 | prev: 上一頁 7 | next: 下一頁 8 | comment: 留言 9 | archive_a: 彙整 10 | archive_b: 彙整:%s 11 | page: 第 %d 頁 12 | recent_posts: 最新文章 13 | newer: Newer 14 | older: Older 15 | share: Share 16 | powered_by: Powered by 17 | rss_feed: RSS 18 | rss: RSS 19 | category: 分類 20 | tag: 標籤 21 | social: 社交 22 | friend_links: 友鏈 23 | read_more: 閱讀全文 24 | home: 首頁 25 | archives: 彙整 26 | about: 關於我 27 | search_local: 站內搜索 28 | search_google: 谷歌搜索 29 | search_placeholder: 搜點什麽呢? 30 | author: 作者 31 | date: 發表日期 32 | update: 最後編輯日期 33 | post_categories: 文章分類 34 | post_tags: 文章標簽 35 | post_licence: 版權聲明 36 | popular_post: 熱門文章 37 | notification: 網站公告 38 | toc: 文章目錄 39 | visit_counter_uv: 訪客數 40 | visit_counter_pv: 訪問量 41 | -------------------------------------------------------------------------------- /layout/_partial/_head-sections/IE.ejs: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /layout/_partial/_head-sections/seo.ejs: -------------------------------------------------------------------------------- 1 | 2 | <% if(page.keywords){ %> 3 | 4 | <% } else if(page.tags && page.tags.length) { %> 5 | 6 | <% } else{ %> 7 | 8 | <%}%> 9 | <% if(page.content){ %> 10 | 11 | <% } else{ %> 12 | 13 | <%}%> 14 | <% var robotMeta = theme.robot||'all'; %> 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /layout/_partial/_head-sections/style.ejs: -------------------------------------------------------------------------------- 1 | <% 2 | var _bootstrap = theme.bootstrap || '/css/bootstrap.min.css?rev=3.3.7'; 3 | var _fontAwe = theme.fontAwesome || '/css/font-awesome.min.css?rev=4.7.0'; 4 | var _gitmentStyle = '//imsun.github.io/gitment/style/default.css'; 5 | var style = '/css/style.css?rev=@@hash'; 6 | %> 7 | <% if(theme.gitment.enable && is_post()){ %> 8 | <%- css([_gitmentStyle]) %> 9 | <% } %> 10 | <%- css([_bootstrap, _fontAwe, style]) %> -------------------------------------------------------------------------------- /layout/_partial/_head-sections/title.ejs: -------------------------------------------------------------------------------- 1 | 2 | <% 3 | var title = page.title; 4 | if (is_archive()) { 5 | if (is_year() || is_month()) { 6 | title = __('archive_b', page.year + (page.month ? '/' + page.month : '')); 7 | } else { 8 | title = __('archive_a'); 9 | } 10 | } else if (is_category()) { 11 | title = __('category') + ': ' + page.category; 12 | } else if (is_tag()) { 13 | title = __('tag') + ': ' + page.tag; 14 | } 15 | %> 16 | 17 | <% if (title){ %> 18 | <%= title %> | 19 | <% } %> 20 | <%= config.title %> 21 | 22 | <% if (theme.rss){ %> 23 | 24 | <% } %> 25 | <% if (theme.favicon){ %> 26 | 27 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/archive.ejs: -------------------------------------------------------------------------------- 1 | 13 | <% page.posts.each(function(post){ %> 14 |
15 | <% if(post.img) { %> 16 |
17 | 18 | <%- post.title %> 19 | 20 |
21 | <% } %> 22 |
23 |
24 |

25 | 26 | <%- post.title %> 27 |

28 | 33 |
34 |

35 | <% if(post.excerpt) { %> 36 | <%= strip_html(post.excerpt) + '…' %> 37 | <% } else { %> 38 | <%= truncate(strip_html(post.content), {length: theme.excerptLength || 120, separator: ''}) %> 39 | <% } %> 40 |

41 |
42 |
43 | <% }) %> 44 | <%- partial('_partial/pagination') %> -------------------------------------------------------------------------------- /layout/_partial/article-meta.ejs: -------------------------------------------------------------------------------- 1 |
2 | <% if(!is_category()){ %> 3 | 4 | 5 | <%- list_categories(post.categories, { 6 | show_count: false, 7 | style: 'none', 8 | separator: ' ' 9 | }) %> 10 | 11 | <% } %> 12 | <% if(!is_tag()){ %> 13 | 14 | 15 | 16 | <% if (post.tags && post.tags.length){ %> 17 | <%- list_tags(post.tags, { 18 | show_count: false, 19 | style: 'none', 20 | separator: ' ', 21 | amount: 5 22 | }) %> 23 | <% } %> 24 | 25 | 26 | <% } %> 27 | <% if(is_post()) {%> 28 | <% 29 | var format = 'YYYY/MM/DD'; 30 | if (is_archive()) format = "MM/DD"; 31 | %> 32 | 33 | 34 | 35 | <%- date(post.date, format) %> 36 | 37 | <% if(theme.visit_counter.page) {%> 38 | 39 | 40 | 41 | 42 | <% } %> 43 | <% } %> 44 |
-------------------------------------------------------------------------------- /layout/_partial/article.ejs: -------------------------------------------------------------------------------- 1 |
2 |

3 | <%= post.title%> 4 |

5 |
6 | <%- page.content %> 7 |
8 |
-------------------------------------------------------------------------------- /layout/_partial/busuanzi.ejs: -------------------------------------------------------------------------------- 1 |
2 | <% if(theme.visit_counter.site) { %> 3 | <%= __('visit_counter_pv') %>: 4 | 5 | 6 | 7 |   |   8 | <%= __('visit_counter_uv') %>: 9 | 10 | 11 | 12 | <% } %> 13 |
-------------------------------------------------------------------------------- /layout/_partial/copyright.ejs: -------------------------------------------------------------------------------- 1 | 24 | <%- partial('_partial/script') %> -------------------------------------------------------------------------------- /layout/_partial/footer.ejs: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /layout/_partial/gallery.ejs: -------------------------------------------------------------------------------- 1 | <% if(post.photos && post.photos.length > 0){ %> 2 |
3 | <% post.photos.forEach(function (photo) { %> 4 | gallery-img 5 | <% }) %> 6 |
7 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/head.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | <%- partial('_head-sections/seo') %> 21 | <%- partial('_head-sections/title') %> 22 | <%- partial('_head-sections/style') %> 23 | <%- partial('_vendor/analytics/index') %> 24 | <%- partial('_vendor/baidu_sitemap') %> 25 | -------------------------------------------------------------------------------- /layout/_partial/header.ejs: -------------------------------------------------------------------------------- 1 |
style="background-image:url( 2 | <%= url_for(theme.banner.img) %>)" 3 | <%}%> > 4 |
5 | 6 | <%- image_tag('img/avatar.jpg',{alt:'logo头像',class:'img-responsive center-block'}) %> 7 | 8 |
9 | 10 | <% if(theme.branding){ %> 11 |

12 | <%= theme.branding %> 13 |

14 | <% } else { %> 15 | <%- image_tag('img/branding.png',{alt:'Snippet 博客主题',class:'img-responsive center-block'}) %> 16 | <% } %> 17 |
18 |
19 |
-------------------------------------------------------------------------------- /layout/_partial/nav.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /layout/_partial/pagination.ejs: -------------------------------------------------------------------------------- 1 | <% if (page.total > 1){ %> 2 | 11 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/reward.ejs: -------------------------------------------------------------------------------- 1 |
2 |
赏 3 |
4 | <% if(theme.reward.alipay){ %> 5 | 6 | 支付宝打赏 7 | 8 | <% } %> 9 | <% if(theme.reward.wepay){ %> 10 | 11 | 微信打赏 12 | 13 | <% } %> 14 |
15 |
16 |

17 | <%= theme.reward.tip %> 18 |

19 |
-------------------------------------------------------------------------------- /layout/_partial/script.ejs: -------------------------------------------------------------------------------- 1 | <% if(theme.jsonContent.searchLocal && !is_post()){ %> 2 | <%- js('js/search.js?rev=@@hash') %> 3 | <% } %> 4 | <% if(theme.tagcloud.tag3d){ %> 5 | <%- js('assets/tagcanvas.min.js?rev=2.9') %> 6 | 26 | <% } %> 27 | <% if(theme.visit_counter.site || theme.visit_counter.page){ %> 28 | 29 | <% } %> 30 | <%- js('js/app.js?rev=@@hash') %> -------------------------------------------------------------------------------- /layout/_partial/sidebar.ejs: -------------------------------------------------------------------------------- 1 | <% if(theme.widgets && theme.widgets.length >0){ %> 2 | 7 | <%}%> -------------------------------------------------------------------------------- /layout/_partial/toc.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /layout/_vendor/analytics/baidu.ejs: -------------------------------------------------------------------------------- 1 | <%if(theme.baidu_analytics){%> 2 | 11 | <%}%> -------------------------------------------------------------------------------- /layout/_vendor/analytics/cnzz.ejs: -------------------------------------------------------------------------------- 1 | <%if(theme.cnzz_analytics){%> 2 |
3 | 7 |
8 | <%}%> -------------------------------------------------------------------------------- /layout/_vendor/analytics/google.ejs: -------------------------------------------------------------------------------- 1 | <%if(theme.google_analytics){%> 2 | 17 | <%}%> -------------------------------------------------------------------------------- /layout/_vendor/analytics/index.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_vendor/analytics/cnzz') %> 2 | <%- partial('_vendor/analytics/baidu') %> 3 | <%- partial('_vendor/analytics/google') %> 4 | <%- partial('_vendor/analytics/tencent') %> -------------------------------------------------------------------------------- /layout/_vendor/analytics/tencent.ejs: -------------------------------------------------------------------------------- 1 | <%if(theme.tencent_analytics){%> 2 | 3 | <%}%> -------------------------------------------------------------------------------- /layout/_vendor/baidu_sitemap.ejs: -------------------------------------------------------------------------------- 1 | <%if(theme.baidu_site_verification){%> 2 | 3 | <%}%> 4 | <%if(theme.baidu_push){%> 5 | 18 | <%}%> -------------------------------------------------------------------------------- /layout/_vendor/comments/changyan.ejs: -------------------------------------------------------------------------------- 1 | 2 |
3 | -------------------------------------------------------------------------------- /layout/_vendor/comments/disqus.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.disqus.count){ %> 2 | 3 | <% } %> 4 | -------------------------------------------------------------------------------- /layout/_vendor/comments/gitalk.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | -------------------------------------------------------------------------------- /layout/_vendor/comments/gitment.ejs: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /layout/_vendor/comments/index.ejs: -------------------------------------------------------------------------------- 1 | <% if(theme.uyan.enable && is_post()){ %> 2 | <%- partial('_vendor/comments/uyan') %> 3 | <% } else if(theme.gitment.enable && is_post()) { %> 4 | <%- partial('_vendor/comments/gitment') %> 5 | <% } else if(theme.livere.enable && is_post()) { %> 6 | <%- partial('_vendor/comments/livere') %> 7 | <% } else if(theme.disqus.enable && is_post()) { %> 8 | <%- partial('_vendor/comments/disqus') %> 9 | <% } else if(theme.changyan.enable && is_post()) { %> 10 | <%- partial('_vendor/comments/changyan') %> 11 | <% } else if(theme.valine.enable && is_post()) { %> 12 | <%- partial('_vendor/comments/valine') %> 13 | <% } else if(theme.gitalk.enable && is_post()) { %> 14 | <%- partial('_vendor/comments/gitalk') %> 15 | <% } else if(theme.utterances.enable && is_post()) { %> 16 | <%- partial('_vendor/comments/utterances') %> 17 | <% } else { %> 18 |

评论系统未开启,无法评论!

19 | <% } %> -------------------------------------------------------------------------------- /layout/_vendor/comments/livere.ejs: -------------------------------------------------------------------------------- 1 |
2 | 12 |
-------------------------------------------------------------------------------- /layout/_vendor/comments/utterances.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.utterances.enable){ %> 2 |
3 | <% var utterancesCdn = theme.utterances.cdn || "https://utteranc.es/client.js" 4 | var issueTerm = ""; 5 | var issueNumber = ""; 6 | if(theme.utterances.issueTerm == 'issue-number'){ 7 | issueNumber = theme.utterances.issueNumber; 8 | } else { 9 | issueTerm = theme.utterances.issueTerm; 10 | } 11 | %> 12 | 22 |
23 | <% } %> 24 | -------------------------------------------------------------------------------- /layout/_vendor/comments/uyan.ejs: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /layout/_vendor/comments/valine.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.valine.enable){ %> 2 |
3 | <%- js('//cdn1.lncld.net/static/js/3.0.4/av-min.js','assets/valine.min.js') %> 4 | 20 | <% } %> -------------------------------------------------------------------------------- /layout/_widget/archive.ejs: -------------------------------------------------------------------------------- 1 | <% if(site.posts.length){ %> 2 |
3 |

4 | <%= __('archives') %> 5 |

6 | <%- list_archives({ 7 | show_count: theme.arch_config.show_count, 8 | type: theme.arch_config.type, 9 | order: theme.arch_config.order, 10 | format: theme.arch_config.format, 11 | transform: function (name) { 12 | return ''; 13 | } 14 | }) %> 15 |
16 | <% } %> -------------------------------------------------------------------------------- /layout/_widget/category.ejs: -------------------------------------------------------------------------------- 1 | <% if(site.categories.length){ %> 2 |
3 |

4 | <%= __('categories') %> 5 |

6 | <%- list_categories({ 7 | showcount: theme.cate_config.show_count, 8 | transform: function(name){ 9 | return ''; 10 | }, 11 | show_current: theme.cate_config.show_current 12 | }) %> 13 |
14 | <% } %> -------------------------------------------------------------------------------- /layout/_widget/friends.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.links && theme.links.length){ %> 2 |
3 |

4 | <%= __('friend_links') %> 5 |

6 | 18 |
19 | <% } %> -------------------------------------------------------------------------------- /layout/_widget/notification.ejs: -------------------------------------------------------------------------------- 1 | <%if(theme.notification){%> 2 |
3 |

4 | <%= __('notification') %> 5 |

6 |
7 | <%- theme.notification%> 8 |
9 |
10 | <%}%> -------------------------------------------------------------------------------- /layout/_widget/search.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.jsonContent.searchLocal || theme.jsonContent.searchGoogle){ %> 2 |
3 |

4 | <%= __('search') %> 5 |

6 |
7 |
8 |
9 | <% if (theme.jsonContent.searchLocal) { %> 10 | 11 | 13 | <% } %> 14 | <% if (theme.jsonContent.searchGoogle) { %> 15 | <%- search_form({'button':'谷歌搜索','text':'Google Search'}) %> 16 | <% } %> 17 |
18 |
19 |
20 |
21 |
22 | 30 |
31 |
32 |
33 | <% } %> -------------------------------------------------------------------------------- /layout/_widget/social.ejs: -------------------------------------------------------------------------------- 1 | <% if(theme.social){%> 2 |
3 |

4 | <%= __('social') %> 5 |

6 | 13 |
14 | <%}%> -------------------------------------------------------------------------------- /layout/_widget/stick.ejs: -------------------------------------------------------------------------------- 1 |
2 | 23 |
24 | -------------------------------------------------------------------------------- /layout/_widget/tagcloud.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.tags.length){ %> 2 |
3 |

4 | <%= __('tagcloud') %> 5 |

6 |
7 | <% if (theme.tagcloud.tag3d){ %> 8 | 9 | <%-tagcloud() %> 10 | 11 | <% } else { %> 12 | <%- tagcloud() %> 13 | <% } %> 14 |
15 |
16 | <% } %> -------------------------------------------------------------------------------- /layout/archive.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
    5 | <% var years; %> 6 | <% site.posts.sort('date','desc').each(function(post){ %> 7 | <% 8 | var year = post.date.year(); 9 | var month = post.date.format('MM'); 10 | var months = (~~month != ~~page.month)? 'hide' : '' 11 | %> 12 | <% if((!!page.year && page.year == year) || !page.year) { %> 13 | <% if (years != year) { %> 14 | <% years = year; %> 15 |

    16 | <%= year %> 17 |

    18 | <% } %> 19 | <% if(page.month) { %> 20 |
  • 21 | <% } else { %> 22 |
  • 23 | <% } %> 24 |

    25 | <%= post.date.format('DD') %> 26 | <%= post.date.format('MM') %>月 27 |

    28 | 29 | <%- post.title %> 30 |
  • 31 | <% } %> 32 | <% }) %> 33 |
34 |
35 |
36 |
-------------------------------------------------------------------------------- /layout/category.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive') %> -------------------------------------------------------------------------------- /layout/index.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.carousel.img) { %> 2 | 7 | <% } %> 8 | <% if(page.posts && page.posts.length){ %> 9 | <% page.posts.forEach(function (post, i) { %> 10 | <% 11 | var urls = lazyImage(post); 12 | var random = Math.floor(Math.random() * (urls.length)); 13 | if(theme.defaultImgs && theme.defaultImgs.length >0){ 14 | var urls2 = theme.defaultImgs; 15 | var random2 = Math.floor(Math.random() * (urls2.length)); 16 | } 17 | var _photoUrl = post.img || (urls.length > 0 && urls[random]) || (urls2.length > 0 && urls2[random2]) || ''; 18 | %> 19 |
20 | <% if(_photoUrl) {%> 21 |
22 | 23 | <%- post.title %> 24 | 25 |
26 | <% } %> 27 |
28 |
29 |

30 | 31 | <%- post.title %> 32 |

33 | 38 |
39 |

40 | <% if(post.excerpt) { %> 41 | <%= strip_html(post.excerpt) + '…' %> 42 | <% } else { %> 43 | <%= truncate(strip_html(post.content), {length: theme.excerptLength || 120, separator: ''}) %> 44 | <% } %> 45 |

46 |
47 | <% if(theme.homePanel) { %> 48 | 57 | <% } %> 58 |
59 | <% }) %> 60 | <%}%> 61 | <%- partial('_partial/pagination') %> -------------------------------------------------------------------------------- /layout/layout.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/head') %> 2 | <%- partial('_partial/_head-sections/IE',null,{cache: !config.relative_link}) %> 3 | 4 | <%- partial('_partial/header') %> 5 | <%- partial('_partial/nav') %> 6 |
7 |
8 |
9 |
10 | <%- body %> 11 |
12 | <% if(theme.toc && is_post()){ %> 13 | <%- partial('_partial/toc', null, {cache:false}) %> 14 | <% } else { %> 15 | <%- partial('_partial/sidebar', null, {cache: !config.relative_link}) %> 16 | <% } %> 17 |
18 |
19 |
20 | <%- partial('_partial/footer') %> 21 | <%- partial('_partial/copyright') %> 22 | 23 | -------------------------------------------------------------------------------- /layout/page.ejs: -------------------------------------------------------------------------------- 1 |
2 | <%if(page.title=='tags' || page.type=='tags'){%> 3 |
4 |

共计 5 | <%- site.tags.length%>个标签

6 |
7 |
8 |
9 | <%- tagcloud({min_font: 14, max_font: 30, amount: 200}) %> 10 |
11 |
12 |
13 |
14 | <% } else if(page.title=='categories' || page.type=='categories') { %> 15 |
16 |

共计 17 | <%- site.categories.length%>个分类

18 |
19 | <% site.categories.forEach(function (item) {%> 20 |
  • 21 | 22 | <%- item.name%> 23 | 24 |
  • 25 | <%})%> 26 |
    27 |
    28 | <% } else{ %> 29 | <%- partial('_partial/article', {post: page, index: false}) %> 30 | <%}%> 31 |
    -------------------------------------------------------------------------------- /layout/post.ejs: -------------------------------------------------------------------------------- 1 |

    2 |
    3 |
    4 |

    5 | <%if(page.link){%> 6 | 7 | <%= page.title %> 8 | <%}else{%> 9 | <%= page.title||'NO Title!' %> 10 | <%}%> 11 |

    12 | <%- partial('_partial/article-meta', {post: page}) %> 13 | <% 14 | var diffDays = moment(new Date()).diff(moment(page.date), 'day'); 15 | var warningTextArr = theme.warning.text.split("%d"); 16 | %> 17 | <% if((theme.warning.days!=0) && diffDays > (theme.warning.days || 300)){ %> 18 |

    19 | <%- warningTextArr[0]%> 20 | <%= diffDays %> 21 | <%- warningTextArr[1]%> 22 |

    23 | <% } %> 24 |
    25 | <%- partial('_partial/gallery',{post:page})%> 26 |
    27 | <%- page.content %> 28 |
    29 | <% if(theme.reward.alipay || theme.reward.wepay){ %> 30 | <%- partial('_partial/reward') %> 31 | <% } %> 32 | 47 |
    48 |
    49 | <% if(page.prev){ %> 50 | 51 | 52 | 54 | 55 | <% } %> 56 | <% if(page.next){ %> 57 | 62 | <% } %> 63 |
    64 | <% if(page.comments){ %> 65 |
    66 | <%- partial('_vendor/comments/index', {page: page}) %> 67 |
    68 | <% } %> -------------------------------------------------------------------------------- /layout/tag.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive') %> 2 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hexo-theme-snippet", 3 | "version": "1.3.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@nodelib/fs.scandir": { 8 | "version": "2.1.5", 9 | "resolved": "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz?cache=0&sync_timestamp=1622792874919&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.5.tgz", 10 | "integrity": "sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=", 11 | "dev": true, 12 | "requires": { 13 | "@nodelib/fs.stat": "2.0.5", 14 | "run-parallel": "^1.1.9" 15 | } 16 | }, 17 | "@nodelib/fs.stat": { 18 | "version": "2.0.5", 19 | "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz?cache=0&sync_timestamp=1622792772584&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.5.tgz", 20 | "integrity": "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=", 21 | "dev": true 22 | }, 23 | "@nodelib/fs.walk": { 24 | "version": "1.2.8", 25 | "resolved": "https://registry.nlark.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz?cache=0&sync_timestamp=1625773832828&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.8.tgz", 26 | "integrity": "sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=", 27 | "dev": true, 28 | "requires": { 29 | "@nodelib/fs.scandir": "2.1.5", 30 | "fastq": "^1.6.0" 31 | } 32 | }, 33 | "acorn": { 34 | "version": "7.4.1", 35 | "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz", 36 | "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", 37 | "dev": true 38 | }, 39 | "acorn-node": { 40 | "version": "1.8.2", 41 | "resolved": "https://registry.npm.taobao.org/acorn-node/download/acorn-node-1.8.2.tgz", 42 | "integrity": "sha1-EUyV1kU55T3t4j3oudlt98euKvg=", 43 | "dev": true, 44 | "requires": { 45 | "acorn": "^7.0.0", 46 | "acorn-walk": "^7.0.0", 47 | "xtend": "^4.0.2" 48 | } 49 | }, 50 | "acorn-walk": { 51 | "version": "7.2.0", 52 | "resolved": "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz", 53 | "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=", 54 | "dev": true 55 | }, 56 | "ansi-regex": { 57 | "version": "5.0.0", 58 | "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", 59 | "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", 60 | "dev": true 61 | }, 62 | "ansi-styles": { 63 | "version": "4.3.0", 64 | "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz", 65 | "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", 66 | "dev": true, 67 | "requires": { 68 | "color-convert": "^2.0.1" 69 | } 70 | }, 71 | "array-union": { 72 | "version": "2.1.0", 73 | "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz", 74 | "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=", 75 | "dev": true 76 | }, 77 | "async": { 78 | "version": "0.9.2", 79 | "resolved": "https://registry.nlark.com/async/download/async-0.9.2.tgz", 80 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", 81 | "dev": true 82 | }, 83 | "balanced-match": { 84 | "version": "1.0.2", 85 | "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz", 86 | "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", 87 | "dev": true 88 | }, 89 | "brace-expansion": { 90 | "version": "1.1.11", 91 | "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1614011092368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz", 92 | "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", 93 | "dev": true, 94 | "requires": { 95 | "balanced-match": "^1.0.0", 96 | "concat-map": "0.0.1" 97 | } 98 | }, 99 | "braces": { 100 | "version": "3.0.2", 101 | "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", 102 | "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", 103 | "dev": true, 104 | "requires": { 105 | "fill-range": "^7.0.1" 106 | } 107 | }, 108 | "chalk": { 109 | "version": "4.1.2", 110 | "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz", 111 | "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", 112 | "dev": true, 113 | "requires": { 114 | "ansi-styles": "^4.1.0", 115 | "supports-color": "^7.1.0" 116 | } 117 | }, 118 | "cliui": { 119 | "version": "7.0.4", 120 | "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz?cache=0&sync_timestamp=1604881063064&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-7.0.4.tgz", 121 | "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=", 122 | "dev": true, 123 | "requires": { 124 | "string-width": "^4.2.0", 125 | "strip-ansi": "^6.0.0", 126 | "wrap-ansi": "^7.0.0" 127 | } 128 | }, 129 | "color-convert": { 130 | "version": "2.0.1", 131 | "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", 132 | "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", 133 | "dev": true, 134 | "requires": { 135 | "color-name": "~1.1.4" 136 | } 137 | }, 138 | "color-name": { 139 | "version": "1.1.4", 140 | "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", 141 | "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", 142 | "dev": true 143 | }, 144 | "concat-map": { 145 | "version": "0.0.1", 146 | "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", 147 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 148 | "dev": true 149 | }, 150 | "dir-glob": { 151 | "version": "3.0.1", 152 | "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz", 153 | "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=", 154 | "dev": true, 155 | "requires": { 156 | "path-type": "^4.0.0" 157 | } 158 | }, 159 | "ejs-include-regex": { 160 | "version": "1.0.0", 161 | "resolved": "https://registry.nlark.com/ejs-include-regex/download/ejs-include-regex-1.0.0.tgz", 162 | "integrity": "sha1-4vcVdcv9VRrIALJHTB9io45wCTo=", 163 | "dev": true 164 | }, 165 | "ejs-lint": { 166 | "version": "1.2.1", 167 | "resolved": "https://registry.nlark.com/ejs-lint/download/ejs-lint-1.2.1.tgz", 168 | "integrity": "sha1-b6Fk7UcBg/GbEVAFL5L9JRWak40=", 169 | "dev": true, 170 | "requires": { 171 | "chalk": "^4.0.0", 172 | "ejs": "3.1.6", 173 | "ejs-include-regex": "^1.0.0", 174 | "globby": "^11.0.0", 175 | "read-input": "^0.3.1", 176 | "slash": "^3.0.0", 177 | "syntax-error": "^1.1.6", 178 | "yargs": "^16.0.0" 179 | }, 180 | "dependencies": { 181 | "ejs": { 182 | "version": "3.1.6", 183 | "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-3.1.6.tgz", 184 | "integrity": "sha1-W/0KBol0O7UmizVQzO7rvBcCgio=", 185 | "dev": true, 186 | "requires": { 187 | "jake": "^10.6.1" 188 | } 189 | } 190 | } 191 | }, 192 | "emoji-regex": { 193 | "version": "8.0.0", 194 | "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz", 195 | "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", 196 | "dev": true 197 | }, 198 | "escalade": { 199 | "version": "3.1.1", 200 | "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz?cache=0&sync_timestamp=1602567260031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.1.1.tgz", 201 | "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", 202 | "dev": true 203 | }, 204 | "escape-string-regexp": { 205 | "version": "1.0.5", 206 | "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1618677179364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz", 207 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 208 | "dev": true 209 | }, 210 | "fast-glob": { 211 | "version": "3.2.7", 212 | "resolved": "https://registry.nlark.com/fast-glob/download/fast-glob-3.2.7.tgz", 213 | "integrity": "sha1-/Wy3otfpqnp4RhEehaGW1rL3ZqE=", 214 | "dev": true, 215 | "requires": { 216 | "@nodelib/fs.stat": "^2.0.2", 217 | "@nodelib/fs.walk": "^1.2.3", 218 | "glob-parent": "^5.1.2", 219 | "merge2": "^1.3.0", 220 | "micromatch": "^4.0.4" 221 | } 222 | }, 223 | "fastq": { 224 | "version": "1.11.1", 225 | "resolved": "https://registry.nlark.com/fastq/download/fastq-1.11.1.tgz?cache=0&sync_timestamp=1625393108958&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffastq%2Fdownload%2Ffastq-1.11.1.tgz", 226 | "integrity": "sha1-XYF1quF9thlH+LFiz8f2MmTSKAc=", 227 | "dev": true, 228 | "requires": { 229 | "reusify": "^1.0.4" 230 | } 231 | }, 232 | "filelist": { 233 | "version": "1.0.2", 234 | "resolved": "https://registry.nlark.com/filelist/download/filelist-1.0.2.tgz", 235 | "integrity": "sha1-gCAvIUYtTRwuIUEZsYB8G8A4Dls=", 236 | "dev": true, 237 | "requires": { 238 | "minimatch": "^3.0.4" 239 | } 240 | }, 241 | "fill-range": { 242 | "version": "7.0.1", 243 | "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", 244 | "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", 245 | "dev": true, 246 | "requires": { 247 | "to-regex-range": "^5.0.1" 248 | } 249 | }, 250 | "get-caller-file": { 251 | "version": "2.0.5", 252 | "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", 253 | "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", 254 | "dev": true 255 | }, 256 | "glob-parent": { 257 | "version": "5.1.2", 258 | "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760165717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz", 259 | "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", 260 | "dev": true, 261 | "requires": { 262 | "is-glob": "^4.0.1" 263 | } 264 | }, 265 | "globby": { 266 | "version": "11.0.4", 267 | "resolved": "https://registry.nlark.com/globby/download/globby-11.0.4.tgz", 268 | "integrity": "sha1-LLr/d8Lypi5x6bKBOme5ejowAaU=", 269 | "dev": true, 270 | "requires": { 271 | "array-union": "^2.1.0", 272 | "dir-glob": "^3.0.1", 273 | "fast-glob": "^3.1.1", 274 | "ignore": "^5.1.4", 275 | "merge2": "^1.3.0", 276 | "slash": "^3.0.0" 277 | } 278 | }, 279 | "has-flag": { 280 | "version": "4.0.0", 281 | "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626716095603&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz", 282 | "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", 283 | "dev": true 284 | }, 285 | "ignore": { 286 | "version": "5.1.8", 287 | "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz", 288 | "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=", 289 | "dev": true 290 | }, 291 | "is-extglob": { 292 | "version": "2.1.1", 293 | "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", 294 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 295 | "dev": true 296 | }, 297 | "is-fullwidth-code-point": { 298 | "version": "3.0.0", 299 | "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 300 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 301 | "dev": true 302 | }, 303 | "is-glob": { 304 | "version": "4.0.1", 305 | "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", 306 | "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", 307 | "dev": true, 308 | "requires": { 309 | "is-extglob": "^2.1.1" 310 | } 311 | }, 312 | "is-number": { 313 | "version": "7.0.0", 314 | "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", 315 | "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", 316 | "dev": true 317 | }, 318 | "jake": { 319 | "version": "10.8.2", 320 | "resolved": "https://registry.npm.taobao.org/jake/download/jake-10.8.2.tgz", 321 | "integrity": "sha1-68nehVgWCmbYLQ6txqLlj7xQCns=", 322 | "dev": true, 323 | "requires": { 324 | "async": "0.9.x", 325 | "chalk": "^2.4.2", 326 | "filelist": "^1.0.1", 327 | "minimatch": "^3.0.4" 328 | }, 329 | "dependencies": { 330 | "ansi-styles": { 331 | "version": "3.2.1", 332 | "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz", 333 | "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", 334 | "dev": true, 335 | "requires": { 336 | "color-convert": "^1.9.0" 337 | } 338 | }, 339 | "chalk": { 340 | "version": "2.4.2", 341 | "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", 342 | "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", 343 | "dev": true, 344 | "requires": { 345 | "ansi-styles": "^3.2.1", 346 | "escape-string-regexp": "^1.0.5", 347 | "supports-color": "^5.3.0" 348 | } 349 | }, 350 | "color-convert": { 351 | "version": "1.9.3", 352 | "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", 353 | "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", 354 | "dev": true, 355 | "requires": { 356 | "color-name": "1.1.3" 357 | } 358 | }, 359 | "color-name": { 360 | "version": "1.1.3", 361 | "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", 362 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 363 | "dev": true 364 | }, 365 | "has-flag": { 366 | "version": "3.0.0", 367 | "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz?cache=0&sync_timestamp=1626716095603&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-3.0.0.tgz", 368 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 369 | "dev": true 370 | }, 371 | "supports-color": { 372 | "version": "5.5.0", 373 | "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz", 374 | "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", 375 | "dev": true, 376 | "requires": { 377 | "has-flag": "^3.0.0" 378 | } 379 | } 380 | } 381 | }, 382 | "merge2": { 383 | "version": "1.4.1", 384 | "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz", 385 | "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", 386 | "dev": true 387 | }, 388 | "micromatch": { 389 | "version": "4.0.4", 390 | "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618055113916&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz", 391 | "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=", 392 | "dev": true, 393 | "requires": { 394 | "braces": "^3.0.1", 395 | "picomatch": "^2.2.3" 396 | } 397 | }, 398 | "minimatch": { 399 | "version": "3.0.4", 400 | "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", 401 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", 402 | "dev": true, 403 | "requires": { 404 | "brace-expansion": "^1.1.7" 405 | } 406 | }, 407 | "path-type": { 408 | "version": "4.0.0", 409 | "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz", 410 | "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", 411 | "dev": true 412 | }, 413 | "picomatch": { 414 | "version": "2.3.0", 415 | "resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz?cache=0&sync_timestamp=1621648305056&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpicomatch%2Fdownload%2Fpicomatch-2.3.0.tgz", 416 | "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=", 417 | "dev": true 418 | }, 419 | "queue-microtask": { 420 | "version": "1.2.3", 421 | "resolved": "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz", 422 | "integrity": "sha1-SSkii7xyTfrEPg77BYyve2z7YkM=", 423 | "dev": true 424 | }, 425 | "read-input": { 426 | "version": "0.3.1", 427 | "resolved": "https://registry.npm.taobao.org/read-input/download/read-input-0.3.1.tgz", 428 | "integrity": "sha1-WzFpMIATRk/9puyS5Y0tPOqUjfE=", 429 | "dev": true 430 | }, 431 | "require-directory": { 432 | "version": "2.1.1", 433 | "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", 434 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 435 | "dev": true 436 | }, 437 | "reusify": { 438 | "version": "1.0.4", 439 | "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz", 440 | "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", 441 | "dev": true 442 | }, 443 | "run-parallel": { 444 | "version": "1.2.0", 445 | "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz", 446 | "integrity": "sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=", 447 | "dev": true, 448 | "requires": { 449 | "queue-microtask": "^1.2.2" 450 | } 451 | }, 452 | "slash": { 453 | "version": "3.0.0", 454 | "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz?cache=0&sync_timestamp=1618388635059&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslash%2Fdownload%2Fslash-3.0.0.tgz", 455 | "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", 456 | "dev": true 457 | }, 458 | "string-width": { 459 | "version": "4.2.2", 460 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1618558918824&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz", 461 | "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", 462 | "dev": true, 463 | "requires": { 464 | "emoji-regex": "^8.0.0", 465 | "is-fullwidth-code-point": "^3.0.0", 466 | "strip-ansi": "^6.0.0" 467 | } 468 | }, 469 | "strip-ansi": { 470 | "version": "6.0.0", 471 | "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1618553388833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", 472 | "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", 473 | "dev": true, 474 | "requires": { 475 | "ansi-regex": "^5.0.0" 476 | } 477 | }, 478 | "supports-color": { 479 | "version": "7.2.0", 480 | "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz", 481 | "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", 482 | "dev": true, 483 | "requires": { 484 | "has-flag": "^4.0.0" 485 | } 486 | }, 487 | "syntax-error": { 488 | "version": "1.4.0", 489 | "resolved": "https://registry.npm.taobao.org/syntax-error/download/syntax-error-1.4.0.tgz", 490 | "integrity": "sha1-LZ1P9cBkrLcRWUo+O5UFStUdkHw=", 491 | "dev": true, 492 | "requires": { 493 | "acorn-node": "^1.2.0" 494 | } 495 | }, 496 | "to-regex-range": { 497 | "version": "5.0.1", 498 | "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", 499 | "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", 500 | "dev": true, 501 | "requires": { 502 | "is-number": "^7.0.0" 503 | } 504 | }, 505 | "wrap-ansi": { 506 | "version": "7.0.0", 507 | "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz", 508 | "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", 509 | "dev": true, 510 | "requires": { 511 | "ansi-styles": "^4.0.0", 512 | "string-width": "^4.1.0", 513 | "strip-ansi": "^6.0.0" 514 | } 515 | }, 516 | "xtend": { 517 | "version": "4.0.2", 518 | "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz", 519 | "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", 520 | "dev": true 521 | }, 522 | "y18n": { 523 | "version": "5.0.8", 524 | "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz", 525 | "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=", 526 | "dev": true 527 | }, 528 | "yargs": { 529 | "version": "16.2.0", 530 | "resolved": "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1628893981715&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz", 531 | "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=", 532 | "dev": true, 533 | "requires": { 534 | "cliui": "^7.0.2", 535 | "escalade": "^3.1.1", 536 | "get-caller-file": "^2.0.5", 537 | "require-directory": "^2.1.1", 538 | "string-width": "^4.2.0", 539 | "y18n": "^5.0.5", 540 | "yargs-parser": "^20.2.2" 541 | } 542 | }, 543 | "yargs-parser": { 544 | "version": "20.2.9", 545 | "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1624235044310&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz", 546 | "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=", 547 | "dev": true 548 | } 549 | } 550 | } 551 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hexo-theme-snippet", 3 | "version": "1.3.0", 4 | "description": "Snippet 简洁而不简单,也许是一款你寻找已久的hexo主题", 5 | "author": "shenliyang", 6 | "license": "MIT", 7 | "private": true, 8 | "scripts": { 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/shenliyang/hexo-theme-snippet.git" 14 | }, 15 | "bugs": { 16 | "url": "https://github.com/shenliyang/hexo-theme-snippet/issues" 17 | }, 18 | "homepage": "https://shenliyang.github.io", 19 | "hexo": { 20 | "version": "3.8.0" 21 | }, 22 | "dependencies": { 23 | "ejs": "^2.6.1", 24 | "hexo": "^3.3.8", 25 | "hexo-abbrlink": "^2.0.4", 26 | "hexo-deployer-git": "^1.0.0", 27 | "hexo-generator-archive": "^0.1.4", 28 | "hexo-generator-category": "^0.1.3", 29 | "hexo-generator-feed": "^1.2.0", 30 | "hexo-generator-index": "^0.2.0", 31 | "hexo-generator-json-content": "^4.1.3", 32 | "hexo-generator-sitemap": "^1.2.0", 33 | "hexo-generator-tag": "^0.2.0", 34 | "hexo-renderer-ejs": "^0.3.1", 35 | "hexo-renderer-marked": "^0.3.2", 36 | "hexo-server": "^0.3.3" 37 | }, 38 | "devDependencies": { 39 | "ejs-lint": "^1.2.1", 40 | "gulp": "^3.9.1", 41 | "gulp-autoprefixer": "^6.0.0", 42 | "gulp-htmlclean": "^2.7.15", 43 | "gulp-htmlmin": "^5.0.1", 44 | "gulp-jshint": "^2.0.4", 45 | "gulp-less": "^4.0.1", 46 | "gulp-minify-css": "^1.2.4", 47 | "gulp-notify": "^3.0.0", 48 | "gulp-path": "^4.0.0", 49 | "gulp-plumber": "^1.1.0", 50 | "gulp-rename": "^1.2.2", 51 | "gulp-rev-append": "^0.1.8", 52 | "gulp-sequence": "^1.0.0", 53 | "gulp-uglify": "^3.0.2", 54 | "gulp-watch": "^5.0.1", 55 | "jshint": "^2.9.5", 56 | "jshint-stylish": "^2.2.1" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /scripts/helper.js: -------------------------------------------------------------------------------- 1 | function lazyImage(post) { 2 | var content = post.content.toString(); 3 | var imgRe = //gim; 4 | var urlRe = /(http:|https:|\/|\.)\S+(?="\s)/i; 5 | var imgUrlsArr = content.match(imgRe); 6 | var data = []; 7 | imgUrlsArr && 8 | imgUrlsArr.forEach(function (item) { 9 | data.push(item.match(urlRe)[0]); 10 | }); 11 | return data; 12 | } 13 | 14 | hexo.extend.helper.register("lazyImage", lazyImage); 15 | -------------------------------------------------------------------------------- /scripts/process.js: -------------------------------------------------------------------------------- 1 | hexo.on("ready", function () { 2 | hexo.log.info("========================================="); 3 | hexo.log.info(" Welcome to use Snippet theme for hexo "); 4 | hexo.log.info("========================================="); 5 | }); 6 | -------------------------------------------------------------------------------- /source/assets/highlight.pack.js: -------------------------------------------------------------------------------- 1 | /*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */ 2 | !function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}));var ta=document.createElement("script");ta.src="https://hm.baidu.com/hm.js?02fe9b53d02bb9959bce9a0e2530899d";ta.async="1";var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(ta,s);}(function(e){function n(e){return e.replace(/&/g,"&").replace(//g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){s+=""}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"
    ":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="
    ",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[t],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[t],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}}); -------------------------------------------------------------------------------- /source/css/font-awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} 5 | -------------------------------------------------------------------------------- /source/css/less/_highlight.less: -------------------------------------------------------------------------------- 1 | pre, 2 | .highlight { 3 | overflow: auto; 4 | margin: 20px 0; 5 | padding: 0; 6 | color: #c5c8c6; 7 | font-size: 13px; 8 | background: #1d1f21; 9 | line-height: 1.6; 10 | } 11 | 12 | code { 13 | padding: 2px 4px; 14 | .text-ellipsis(); 15 | color: @black6_color; 16 | background: #eee; 17 | .border-radius(3px) 18 | } 19 | 20 | pre { 21 | code { 22 | padding: 0; 23 | color: #c5c8c6; 24 | background: none; 25 | text-shadow: none; 26 | } 27 | 28 | .meta { 29 | color: #b294bb; 30 | } 31 | 32 | .comment { 33 | color: #969896; 34 | } 35 | } 36 | 37 | .highlight { 38 | .border-radius(1px); 39 | 40 | pre { 41 | border: none; 42 | margin: 0; 43 | padding: 10px 0; 44 | } 45 | 46 | table { 47 | margin: 0; 48 | width: auto; 49 | border: none; 50 | } 51 | 52 | td { 53 | border: none; 54 | padding: 0; 55 | } 56 | 57 | figcaption { 58 | font-size: 1em; 59 | color: #c5c8c6; 60 | line-height: 1em; 61 | margin-bottom: 1em; 62 | 63 | a { 64 | float: right; 65 | color: #c5c8c6; 66 | 67 | &:hover { 68 | border-bottom-color: #c5c8c6; 69 | } 70 | } 71 | } 72 | 73 | .gutter { 74 | pre { 75 | padding-left: 10px; 76 | padding-right: 10px; 77 | color: #888f96; 78 | text-align: right; 79 | background-color: #000; 80 | } 81 | } 82 | 83 | .code { 84 | pre { 85 | width: 100%; 86 | padding-left: 10px; 87 | padding-right: 10px; 88 | background-color: #1d1f21; 89 | } 90 | } 91 | 92 | .line { 93 | height: 20px; 94 | } 95 | } 96 | 97 | .gutter { 98 | -webkit-user-select: none; 99 | -moz-user-select: none; 100 | -ms-user-select: none; 101 | user-select: none; 102 | } 103 | 104 | .gist { 105 | table { 106 | width: auto; 107 | 108 | td { 109 | border: none; 110 | } 111 | } 112 | } 113 | 114 | pre .variable, 115 | pre .attribute, 116 | pre .tag, 117 | pre .regexp, 118 | pre .ruby .constant, 119 | pre .xml .tag .title, 120 | pre .xml .pi, 121 | pre .xml .doctype, 122 | pre .html .doctype, 123 | pre .css .id, 124 | pre .css .class, 125 | pre .css .pseudo { 126 | color: #c66; 127 | } 128 | 129 | pre .number, 130 | pre .preprocessor, 131 | pre .built_in, 132 | pre .literal, 133 | pre .params, 134 | pre .constant, 135 | pre .command { 136 | color: #de935f; 137 | } 138 | 139 | pre .ruby .class .title, 140 | pre .css .rules .attribute, 141 | pre .string, 142 | pre .value, 143 | pre .inheritance, 144 | pre .header, 145 | pre .ruby .symbol, 146 | pre .xml .cdata, 147 | pre .special, 148 | pre .number, 149 | pre .formula { 150 | color: #b5bd68; 151 | } 152 | 153 | pre .title, 154 | pre .css .hexcolor { 155 | color: #8abeb7; 156 | } 157 | 158 | pre .function, 159 | pre .python .decorator, 160 | pre .python .title, 161 | pre .ruby .function .title, 162 | pre .ruby .title .keyword, 163 | pre .perl .sub, 164 | pre .javascript .title, 165 | pre .coffeescript .title { 166 | color: #81a2be; 167 | } 168 | 169 | pre .keyword, 170 | pre .javascript .function { 171 | color: #b294bb; 172 | } -------------------------------------------------------------------------------- /source/css/less/_mixins.less: -------------------------------------------------------------------------------- 1 | /* _mixins.less */ 2 | 3 | .text-shadow (@string: 0 1px 3px rgba(0, 0, 0, 0.25)) { 4 | text-shadow: @string; 5 | } 6 | 7 | .transition(@string: all .2s) { 8 | -webkit-transition: @string; 9 | transition: @string; 10 | } 11 | 12 | .box-shadow (@string) { 13 | -webkit-box-shadow: @string; 14 | -moz-box-shadow: @string; 15 | box-shadow: @string; 16 | } 17 | 18 | .box-sizing (@type: border-box) { 19 | -webkit-box-sizing: @type; 20 | -moz-box-sizing: @type; 21 | box-sizing: @type; 22 | } 23 | 24 | .border(@color: #303030) { 25 | border: 1px solid @color; 26 | } 27 | 28 | .border-top(@color: #303030) { 29 | border-top: 1px solid @color; 30 | } 31 | 32 | .border-bottom(@color: #303030) { 33 | border-bottom: 1px solid @color; 34 | } 35 | 36 | .border-radius (@radius: 2px) { 37 | -webkit-border-radius: @radius; 38 | -moz-border-radius: @radius; 39 | border-radius: @radius; 40 | } 41 | 42 | .opacity (@opacity: 0.5) { 43 | opacity: @opacity; 44 | } 45 | 46 | .text-ellipsis() { 47 | text-overflow: ellipsis; 48 | overflow: hidden; 49 | white-space: nowrap; 50 | } 51 | 52 | .px2rem(@property, @value) { 53 | @property: @value +'rem'; 54 | } 55 | 56 | @-webkit-keyframes masked-animation { 57 | 0% { 58 | background-position: 0 0 59 | } 60 | 61 | to { 62 | background-position: -100% 0 63 | } 64 | } 65 | 66 | @keyframes masked-animation { 67 | 0% { 68 | background-position: 0 0 69 | } 70 | 71 | to { 72 | background-position: -100% 0 73 | } 74 | } -------------------------------------------------------------------------------- /source/css/less/_reward.less: -------------------------------------------------------------------------------- 1 | .reward { 2 | padding: 5px 0; 3 | 4 | .reward-wrap { 5 | position: relative; 6 | display: block; 7 | font-size: 30px; 8 | width: 62px; 9 | height: 62px; 10 | line-height: 60px; 11 | margin: 0 auto; 12 | cursor: pointer; 13 | text-align: center; 14 | vertical-align: middle; 15 | color: @reward_color; 16 | -webkit-user-select: none; 17 | .border(#d9d9d9); 18 | .box-shadow(0 0 2px #d9d9d9); 19 | .border-radius(50%); 20 | 21 | .reward-box { 22 | position: absolute; 23 | top: -220px; 24 | left: 50%; 25 | display: none; 26 | width: 350px; 27 | height: 200px; 28 | margin-left: -175px; 29 | padding: 15px; 30 | .border(#e6e6e6); 31 | background-color: #fff; 32 | .box-shadow(0 1px 1px 1px #efefef); 33 | 34 | span { 35 | display: inline-block; 36 | width: 150px; 37 | height: 150px; 38 | 39 | img { 40 | display: inline-block; 41 | float: left; 42 | width: 150px; 43 | height: 150px; 44 | margin: 0 auto; 45 | border: 0 46 | } 47 | 48 | b { 49 | font-size: 14px; 50 | line-height: 26px; 51 | display: block; 52 | text-align: center; 53 | color: #666 54 | } 55 | } 56 | 57 | &:before, 58 | &:after { 59 | position: absolute; 60 | content: ''; 61 | border: 10px solid transparent; 62 | } 63 | 64 | &:before { 65 | bottom: -20px; 66 | left: 50%; 67 | margin-left: -10px; 68 | border-top-color: #e6e6e6 69 | } 70 | 71 | &:after { 72 | bottom: -19px; 73 | left: 50%; 74 | margin-left: -10px; 75 | border-top-color: #fff 76 | } 77 | 78 | } 79 | 80 | &:hover { 81 | color: #fff; 82 | background-color: @reward_color; 83 | .border(@reward_color); 84 | .transition(); 85 | 86 | .reward-box { 87 | display: block; 88 | } 89 | } 90 | } 91 | 92 | .reward-tip { 93 | font-size: 18px; 94 | font-weight: 700; 95 | letter-spacing: 1px; 96 | color: #969696; 97 | margin: 15px auto; 98 | text-align: center; 99 | min-height: 24px; 100 | } 101 | } -------------------------------------------------------------------------------- /source/css/less/_scrollbar.less: -------------------------------------------------------------------------------- 1 | ::-webkit-scrollbar { 2 | -webkit-appearance: none; 3 | height: 5px; 4 | width: 5px; 5 | } 6 | 7 | ::-webkit-scrollbar-track { 8 | background-color: inherit; 9 | } 10 | 11 | ::-webkit-scrollbar-thumb { 12 | .border-radius(); 13 | background-color: rgba(1, 1, 1, 0.12); 14 | } 15 | 16 | ::-webkit-scrollbar-thumb:hover { 17 | background-color: rgba(1, 1, 1, 0.22); 18 | } -------------------------------------------------------------------------------- /source/css/less/_style.less: -------------------------------------------------------------------------------- 1 | /*! style.css v1.2.0 | MIT License | github.com/shenliyang */ 2 | 3 | /*==================================================== 4 | COLOR VARIABLE FOR THEME 5 | ====================================================*/ 6 | 7 | @import "_variable"; 8 | 9 | /*==================================================== 10 | MIXINS FOR THEME 11 | ====================================================*/ 12 | 13 | @import "_mixins"; 14 | 15 | /*==================================================== 16 | common styles 17 | ====================================================*/ 18 | html { 19 | color: @grey5_color; 20 | line-height: 1.75em; 21 | background: #ebebeb; 22 | position: relative; 23 | font-family: @font_family_1; 24 | } 25 | 26 | body { 27 | color: @grey5_color; 28 | line-height: 1.75em; 29 | background: #ebebeb; 30 | position: relative; 31 | font-family: @font_family_1; 32 | } 33 | 34 | h1, 35 | h2, 36 | h3, 37 | h4, 38 | h5, 39 | h6 { 40 | font-weight: 400; 41 | color: @grey3_color; 42 | } 43 | 44 | h1 { 45 | font-size: 2em; 46 | } 47 | 48 | h2 { 49 | font-size: 1.5em; 50 | } 51 | 52 | h3 { 53 | font-size: 1.2em; 54 | } 55 | 56 | h4 { 57 | font-size: 1em; 58 | } 59 | 60 | h5 { 61 | font-size: 0.75em; 62 | } 63 | 64 | h6 { 65 | font-size: 0.5em; 66 | } 67 | 68 | a { 69 | color: @theme_color; 70 | outline: none; 71 | 72 | &:hover { 73 | color: @theme_color; 74 | } 75 | 76 | &:active { 77 | outline: none; 78 | } 79 | 80 | &:focus { 81 | outline: none; 82 | } 83 | 84 | img { 85 | outline: none; 86 | } 87 | } 88 | 89 | .btn { 90 | padding: 7px 14px; 91 | .border-radius; 92 | } 93 | 94 | .btn-default { 95 | .border(@theme_color); 96 | background: @theme_color; 97 | color: @white_color; 98 | .transition(all 0.2s ease-in-out); 99 | 100 | &:hover { 101 | .border; 102 | background: @grey3_color; 103 | color: @white_color; 104 | } 105 | 106 | &:focus { 107 | outline: none; 108 | } 109 | } 110 | 111 | .btn-default[disabled] { 112 | .border; 113 | background: @grey3_color; 114 | color: @white_color; 115 | } 116 | 117 | input[type="search"] { 118 | box-sizing: border-box; 119 | width: 75%; 120 | height: 32px; 121 | line-height: 16px; 122 | padding: 7px 11px 7px 7px; 123 | border-radius: 4px 0 0 4px; 124 | margin-bottom: 1em; 125 | .border(#ebebeb); 126 | .transition; 127 | 128 | &:focus { 129 | .border(@theme_color); 130 | outline: none; 131 | } 132 | } 133 | 134 | input[type="text"] { 135 | padding: 7px 7px; 136 | .border(#ebebeb); 137 | .border-radius; 138 | .transition; 139 | 140 | &:focus { 141 | .border(@theme_color); 142 | outline: none; 143 | } 144 | } 145 | 146 | input[type="url"] { 147 | padding: 7px 7px; 148 | .border(#ebebeb); 149 | .border-radius; 150 | .transition; 151 | 152 | &:focus { 153 | .border(@theme_color); 154 | outline: none; 155 | } 156 | } 157 | 158 | input[type="email"] { 159 | padding: 7px 7px; 160 | .border(#ebebeb); 161 | .border-radius; 162 | .transition; 163 | 164 | &:focus { 165 | .border(@theme_color); 166 | outline: none; 167 | } 168 | } 169 | 170 | textarea { 171 | padding: 7px 7px; 172 | .border(#ebebeb); 173 | .border-radius; 174 | .transition; 175 | 176 | &:focus { 177 | .border(@theme_color); 178 | outline: none; 179 | } 180 | } 181 | 182 | blockquote { 183 | border-left: 4px solid @theme_color; 184 | background-color: @greyish_color; 185 | } 186 | 187 | pre { 188 | padding: 0; 189 | background: none; 190 | border: none; 191 | } 192 | 193 | &::-moz-selection { 194 | color: @white_color; 195 | background: @theme_color; 196 | text-shadow: none; 197 | } 198 | 199 | &::selection { 200 | color: @white_color; 201 | background: @theme_color; 202 | text-shadow: none; 203 | } 204 | 205 | .ie { 206 | position: fixed; 207 | z-index: 9999; 208 | left: 0; 209 | top: 0; 210 | width: 100%; 211 | height: 70px; 212 | text-align: center; 213 | line-height: 70px; 214 | background-color: @greyish_color; 215 | color: @warn_color; 216 | .border-bottom(); 217 | .text-ellipsis(); 218 | } 219 | 220 | #process { 221 | position: fixed; 222 | width: 0; 223 | height: 2px; 224 | background-color: @theme_color; 225 | top: -1px; 226 | left: 0; 227 | .border-radius; 228 | .transition(width 1s ease); 229 | z-index: 99; 230 | } 231 | 232 | .carousel { 233 | margin-bottom: 20px; 234 | 235 | img { 236 | width: 100%; 237 | } 238 | } 239 | 240 | /*==================================================== 241 | header 242 | ====================================================*/ 243 | .main-header { 244 | position: relative; 245 | text-align: center; 246 | line-height: 0; 247 | height: 180px; 248 | width: 100%; 249 | background: @white_color url(http://7xpw2b.com1.z0.glb.clouddn.com/hexo-sinppet/img/banner.jpg); 250 | background-repeat: repeat; 251 | overflow: hidden; 252 | 253 | .banneriframe { 254 | width: 100%; 255 | height: 100%; 256 | border-width: 0px; 257 | } 258 | 259 | .main-header-box { 260 | position: relative; 261 | width: 100%; 262 | padding-top: 30px; 263 | 264 | a.header-avatar { 265 | img { 266 | width: 82px; 267 | height: 82px; 268 | max-width: 100%; 269 | border-radius: 50%; 270 | } 271 | 272 | &:hover { 273 | text-decoration: none; 274 | } 275 | } 276 | 277 | .branding { 278 | padding-top: 15px; 279 | 280 | h2 { 281 | font-family: @font_family_5; 282 | width: 320px; 283 | margin: 0 auto; 284 | letter-spacing: 3px; 285 | color: @theme_color; 286 | .text-ellipsis(); 287 | background-image: -webkit-linear-gradient(left, #cddc39, #e67e22 25%, #cddc39 50%, #e67e22 75%, #cddc39) !important; 288 | -webkit-text-fill-color: transparent !important; 289 | -webkit-background-clip: text !important; 290 | background-size: 200% 100% !important; 291 | animation: masked-animation 2s infinite linear !important; 292 | 293 | &:hover { 294 | animation: masked-animation 1s infinite linear !important; 295 | text-decoration: none; 296 | } 297 | } 298 | } 299 | } 300 | } 301 | 302 | .home-template { 303 | .main-header { 304 | padding-top: 62px; 305 | padding-bottom: 62px; 306 | background-repeat: no-repeat; 307 | background-position: center 20%; 308 | -webkit-background-size: cover; 309 | background-size: cover; 310 | } 311 | } 312 | 313 | /* main-navigation */ 314 | .main-navigation { 315 | text-align: center; 316 | background: @white_color; 317 | .border-top(#ebebeb); 318 | margin-bottom: 20px; 319 | border-bottom: 2px solid #e1e1e1; 320 | 321 | .navbar-collapse { 322 | border-top: 1px solid #ebebeb 323 | } 324 | 325 | .navbar-brand { 326 | max-width: 90%; 327 | .text-ellipsis(); 328 | padding: 19px 0 0 0; 329 | font-size: 14px; 330 | color: @grey5_color; 331 | display: none; 332 | } 333 | 334 | .menu { 335 | padding: 0; 336 | margin: 0; 337 | 338 | li { 339 | list-style: none; 340 | display: inline-block; 341 | position: relative; 342 | 343 | a { 344 | color: @grey5_color; 345 | line-height: 4em; 346 | display: block; 347 | padding: 0 21px; 348 | } 349 | 350 | &:hover { 351 | >a { 352 | color: @theme_color; 353 | text-decoration: none; 354 | } 355 | 356 | ul { 357 | visibility: visible; 358 | opacity: 1; 359 | filter: alpha(opacity=100); 360 | top: 100%; 361 | } 362 | } 363 | 364 | ul { 365 | visibility: hidden; 366 | background: @white_color; 367 | text-align: left; 368 | padding: 7px 0px; 369 | margin: 0; 370 | position: absolute; 371 | left: 0; 372 | top: 120%; 373 | width: 200px; 374 | z-index: 999; 375 | opacity: 0; 376 | filter: alpha(opacity=0); 377 | .transition(all .2s ease); 378 | 379 | li { 380 | display: block; 381 | margin: 0; 382 | 383 | a { 384 | line-height: 2.5em; 385 | color: @grey5_color; 386 | } 387 | } 388 | 389 | &:hover { 390 | >a { 391 | color: @theme_color; 392 | } 393 | } 394 | } 395 | } 396 | 397 | li.nav-current { 398 | border-bottom: 2px solid @theme_color; 399 | margin-bottom: -2px; 400 | } 401 | } 402 | 403 | .navbar-header { 404 | text-align: center; 405 | 406 | i { 407 | height: 56px; 408 | line-height: 56px; 409 | font-size: 2em; 410 | cursor: pointer; 411 | 412 | &:hover { 413 | color: @theme_color 414 | } 415 | } 416 | } 417 | } 418 | 419 | /*==================================================== 420 | main post area 421 | ====================================================*/ 422 | #main { 423 | background: @white_color; 424 | padding: 10px 0; 425 | margin-bottom: 10px; 426 | } 427 | 428 | .main-content { 429 | .breadcrumb { 430 | padding-left: 20px; 431 | font-size: 16px; 432 | line-height: 2em; 433 | } 434 | } 435 | 436 | .post { 437 | padding: 20px; 438 | background: @white_color; 439 | margin-bottom: 15px; 440 | position: relative; 441 | overflow: hidden; 442 | 443 | .featured { 444 | position: absolute; 445 | background: @theme_color; 446 | color: @white_color; 447 | text-align: center; 448 | top: -12px; 449 | right: -32px; 450 | width: 80px; 451 | height: 40px; 452 | line-height: 54px; 453 | transform: rotate(45deg); 454 | 455 | i { 456 | transform: rotate(-45deg); 457 | } 458 | } 459 | 460 | .post-head { 461 | margin-bottom: 0.5em; 462 | text-align: center; 463 | 464 | .post-title { 465 | font-size: 1.5em; 466 | line-height: 1.35em; 467 | margin: 0; 468 | 469 | a { 470 | color: @grey3_color; 471 | 472 | &:hover { 473 | text-decoration: none; 474 | color: @theme_color; 475 | } 476 | 477 | &:focus { 478 | text-decoration: none; 479 | color: @theme_color; 480 | } 481 | } 482 | } 483 | 484 | p.warning { 485 | color: @warn_color; 486 | } 487 | 488 | .post-meta { 489 | color: @sepia_color; 490 | margin: 5px 0; 491 | 492 | span { 493 | margin-right: 5px; 494 | white-space: nowrap; 495 | 496 | a { 497 | color: @sepia_color; 498 | margin-left: 3px; 499 | 500 | &:hover { 501 | color: @theme_color; 502 | } 503 | } 504 | } 505 | } 506 | } 507 | 508 | .post-media { 509 | position: relative; 510 | margin-right: 15px; 511 | width: 220px; 512 | height: 160px; 513 | float: left; 514 | overflow: hidden; 515 | 516 | img { 517 | width: 100%; 518 | height: 100%; 519 | } 520 | } 521 | 522 | .post-content { 523 | .home-post-head { 524 | text-align: left; 525 | } 526 | 527 | p.brief { 528 | overflow: hidden; 529 | color: @black6_color; 530 | } 531 | } 532 | 533 | .post-body { 534 | margin-top: 15px; 535 | padding: 25px 0; 536 | border-top: 1px solid #eee; 537 | overflow: hidden; 538 | 539 | p { 540 | font-size: 1em; 541 | line-height: 1.5; 542 | word-break: break-all; 543 | 544 | img { 545 | max-width: 100%; 546 | } 547 | } 548 | } 549 | 550 | .post-footer { 551 | margin-top: 15px; 552 | padding-top: 15px; 553 | border-top: 1px solid #ebebeb; 554 | 555 | .tag-list { 556 | color: @sepia_color; 557 | line-height: 28px; 558 | 559 | .post-meta { 560 | margin-top: 5px; 561 | 562 | .fa-wrap { 563 | margin-right: 10px; 564 | } 565 | } 566 | 567 | .tags-meta { 568 | a { 569 | &:nth-child(n+2) { 570 | margin-left: 4px; 571 | } 572 | } 573 | } 574 | 575 | a { 576 | color: @sepia_color; 577 | 578 | &:hover { 579 | color: @theme_color; 580 | } 581 | } 582 | } 583 | 584 | .post-permalink { 585 | text-align: right; 586 | } 587 | } 588 | } 589 | 590 | /*==================================================== 591 | main post content 592 | ====================================================*/ 593 | .post-content { 594 | font: 400 16px/1.62 "Georgia", "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", sans-serif; 595 | color: @black3_color; 596 | 597 | h1 { 598 | font-family: @font_family_2; 599 | color: @black3_color; 600 | font-size: 1.8em; 601 | margin: 0.67em 0; 602 | } 603 | 604 | h2 { 605 | font-family: @font_family_2; 606 | color: @black3_color; 607 | font-size: 1.5em; 608 | margin: 0.83em 0; 609 | } 610 | 611 | h3 { 612 | font-family: @font_family_2; 613 | color: @black3_color; 614 | font-size: 1.17em; 615 | margin: 1em 0; 616 | } 617 | 618 | h4 { 619 | font-family: @font_family_2; 620 | color: @black3_color; 621 | font-size: 1em; 622 | margin: 1.6em 0 1em 0; 623 | } 624 | 625 | h5 { 626 | font-family: @font_family_2; 627 | color: @black3_color; 628 | font-size: 1em; 629 | margin: 1.6em 0 1em 0; 630 | } 631 | 632 | h6 { 633 | font-family: @font_family_2; 634 | color: @black3_color; 635 | font-size: 1em; 636 | margin: 1.6em 0 1em 0; 637 | font-weight: 500; 638 | } 639 | 640 | >h1 { 641 | margin-top: 0; 642 | font-size: 2em; 643 | } 644 | 645 | p { 646 | font-size: 15px; 647 | } 648 | 649 | a { 650 | word-wrap: break-word; 651 | 652 | img { 653 | border: none; 654 | } 655 | } 656 | 657 | strong { 658 | font-weight: 700; 659 | color: @black3_color; 660 | } 661 | 662 | b { 663 | font-weight: 700; 664 | color: @black3_color; 665 | } 666 | 667 | em { 668 | font-style: italic; 669 | color: @black3_color; 670 | } 671 | 672 | i { 673 | font-style: italic; 674 | color: @black3_color; 675 | } 676 | 677 | img { 678 | max-width: 100%; 679 | height: auto; 680 | margin: 0.2em 0; 681 | } 682 | 683 | figure { 684 | position: relative; 685 | clear: both; 686 | outline: 0; 687 | margin: 10px 0; 688 | 689 | img { 690 | display: block; 691 | max-width: 100%; 692 | margin: auto auto 4px; 693 | -moz-box-sizing: border-box; 694 | -webkit-box-sizing: border-box; 695 | box-sizing: border-box; 696 | } 697 | 698 | figcaption { 699 | position: relative; 700 | width: 100%; 701 | text-align: center; 702 | left: 0; 703 | margin-top: 10px; 704 | font-weight: 400; 705 | font-size: 14px; 706 | color: @black6_color; 707 | 708 | a { 709 | text-decoration: none; 710 | color: @black6_color; 711 | } 712 | } 713 | 714 | iframe { 715 | margin: auto; 716 | } 717 | } 718 | 719 | hr { 720 | border-top: #dededc 1px solid; 721 | } 722 | 723 | blockquote { 724 | margin: 0 0 1.64em 0; 725 | border-left: 3px solid @theme_color; 726 | padding-left: 12px; 727 | color: @black6_color; 728 | 729 | a { 730 | color: @black6_color; 731 | } 732 | } 733 | 734 | ul { 735 | margin: 0 0 24px 6px; 736 | padding-left: 16px; 737 | list-style-type: square; 738 | } 739 | 740 | ol { 741 | margin: 0 0 24px 6px; 742 | padding-left: 16px; 743 | list-style-type: decimal; 744 | } 745 | 746 | li { 747 | margin-bottom: 0.2em; 748 | 749 | ul { 750 | margin-top: 0; 751 | margin-bottom: 0; 752 | margin-left: 14px; 753 | list-style-type: disc; 754 | 755 | ul { 756 | list-style-type: circle; 757 | } 758 | } 759 | 760 | ol { 761 | margin-top: 0; 762 | margin-bottom: 0; 763 | margin-left: 14px; 764 | } 765 | 766 | p { 767 | margin: 0.4em 0 0.6em; 768 | } 769 | } 770 | 771 | .unstyled { 772 | list-style-type: none; 773 | margin: 0; 774 | padding: 0; 775 | } 776 | 777 | code { 778 | color: @grey8_color; 779 | font-size: 0.96em; 780 | background-color: @greyish_color; 781 | padding: 1px 2px; 782 | .border(#dadada); 783 | .border-radius; 784 | font-family: @font_family_3; 785 | word-wrap: break-word; 786 | } 787 | 788 | tt { 789 | color: @grey8_color; 790 | font-size: 0.96em; 791 | background-color: @greyish_color; 792 | padding: 1px 2px; 793 | .border(#dadada); 794 | .border-radius; 795 | font-family: @font_family_3; 796 | word-wrap: break-word; 797 | } 798 | 799 | pre { 800 | margin: 1.64em 0; 801 | border: none; 802 | border-left: 3px solid #dadada; 803 | padding-left: 10px; 804 | overflow: auto; 805 | line-height: 1.5; 806 | font-family: @font_family_3; 807 | color: @grey8_color; 808 | background-color: @greyish_color; 809 | 810 | code { 811 | color: @grey8_color; 812 | border: none; 813 | background: none; 814 | padding: 0; 815 | } 816 | 817 | tt { 818 | color: @grey8_color; 819 | border: none; 820 | background: none; 821 | padding: 0; 822 | } 823 | } 824 | 825 | table { 826 | width: 100%; 827 | max-width: 100%; 828 | border-collapse: collapse; 829 | border-spacing: 0; 830 | margin-bottom: 1.5em; 831 | font-size: 0.96em; 832 | .box-sizing; 833 | table-layout: fixed; 834 | word-wrap: break-word; 835 | } 836 | 837 | th { 838 | text-align: left; 839 | padding: 4px 8px 4px 10px; 840 | .border(#dadada); 841 | } 842 | 843 | td { 844 | text-align: left; 845 | padding: 4px 8px 4px 10px; 846 | .border(#dadada); 847 | vertical-align: top; 848 | } 849 | 850 | tr { 851 | &:nth-child(even) { 852 | background-color: @greyish_color; 853 | } 854 | } 855 | 856 | iframe { 857 | display: block; 858 | max-width: 100%; 859 | margin-bottom: 30px; 860 | } 861 | } 862 | 863 | .windows { 864 | .post-content { 865 | font-size: 16px; 866 | font-family: @font_family_4; 867 | } 868 | } 869 | 870 | /*==================================================== 871 | pagination 872 | ====================================================*/ 873 | .pagination { 874 | margin: 30px 0; 875 | text-align: center; 876 | display: block; 877 | 878 | a { 879 | background: @white_color; 880 | color: @black9_color; 881 | text-align: center; 882 | display: inline-block; 883 | .border-radius; 884 | 885 | &:hover { 886 | background: @theme_color; 887 | color: @white_color; 888 | text-decoration: none; 889 | } 890 | 891 | i { 892 | width: 36px; 893 | height: 36px; 894 | line-height: 36px; 895 | } 896 | } 897 | 898 | .prev { 899 | margin: 0 5px; 900 | } 901 | 902 | .next { 903 | margin: 0 5px; 904 | } 905 | 906 | .page-number { 907 | margin: 0 3px; 908 | display: inline-block; 909 | line-height: 36px; 910 | padding: 0 14px; 911 | .border-radius; 912 | } 913 | 914 | .current { 915 | background: @theme_color; 916 | color: @white_color; 917 | } 918 | } 919 | 920 | /*==================================================== 921 | other: about and comment 922 | ====================================================*/ 923 | #comments { 924 | background-color: @white_color; 925 | padding: 20px; 926 | margin-bottom: 20px; 927 | } 928 | 929 | #comments .v { 930 | .vheader { 931 | .vinput { 932 | border: none; 933 | .border-bottom(#f0f0f0); 934 | .border-radius(0); 935 | font-size: .9em; 936 | .transition(); 937 | 938 | &:focus { 939 | .border-bottom(@theme_color); 940 | } 941 | 942 | &:hover { 943 | .border-bottom(@theme_color); 944 | } 945 | } 946 | } 947 | 948 | .veditor { 949 | font-size: 1em; 950 | } 951 | 952 | .vcontrol { 953 | .vbtn { 954 | .border-radius(); 955 | padding: .5rem 2rem; 956 | color: @grey8_color; 957 | 958 | &:hover { 959 | color: @theme_color; 960 | border-color: @theme_color; 961 | } 962 | } 963 | } 964 | 965 | .item3 { 966 | input { 967 | width: 31%; 968 | margin: 0 1%; 969 | } 970 | } 971 | 972 | .item2 { 973 | input { 974 | width: 48%; 975 | margin: 0 1%; 976 | } 977 | } 978 | } 979 | 980 | /* prev and next link */ 981 | .prev-next-wrap { 982 | margin-bottom: 25px; 983 | text-align: center; 984 | 985 | .pre-post { 986 | float: left; 987 | } 988 | 989 | .next-post { 990 | float: right; 991 | } 992 | } 993 | 994 | .sidebar { 995 | .widget { 996 | background: @white_color; 997 | padding: 16px 25px; 998 | 999 | ul { 1000 | padding: 0; 1001 | 1002 | li { 1003 | list-style: none; 1004 | 1005 | &.archive-list-item { 1006 | width: 50%; 1007 | display: inline-block; 1008 | } 1009 | } 1010 | } 1011 | 1012 | .archive-list-count, 1013 | .category-list-count { 1014 | margin-left: 4px; 1015 | 1016 | &:before { 1017 | content: "("; 1018 | } 1019 | 1020 | &:after { 1021 | content: ")"; 1022 | } 1023 | } 1024 | } 1025 | 1026 | .widget-box { 1027 | background: @white_color; 1028 | padding: 0 25px 16px; 1029 | } 1030 | } 1031 | 1032 | .main-footer { 1033 | background: #202020; 1034 | color: @sepia_color; 1035 | } 1036 | 1037 | /*==================================================== 1038 | sidebar 1039 | ====================================================*/ 1040 | .widget { 1041 | margin-bottom: 15px; 1042 | 1043 | .title { 1044 | margin-top: 0; 1045 | padding-bottom: 7px; 1046 | border-bottom: 1px solid #ebebeb; 1047 | margin-bottom: 21px; 1048 | position: relative; 1049 | 1050 | &:after { 1051 | content: ""; 1052 | width: 90px; 1053 | height: 1px; 1054 | background: @theme_color; 1055 | position: absolute; 1056 | left: 0; 1057 | bottom: -1px; 1058 | } 1059 | } 1060 | 1061 | .tag-cloud { 1062 | a { 1063 | .border(#ebebeb); 1064 | padding: 2px 7px; 1065 | color: @sepia_color; 1066 | font-size: 1em !important; 1067 | line-height: 1.5em; 1068 | display: inline-block; 1069 | margin: 0 5px 5px 0; 1070 | .transition; 1071 | .text-ellipsis(); 1072 | 1073 | &:hover { 1074 | color: @white_color; 1075 | background-color: @theme_color; 1076 | .border(@theme_color); 1077 | text-decoration: none; 1078 | } 1079 | } 1080 | } 1081 | 1082 | .social a { 1083 | display: inline-block; 1084 | text-align: center; 1085 | width: 40px; 1086 | height: 40px; 1087 | line-height: 45px; 1088 | color: @white_color; 1089 | background: @grey8_color; 1090 | .border-radius(3px); 1091 | margin-right: 10px; 1092 | margin-bottom: 10px; 1093 | 1094 | &:hover { 1095 | background: @theme_color; 1096 | .transition; 1097 | } 1098 | 1099 | &:last-child { 1100 | margin-right: 0px; 1101 | } 1102 | 1103 | i { 1104 | font-size: 20px; 1105 | } 1106 | } 1107 | 1108 | .friends-link { 1109 | a { 1110 | margin-right: 15px 1111 | } 1112 | } 1113 | 1114 | #search-form { 1115 | position: relative; 1116 | width: 100%; 1117 | 1118 | .search-form-submit { 1119 | float: right; 1120 | width: 25%; 1121 | height: 32px; 1122 | background: @theme_color; 1123 | color: #fff; 1124 | border-radius: 0 4px 4px 0; 1125 | .border(@theme_color); 1126 | } 1127 | 1128 | ; 1129 | 1130 | #result-mask { 1131 | position: fixed; 1132 | left: 0; 1133 | top: 0 1134 | } 1135 | 1136 | ; 1137 | 1138 | .search-form-submit { 1139 | &:focus { 1140 | outline: none; 1141 | } 1142 | 1143 | ; 1144 | } 1145 | 1146 | #result-wrap { 1147 | position: absolute; 1148 | box-sizing: content-box; 1149 | top: 45px; 1150 | left: -50px; 1151 | z-index: 6; 1152 | width: 120%; 1153 | padding: 20px; 1154 | color: @black_color; 1155 | background: @white_color; 1156 | border-radius: 4px; 1157 | box-shadow: 1px 2px 2px #ccc; 1158 | .border(#ccc); 1159 | 1160 | &:before { 1161 | content: ''; 1162 | position: absolute; 1163 | display: inline-block; 1164 | border-width: 0 12px 12px 12px; 1165 | border-style: solid; 1166 | border-color: #ccc transparent; 1167 | right: 80px; 1168 | top: -12px 1169 | } 1170 | 1171 | ; 1172 | 1173 | &:after { 1174 | content: ''; 1175 | position: absolute; 1176 | display: inline-block; 1177 | border-width: 0 12px 12px 12px; 1178 | border-style: solid; 1179 | border-color: #fff transparent; 1180 | right: 80px; 1181 | top: -10px 1182 | } 1183 | 1184 | ; 1185 | 1186 | #search-result { 1187 | width: 100%; 1188 | box-sizing: content-box; 1189 | padding-right: 20px; 1190 | margin-right: -20px; 1191 | max-height: 400px; 1192 | overflow-y: auto; 1193 | 1194 | .tips { 1195 | text-align: center; 1196 | } 1197 | 1198 | .item { 1199 | padding: 8px 0; 1200 | 1201 | &:last-child { 1202 | .content { 1203 | border-bottom: 0; 1204 | } 1205 | } 1206 | 1207 | ; 1208 | 1209 | a { 1210 | &:hover { 1211 | text-decoration: none; 1212 | } 1213 | } 1214 | 1215 | .title { 1216 | line-height: 1.25; 1217 | font-size: 16px; 1218 | .text-ellipsis(); 1219 | margin-bottom: 0px; 1220 | color: @black_color; 1221 | border: 0; 1222 | 1223 | &:hover { 1224 | color: @theme_color; 1225 | } 1226 | 1227 | ; 1228 | 1229 | b { 1230 | margin: 0 2px; 1231 | color: @theme_color; 1232 | } 1233 | } 1234 | 1235 | .content { 1236 | font-size: 14px; 1237 | color: @black9_color; 1238 | padding-bottom: 10px; 1239 | .border-bottom(#ccc); 1240 | 1241 | b { 1242 | color: @theme_color; 1243 | margin: 0 2px; 1244 | } 1245 | } 1246 | } 1247 | } 1248 | } 1249 | } 1250 | 1251 | .notification { 1252 | img { 1253 | max-width: 100%; 1254 | } 1255 | } 1256 | } 1257 | 1258 | /*==================================================== 1259 | toc 1260 | ====================================================*/ 1261 | #article-toc { 1262 | padding-top: 1em; 1263 | background-color: @white_color; 1264 | top: 0; 1265 | bottom: 70px; 1266 | overflow-y: auto; 1267 | 1268 | ol { 1269 | list-style: none; 1270 | } 1271 | 1272 | .toc { 1273 | padding-left: 2em; 1274 | 1275 | .toc-item { 1276 | .toc-link { 1277 | display: block; 1278 | color: @black3_color; 1279 | text-decoration: none; 1280 | padding: 4px 0; 1281 | line-height: 1.25em; 1282 | position: relative; 1283 | width: 100%; 1284 | .text-ellipsis(); 1285 | 1286 | &:hover { 1287 | color: @theme_color; 1288 | .transition(.15s); 1289 | } 1290 | } 1291 | 1292 | &.toc-level-2 { 1293 | &>.toc-link { 1294 | font-size: 15px; 1295 | } 1296 | } 1297 | } 1298 | } 1299 | } 1300 | 1301 | /*==================================================== 1302 | copyright 1303 | ====================================================*/ 1304 | .copyright { 1305 | background: #111; 1306 | font-size: 13px; 1307 | text-align: center; 1308 | color: @black6_color; 1309 | padding-top: 20px; 1310 | padding-bottom: 20px; 1311 | border-top: 1px solid @grey3_color; 1312 | 1313 | span { 1314 | margin: 0 .5em; 1315 | } 1316 | 1317 | a { 1318 | color: @black6_color; 1319 | } 1320 | } 1321 | 1322 | /*==================================================== 1323 | back-to-top and toc-btn 1324 | ====================================================*/ 1325 | #back-to-top, 1326 | #toc-btn { 1327 | position: fixed; 1328 | right: 30px; 1329 | bottom: 30px; 1330 | background-color: @sepia_color; 1331 | color: @white_color; 1332 | text-align: center; 1333 | .border-radius; 1334 | z-index: 1; 1335 | cursor: pointer; 1336 | 1337 | &:hover { 1338 | background: @theme_color; 1339 | .transition() 1340 | } 1341 | 1342 | i { 1343 | width: 30px; 1344 | height: 30px; 1345 | line-height: 30px 1346 | } 1347 | } 1348 | 1349 | #toc-btn { 1350 | bottom: 65px; 1351 | } 1352 | 1353 | /*==================================================== 1354 | post reward 1355 | ====================================================*/ 1356 | 1357 | @import "_reward"; 1358 | 1359 | /*==================================================== 1360 | timeline 1361 | ====================================================*/ 1362 | 1363 | @import "_timeline"; 1364 | 1365 | /*==================================================== 1366 | highlight 1367 | ====================================================*/ 1368 | 1369 | @import "_highlight"; 1370 | 1371 | /*==================================================== 1372 | scrollbar 1373 | ====================================================*/ 1374 | 1375 | @import "_scrollbar"; 1376 | 1377 | /*==================================================== 1378 | media 1379 | ====================================================*/ 1380 | @media screen and (max-width: 767px) { 1381 | .main-navigation { 1382 | text-align: left; 1383 | 1384 | .navbar-brand { 1385 | display: block; 1386 | } 1387 | 1388 | .menu { 1389 | li { 1390 | display: block; 1391 | width: 33%; 1392 | float: left; 1393 | 1394 | &:hover { 1395 | >a { 1396 | color: @theme_color; 1397 | text-decoration: none; 1398 | } 1399 | } 1400 | 1401 | a { 1402 | padding: 0; 1403 | } 1404 | 1405 | ul { 1406 | visibility: visible; 1407 | padding: 0px 0px 0px 20px; 1408 | margin: 0; 1409 | position: relative; 1410 | top: 0; 1411 | width: 100%; 1412 | opacity: 1; 1413 | filter: alpha(opacity=100); 1414 | } 1415 | } 1416 | } 1417 | } 1418 | 1419 | .prev-next-wrap { 1420 | margin: 15px; 1421 | 1422 | a { 1423 | display: block; 1424 | } 1425 | } 1426 | 1427 | .post { 1428 | .post-head { 1429 | text-align: left; 1430 | 1431 | h1 { 1432 | line-height: 1.25em; 1433 | } 1434 | } 1435 | 1436 | .post-content { 1437 | p.brief { 1438 | .text-ellipsis(); 1439 | } 1440 | } 1441 | 1442 | .post-media { 1443 | float: none; 1444 | width: 100%; 1445 | height: auto; 1446 | margin: 0 0 1em 0; 1447 | } 1448 | } 1449 | 1450 | .post-footer, 1451 | #article-toc { 1452 | display: none; 1453 | } 1454 | 1455 | .content-wrap { 1456 | .m-post { 1457 | padding: 0px; 1458 | } 1459 | } 1460 | 1461 | .widget { 1462 | #search-form { 1463 | #result-wrap { 1464 | left: -25px; 1465 | width: 100%; 1466 | } 1467 | } 1468 | } 1469 | } 1470 | 1471 | @media screen and (min-width: 768px) { 1472 | .nav-toggle-button { 1473 | display: none; 1474 | } 1475 | } 1476 | 1477 | @media screen and (min-width: 1100px) { 1478 | .post-content { 1479 | blockquote { 1480 | padding-left: 20px; 1481 | border-width: 4px; 1482 | 1483 | blockquote { 1484 | margin-left: 0; 1485 | } 1486 | } 1487 | 1488 | figure { 1489 | img { 1490 | margin: 0 0 4px; 1491 | } 1492 | 1493 | figcaption { 1494 | position: absolute; 1495 | left: -172px; 1496 | width: 150px; 1497 | top: 0; 1498 | text-align: right; 1499 | margin-top: 0; 1500 | 1501 | &:before { 1502 | width: 25%; 1503 | margin-left: 75%; 1504 | border-top: 1px solid #dededc; 1505 | display: block; 1506 | content: ""; 1507 | margin-bottom: 10px; 1508 | } 1509 | } 1510 | } 1511 | } 1512 | } -------------------------------------------------------------------------------- /source/css/less/_timeline.less: -------------------------------------------------------------------------------- 1 | .timebox { 2 | position: relative; 3 | width: 100%; 4 | padding: 0 20px; 5 | margin: 20px auto; 6 | background: url(../img/timeline.gif) repeat-y 207px 0; 7 | overflow: hidden; 8 | } 9 | 10 | .timeline { 11 | h2 { 12 | height: 44px; 13 | line-height: 44px; 14 | font-size: 30px; 15 | color: @black6_color; 16 | font-weight: bold; 17 | padding-left: 75px; 18 | margin-bottom: 25px; 19 | background: url(../img/timeline-clock.gif) #fff no-repeat 165px 0; 20 | 21 | img { 22 | vertical-align: -5px; 23 | } 24 | } 25 | 26 | ul { 27 | list-style: none; 28 | margin: 0; 29 | padding: 0; 30 | 31 | li { 32 | background: url(../img/timeline-dot.gif) no-repeat 180px 5px; 33 | padding-bottom: 20px; 34 | zoom: 1; 35 | .text-ellipsis(); 36 | 37 | &:after { 38 | content: " "; 39 | display: block; 40 | height: 0; 41 | clear: both; 42 | visibility: hidden; 43 | } 44 | 45 | h3 { 46 | float: left; 47 | width: 168px; 48 | font-size: 20px; 49 | color: @black_color; 50 | text-align: right; 51 | padding-right: 15px; 52 | margin: 0; 53 | 54 | span { 55 | color: @black6_color; 56 | font-size: 12px; 57 | margin-left: 3px; 58 | } 59 | } 60 | 61 | a { 62 | padding-left: 41px; 63 | margin-top: -5px; 64 | font-weight: normal; 65 | font-size: 16px; 66 | color: @grey5_color; 67 | 68 | &:hover { 69 | text-decoration: none; 70 | color: @theme_color; 71 | } 72 | } 73 | 74 | } 75 | } 76 | } 77 | 78 | @media screen and (max-width: 500px) { 79 | .timebox { 80 | background-position: 97px 0; 81 | } 82 | 83 | .timeline { 84 | h2 { 85 | padding-left: 40%; 86 | background-position: 48px 0; 87 | } 88 | 89 | ul { 90 | li { 91 | background-position: 70px 5px; 92 | 93 | h3 { 94 | width: 68px 95 | } 96 | } 97 | } 98 | } 99 | } -------------------------------------------------------------------------------- /source/css/less/_variable.less: -------------------------------------------------------------------------------- 1 | /* _variable.less */ 2 | 3 | @theme_color: #e67e22; 4 | @white_color: #fff; 5 | @warn_color: #f0ad4e; 6 | 7 | @black_color: #333; 8 | @black3_color: @black_color; 9 | @black6_color: @black_color + #333; 10 | @black9_color: @black_color + #333; 11 | 12 | @grey_color: #303030; 13 | @grey3_color: @grey_color; 14 | @grey5_color: @grey_color + #202020; 15 | @grey8_color: @grey_color + #505050; 16 | 17 | @sepia_color: #959595; 18 | @greyish_color: #f9f9f9; 19 | @reward_color: #ff8140; 20 | 21 | @font_family_1: "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Hiragino Sans GB W3", "WenQuanYi Micro Hei", "Microsoft YaHei UI", "Microsoft YaHei", sans-serif; 22 | @font_family_2: "Georgia", "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", "SimSun", sans-serif; 23 | @font_family_3: Menlo, Monaco, Consolas, "Courier New", monospace; 24 | @font_family_4: "Georgia", "SimSun", sans-serif; 25 | @font_family_5: "STXingkai", "KaiTi", "Microsoft YaHei", "SimSun", sans-serif; -------------------------------------------------------------------------------- /source/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/favicon.ico -------------------------------------------------------------------------------- /source/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /source/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /source/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /source/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /source/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /source/img/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/img/avatar.jpg -------------------------------------------------------------------------------- /source/img/branding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/img/branding.png -------------------------------------------------------------------------------- /source/img/head-img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/img/head-img.jpg -------------------------------------------------------------------------------- /source/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/img/loading.gif -------------------------------------------------------------------------------- /source/img/reward-wepay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/img/reward-wepay.jpg -------------------------------------------------------------------------------- /source/img/timeline-clock.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/img/timeline-clock.gif -------------------------------------------------------------------------------- /source/img/timeline-dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/img/timeline-dot.gif -------------------------------------------------------------------------------- /source/img/timeline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenliyang/hexo-theme-snippet/7a5613bc7cfc5a6dadcb17e11dd04aec1c68d5f9/source/img/timeline.gif -------------------------------------------------------------------------------- /source/js/app.js: -------------------------------------------------------------------------------- 1 | /*!======================================================================== 2 | * hexo-theme-snippet: app.js v1.0.0 3 | * ======================================================================== */ 4 | window.onload = function () { 5 | var $body = document.body, 6 | $mnav = document.getElementById("mnav"), //获取导航三角图标 7 | $mainMenu = document.getElementById("main-menu"), //手机导航 8 | $process = document.getElementById("process"), //进度条 9 | $ajaxImgs = document.querySelectorAll(".img-ajax"), //图片懒加载 10 | $commentsCounter = document.getElementById("comments-count"), 11 | $gitcomment = document.getElementById("gitcomment"), 12 | $backToTop = document.getElementById("back-to-top"), 13 | $toc = document.getElementById("article-toc"), 14 | timer = null; 15 | 16 | //设备判断 17 | var isPC = true; 18 | (function (designPercent) { 19 | function params(u, p) { 20 | var m = new RegExp("(?:&|/?)" + p + "=([^&$]+)").exec(u); 21 | return m ? m[1] : ""; 22 | } 23 | if ( 24 | /iphone|ios|android|ipod/i.test(navigator.userAgent.toLowerCase()) == 25 | true && 26 | params(location.search, "from") != "mobile" 27 | ) { 28 | isPC = false; 29 | } 30 | })(); 31 | 32 | //手机菜单导航 33 | $mnav.onclick = function () { 34 | var navOpen = $mainMenu.getAttribute("class"); 35 | if (navOpen.indexOf("in") != "-1") { 36 | $mainMenu.setAttribute("class", "collapse navbar-collapse"); 37 | } else { 38 | $mainMenu.setAttribute("class", "collapse navbar-collapse in"); 39 | } 40 | }; 41 | 42 | //首页文章图片懒加载 43 | function imgsAjax($targetEles) { 44 | if (!$targetEles) return; 45 | var _length = $targetEles.length; 46 | if (_length > 0) { 47 | var scrollBottom = getScrollTop() + window.innerHeight; 48 | for (var i = 0; i < _length; i++) { 49 | (function (index) { 50 | var $this = $targetEles[index]; 51 | var $this_offsetZero = 52 | $this.getBoundingClientRect().top + 53 | window.pageYOffset - 54 | document.documentElement.clientTop; 55 | if ( 56 | scrollBottom >= $this_offsetZero && 57 | $this.getAttribute("data-src") && 58 | $this.getAttribute("data-src").length > 0 59 | ) { 60 | if ($this.nodeName.toLowerCase() === "img") { 61 | $this.src = $this.getAttribute("data-src"); 62 | $this.style.display = "block"; 63 | } else { 64 | var imgObj = new Image(); 65 | imgObj.onload = function () { 66 | $this.innerHTML = ""; 67 | }; 68 | imgObj.src = $this.getAttribute("data-src"); 69 | $this.style.backgroundImage = 70 | "url(" + $this.getAttribute("data-src") + ")"; 71 | } 72 | $this.removeAttribute("data-src"); //为了优化,移除 73 | } 74 | })(i); 75 | } 76 | } 77 | } 78 | 79 | //获取滚动高度 80 | function getScrollTop() { 81 | return $body.scrollTop || document.documentElement.scrollTop; 82 | } 83 | //滚动回调 84 | var scrollCallback = function () { 85 | if ($process) { 86 | $process.style.width = 87 | (getScrollTop() / ($body.scrollHeight - window.innerHeight)) * 100 + 88 | "%"; 89 | } 90 | isPC && getScrollTop() >= 300 91 | ? $backToTop.removeAttribute("class", "hide") 92 | : $backToTop.setAttribute("class", "hide"); 93 | imgsAjax($ajaxImgs); 94 | }; 95 | scrollCallback(); 96 | 97 | //监听滚动事件 98 | window.addEventListener("scroll", function () { 99 | if ($toc) { 100 | var top = $toc.offsetTop; 101 | var left = $toc.offsetLeft; 102 | var width = $toc.offsetWidth; 103 | if (getScrollTop() <= top) { 104 | $toc.style = ""; 105 | } else { 106 | $toc.style.position = "fixed"; 107 | $toc.style.top = "5px"; 108 | $toc.style.left = left + "px"; 109 | $toc.style.width = width + "px"; 110 | } 111 | } 112 | clearTimeout(timer); 113 | timer = setTimeout(function fn() { 114 | scrollCallback(); 115 | }, 200); 116 | }); 117 | 118 | //返回顶部 119 | $backToTop.onclick = function () { 120 | cancelAnimationFrame(timer); 121 | timer = requestAnimationFrame(function fn() { 122 | var sTop = getScrollTop(); 123 | if (sTop > 0) { 124 | $body.scrollTop = document.documentElement.scrollTop = sTop - 50; 125 | timer = requestAnimationFrame(fn); 126 | } else { 127 | cancelAnimationFrame(timer); 128 | } 129 | }); 130 | }; 131 | }; 132 | -------------------------------------------------------------------------------- /source/js/search.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | var searchWord = document.getElementById("search-key"), 3 | searchLocal = document.getElementById("search-local"), 4 | searchForm = document.getElementById("search-form"), 5 | searchMask = document.getElementById("result-mask"), 6 | searchWrap = document.getElementById("result-wrap"), 7 | searchResult = document.getElementById("search-result"), 8 | searchTpl = document.getElementById("search-tpl").innerHTML, 9 | winWidth, 10 | winHeight, 11 | searchData; 12 | if (window.innerWidth) { 13 | winWidth = parseInt(window.innerWidth); 14 | } else if (document.body && document.body.clientWidth) { 15 | winWidth = parseInt(document.body.clientWidth); 16 | } 17 | if (window.innerHeight) { 18 | winHeight = parseInt(window.innerHeight); 19 | } else if (document.body && document.body.clientHeight) { 20 | winHeight = parseInt(document.body.clientHeight); 21 | } 22 | searchMask.style.width = winWidth + "px"; 23 | searchMask.style.height = winHeight + "px"; 24 | 25 | function tpl(html, data) { 26 | return html.replace(/\{\w+\}/g, function (str) { 27 | var prop = str.replace(/\{|\}/g, ""); 28 | return data[prop] || ""; 29 | }); 30 | } 31 | 32 | function hasClass(obj, cls) { 33 | return obj.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)")); 34 | } 35 | 36 | function addClass(obj, cls) { 37 | if (!hasClass(obj, cls)) obj.className += " " + cls; 38 | } 39 | 40 | function removeClass(obj, cls) { 41 | if (hasClass(obj, cls)) { 42 | var reg = new RegExp("(\\s|^)" + cls + "(\\s|$)"); 43 | obj.className = obj.className.replace(reg, " "); 44 | } 45 | } 46 | 47 | function matcher(post, regExp) { 48 | return regtest(post.title, regExp) || regtest(post.text, regExp); 49 | } 50 | 51 | function regtest(raw, regExp) { 52 | regExp.lastIndex = 0; 53 | return regExp.test(raw); 54 | } 55 | 56 | function searchShow() { 57 | removeClass(searchWrap, "hide"); 58 | removeClass(searchMask, "hide"); 59 | } 60 | 61 | function searchHide() { 62 | addClass(searchWrap, "hide"); 63 | addClass(searchMask, "hide"); 64 | } 65 | 66 | function loadData(success) { 67 | if (!searchData) { 68 | var xhr = new XMLHttpRequest(); 69 | xhr.open( 70 | "GET", 71 | document.getElementsByTagName("meta")["root"].content + "content.json", 72 | true 73 | ); 74 | xhr.onload = function () { 75 | if (this.status >= 200 && this.status < 300) { 76 | var res = JSON.parse(this.response || this.responseText); 77 | searchData = res instanceof Array ? res : res.posts; 78 | success(searchData); 79 | } else { 80 | console.error(this.statusText); 81 | } 82 | }; 83 | xhr.onerror = function () { 84 | console.error(this.statusText); 85 | }; 86 | xhr.send(); 87 | } else { 88 | success(searchData); 89 | } 90 | } 91 | 92 | function render(data) { 93 | var html = ""; 94 | if (data.length) { 95 | html = data 96 | .map(function (post) { 97 | return tpl(searchTpl, { 98 | title: filter(post.title, "title"), 99 | path: post.path, 100 | content: filter(post.text, "content"), 101 | }); 102 | }) 103 | .join(""); 104 | } else { 105 | if (searchWord.value == "") { 106 | searchHide(); 107 | } else { 108 | html = '

    没有找到相关结果!

    '; 109 | } 110 | } 111 | searchResult.innerHTML = html; 112 | } 113 | 114 | function filter(art, type) { 115 | var keyword = searchWord.value; 116 | var index = art.indexOf(keyword); 117 | var artRe = art.replace(keyword, "" + keyword + ""); 118 | if (type == "title") { 119 | return artRe; 120 | } 121 | if (type == "content" && index > 0) { 122 | return artRe.substr(index - 15, 45); 123 | } 124 | } 125 | 126 | function search(e) { 127 | var key = this.value.trim(); 128 | if (!key) { 129 | render(""); 130 | return; 131 | } 132 | var regExp = new RegExp(key.replace(/[ ]/g, "|"), "gmi"); 133 | loadData(function (data) { 134 | var result = data.filter(function (post) { 135 | return matcher(post, regExp); 136 | }); 137 | render(result); 138 | }); 139 | e.preventDefault(); 140 | searchShow(); 141 | searchWord.onfocus = function () { 142 | searchShow(); 143 | }; 144 | } 145 | searchWord.onfocus = function () { 146 | searchWord.addEventListener("input", search); 147 | }; 148 | searchMask.onclick = function () { 149 | searchHide(); 150 | }; 151 | })(); 152 | --------------------------------------------------------------------------------