├── 2015 ├── 10 │ ├── 25 │ │ └── 详谈 CSS 文字属性 │ │ │ └── index.html │ ├── 31 │ │ └── 代码规范那些事 │ │ │ └── index.html │ └── 08 │ │ └── 详谈 css 选择器 │ │ └── index.html ├── 11 │ └── 25 │ │ └── 前端初学之浅谈前后端关系 │ │ └── index.html ├── 07 │ ├── 15 │ │ └── 试谈JavaScript事件处理机制 │ │ │ └── index.html │ └── 27 │ │ └── JavaScript学习笔记 │ │ └── index.html ├── 08 │ └── 14 │ │ └── 新番!羁绊の协同前端! │ │ └── index.html └── 09 │ └── 22 │ └── JavaScript DOM 基础 │ └── index.html ├── 2016 ├── 11 │ └── 25 │ │ └── HTTP 必知必会 │ │ └── index.html ├── 12 │ └── 20 │ │ └── script 标签的 defer 与 async │ │ └── index.html ├── 01 │ └── 22 │ │ └── 学习 CSS 浮动 │ │ └── index.html ├── 02 │ ├── 27 │ │ └── JavaScript 学习笔记——数据类型及应用 │ │ │ └── index.html │ └── 04 │ │ └── CSS 布局实战 │ │ └── index.html ├── 03 │ ├── 13 │ │ └── JavaScript 学习笔记——BOM │ │ │ └── index.html │ ├── 22 │ │ └── JavaScript 学习笔记——事件 │ │ │ └── index.html │ ├── 30 │ │ └── JavaScript 核心学习——作用域与作用域链 │ │ │ └── index.html │ └── 08 │ │ └── JavaScript 学习笔记——DOM │ │ └── index.html ├── 04 │ ├── 20 │ │ └── 前端技能之 PHP 学习笔记 │ │ │ └── index.html │ └── 26 │ │ └── JavaScript 核心学习——闭包 │ │ └── index.html ├── 05 │ ├── 13 │ │ └── JavaScript 核心学习——对象与构造函数 │ │ │ └── index.html │ ├── 18 │ │ └── JavaScript 核心学习——继承 │ │ │ └── index.html │ ├── 31 │ │ └── 移动开发总结 │ │ │ └── index.html │ └── 01 │ │ └── JavaScript 核心学习—— this 关键字 │ │ └── index.html ├── 07 │ └── 18 │ │ └── 浏览器从输入 URL 到页面显示的过程 │ │ └── index.html ├── 08 │ └── 14 │ │ └── 你们无法逃避的谈心 │ │ └── index.html └── 09 │ ├── 11 │ └── Parse 系列之 Parse-server 搭建(译) │ │ └── index.html │ ├── 18 │ ├── 2016 女生节许愿墙脚手架文档 │ │ └── index.html │ └── Parse 系列之 Parse Dashboard 搭建(译) │ │ └── index.html │ └── 01 │ └── Vue 项目总结 │ └── index.html ├── 2017 ├── 11 │ └── 25 │ │ └── git │ │ └── index.html ├── 12 │ ├── 29 │ │ └── 记一次线上 node 服务 502 错误 │ │ │ └── index.html │ ├── 30 │ │ └── 使用 request, mocha, chai 让接口更稳定 │ │ │ └── index.html │ └── 09 │ │ └── 关于 CORS 的小细节 │ │ └── index.html ├── 01 │ ├── 11 │ │ └── 微信调试 │ │ │ └── index.html │ ├── 20 │ │ └── Nginx 的反向代理 │ │ │ └── index.html │ ├── 22 │ │ └── React In GirlWall │ │ │ └── index.html │ ├── 23 │ │ └── 前端使用 Mock 与后端独立 │ │ │ └── index.html │ ├── 24 │ │ └── 项目开发流程反思 │ │ │ └── index.html │ ├── 31 │ │ └── Ajax │ │ │ └── index.html │ ├── 08 │ │ └── 开启 Gzip 为前端加速 │ │ │ └── index.html │ └── 09 │ │ └── Throttle In LazyLoad │ │ └── index.html ├── 02 │ ├── 16 │ │ ├── Zepto 源码全剖析 │ │ │ └── index.html │ │ └── Zepto 源码简单剖析 │ │ │ └── index.html │ ├── 20 │ │ └── Event In Zepto │ │ │ └── index.html │ └── 02 │ │ └── WebSocket In GirlWall │ │ └── index.html ├── 03 │ ├── 13 │ │ └── 浅析 ES6 特性 │ │ │ └── index.html │ ├── 15 │ │ └── ready 函数的兼容深入 │ │ │ └── index.html │ ├── 28 │ │ └── 深入响应式布局兼容 │ │ │ └── index.html │ ├── 04 │ │ └── Zepto 点击穿透问题深究与解决 │ │ │ └── index.html │ └── 06 │ │ └── 前端安全之 XSS 与 CSRF │ │ └── index.html ├── 04 │ └── 05 │ │ └── Modal In React │ │ └── index.html ├── 05 │ ├── 20 │ │ └── 细说 window.performance │ │ │ └── index.html │ └── 27 │ │ └── JQuery Promise 不执行成功回调 │ │ └── index.html ├── 06 │ ├── 13 │ │ └── ES6 小结 │ │ │ └── index.html │ └── 09 │ │ └── 当我在谈论前端监控时我在谈什么 │ │ └── index.html ├── 07 │ └── 23 │ │ └── 浅谈设计模式实战 │ │ └── index.html ├── 08 │ └── 12 │ │ └── Vue 2 in Android webView throw Uncaught ReferenceError_create2 is not defined exception │ │ └── index.html └── 09 │ └── 08 │ └── underscore 硬绑定中的优化 │ └── index.html ├── 2018 ├── 01 │ └── 27 │ │ └── Git 小手记 │ │ └── index.html ├── 02 │ ├── 25 │ │ ├── co 源码剖析 │ │ │ └── index.html │ │ └── 理解 ES6 generator │ │ │ └── index.html │ └── 03 │ │ └── Event Loop 中的 microtask 与 macrotask │ │ └── index.html ├── 03 │ └── 16 │ │ └── 理解 Koa 的中间件机制 │ │ └── index.html ├── 04 │ ├── 03 │ │ └── koa 源码解析 │ │ │ └── index.html │ └── 08 │ │ └── 解析 SMTP 协议 │ │ └── index.html ├── 05 │ └── 16 │ │ └── 实现 JavaScript 继承的三种模式设计 │ │ └── index.html ├── 06 │ ├── 10 │ │ └── 理解模板引擎 │ │ │ └── index.html │ └── 03 │ │ └── 全面理解 koa-router │ │ └── index.html ├── 07 │ └── 15 │ │ └── 你所需要知道的关于 Node 模块的一切 │ │ └── index.html └── 09 │ └── 01 │ └── 理解 Node.js Stream 模块 │ └── index.html ├── 2019 └── 01 │ └── 26 │ └── promise 杂谈 │ └── index.html ├── README.md ├── archives ├── 2015 │ ├── 10 │ │ └── index.html │ ├── 11 │ │ └── index.html │ ├── 07 │ │ └── index.html │ ├── 08 │ │ └── index.html │ ├── 09 │ │ └── index.html │ └── index.html ├── 2016 │ ├── 11 │ │ └── index.html │ ├── 12 │ │ └── index.html │ ├── 01 │ │ └── index.html │ ├── 02 │ │ └── index.html │ ├── 03 │ │ └── index.html │ ├── 04 │ │ └── index.html │ ├── 05 │ │ └── index.html │ ├── 07 │ │ └── index.html │ ├── 08 │ │ └── index.html │ ├── 09 │ │ └── index.html │ ├── index.html │ └── page │ │ ├── 2 │ │ └── index.html │ │ └── 3 │ │ └── index.html ├── 2017 │ ├── 11 │ │ └── index.html │ ├── 12 │ │ └── index.html │ ├── 01 │ │ └── index.html │ ├── 02 │ │ └── index.html │ ├── 03 │ │ └── index.html │ ├── 04 │ │ └── index.html │ ├── 05 │ │ └── index.html │ ├── 06 │ │ └── index.html │ ├── 07 │ │ └── index.html │ ├── 08 │ │ └── index.html │ ├── 09 │ │ └── index.html │ ├── index.html │ └── page │ │ ├── 2 │ │ └── index.html │ │ └── 3 │ │ └── index.html ├── 2018 │ ├── 01 │ │ └── index.html │ ├── 02 │ │ └── index.html │ ├── 03 │ │ └── index.html │ ├── 04 │ │ └── index.html │ ├── 05 │ │ └── index.html │ ├── 06 │ │ └── index.html │ ├── 07 │ │ └── index.html │ ├── 09 │ │ └── index.html │ ├── index.html │ └── page │ │ └── 2 │ │ └── index.html ├── 2019 │ ├── 01 │ │ └── index.html │ └── index.html ├── index.html └── page │ ├── 2 │ └── index.html │ ├── 3 │ └── index.html │ ├── 4 │ └── index.html │ ├── 5 │ └── index.html │ ├── 6 │ └── index.html │ ├── 7 │ └── index.html │ └── 8 │ └── index.html ├── categories ├── CSS │ └── index.html ├── HTTP │ └── index.html ├── JavaScript │ ├── index.html │ └── page │ │ ├── 2 │ │ └── index.html │ │ └── 3 │ │ └── index.html ├── Life │ └── index.html ├── Node-js │ └── index.html ├── PHP │ └── index.html ├── Parse │ └── index.html ├── React │ └── index.html ├── Server │ └── index.html ├── Web-Develop │ ├── index.html │ └── page │ │ └── 2 │ │ └── index.html ├── git │ └── index.html ├── 代码规范 │ └── index.html ├── 前端杂烩 │ └── index.html ├── 单元测试 │ └── index.html ├── 性能优化 │ └── index.html ├── 查缺补漏 │ └── index.html ├── 移动开发 │ └── index.html ├── 虫师手记 │ └── index.html ├── 计算机网络 │ └── index.html └── 设计模式 │ └── index.html ├── css └── main.css ├── images ├── algolia_logo.svg ├── apple-touch-icon-next.png ├── avatar.gif ├── cc-by-nc-nd.svg ├── cc-by-nc-sa.svg ├── cc-by-nc.svg ├── cc-by-nd.svg ├── cc-by-sa.svg ├── cc-by.svg ├── cc-zero.svg ├── favicon-16x16-next.png ├── favicon-32x32-next.png ├── loading.gif ├── logo.svg ├── placeholder.gif ├── quote-l.svg ├── quote-r.svg └── searchicon.png ├── index.html ├── js └── src │ ├── affix.js │ ├── algolia-search.js │ ├── bootstrap.js │ ├── exturl.js │ ├── hook-duoshuo.js │ ├── js.cookie.js │ ├── motion.js │ ├── post-details.js │ ├── schemes │ └── pisces.js │ ├── scroll-cookie.js │ ├── scrollspy.js │ └── utils.js ├── lib ├── Han │ └── dist │ │ ├── font │ │ ├── han-space.otf │ │ ├── han-space.woff │ │ ├── han.otf │ │ ├── han.woff │ │ └── han.woff2 │ │ ├── han.css │ │ ├── han.js │ │ ├── han.min.css │ │ └── han.min.js ├── algolia-instant-search │ ├── instantsearch.min.css │ └── instantsearch.min.js ├── canvas-nest │ └── canvas-nest.min.js ├── canvas-ribbon │ └── canvas-ribbon.js ├── fancybox │ └── source │ │ ├── blank.gif │ │ ├── fancybox_loading.gif │ │ ├── fancybox_loading@2x.gif │ │ ├── fancybox_overlay.png │ │ ├── fancybox_sprite.png │ │ ├── fancybox_sprite@2x.png │ │ ├── helpers │ │ ├── fancybox_buttons.png │ │ ├── jquery.fancybox-buttons.css │ │ ├── jquery.fancybox-buttons.js │ │ ├── jquery.fancybox-media.js │ │ ├── jquery.fancybox-thumbs.css │ │ └── jquery.fancybox-thumbs.js │ │ ├── jquery.fancybox.css │ │ ├── jquery.fancybox.js │ │ └── jquery.fancybox.pack.js ├── fastclick │ ├── LICENSE │ ├── README.html │ ├── bower.json │ └── lib │ │ ├── fastclick.js │ │ └── fastclick.min.js ├── font-awesome │ ├── HELP-US-OUT.txt │ ├── bower.json │ ├── css │ │ ├── font-awesome.css │ │ ├── font-awesome.css.map │ │ └── font-awesome.min.css │ └── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 ├── jquery │ └── index.js ├── jquery_lazyload │ ├── CONTRIBUTING.html │ ├── README.html │ ├── bower.json │ ├── jquery.lazyload.js │ └── jquery.scrollstop.js ├── needsharebutton │ ├── font-embedded.css │ ├── needsharebutton.css │ └── needsharebutton.js ├── pace │ ├── pace-theme-barber-shop.min.css │ ├── pace-theme-big-counter.min.css │ ├── pace-theme-bounce.min.css │ ├── pace-theme-center-atom.min.css │ ├── pace-theme-center-circle.min.css │ ├── pace-theme-center-radar.min.css │ ├── pace-theme-center-simple.min.css │ ├── pace-theme-corner-indicator.min.css │ ├── pace-theme-fill-left.min.css │ ├── pace-theme-flash.min.css │ ├── pace-theme-loading-bar.min.css │ ├── pace-theme-mac-osx.min.css │ ├── pace-theme-minimal.min.css │ └── pace.min.js ├── three │ ├── canvas_lines.min.js │ ├── canvas_sphere.min.js │ ├── three-waves.min.js │ └── three.min.js ├── ua-parser-js │ └── dist │ │ ├── ua-parser.min.js │ │ └── ua-parser.pack.js └── velocity │ ├── bower.json │ ├── velocity.js │ ├── velocity.min.js │ ├── velocity.ui.js │ └── velocity.ui.min.js └── page ├── 2 └── index.html ├── 3 └── index.html ├── 4 └── index.html └── 5 └── index.html /README.md: -------------------------------------------------------------------------------- 1 | # 阿翔的博客 2 | 3 | > 腾讯高级前端工程师,腾讯云监控团队-RUM前端监控平台,现腾讯文档前端工程师, 欢迎来投简历 4 | > 联系方式:wechat(zxiang702) 5 | 6 | ## Node.js 7 | 8 | 1. [如何构造属于自己的 DSL —— PEG.js 使用指南](https://github.com/zhangxiang958/Blog/issues/54) 9 | 2. [JavaScript 中的装饰器语法](https://github.com/zhangxiang958/Blog/issues/50) 10 | 3. [[译]理解 Node.js 的中 Worker Threads](https://github.com/zhangxiang958/Blog/issues/49) 11 | 4. [[译]事件循环最佳实践——NodeJS 事件循环 Part 5](https://github.com/zhangxiang958/Blog/issues/47) 12 | 5. [[译]IO 处理——NodeJS 事件循环 Part 4](https://github.com/zhangxiang958/Blog/issues/46) 13 | 6. [[译]Promises, Next-Ticks 和 Immediates— NodeJS Event Loop Part 3](https://github.com/zhangxiang958/Blog/issues/45) 14 | 7. [[译]定时器,Immediates 和 process.nextTick——NodeJS 事件循环 Part 2](https://github.com/zhangxiang958/Blog/issues/44) 15 | 8. [[译]事件循环总览—— Nodejs 事件循环 Part 1](https://github.com/zhangxiang958/Blog/issues/43) 16 | 9. [promise 杂谈](https://github.com/zhangxiang958/Blog/issues/42) 17 | 10. [理解 Node.js Stream 模块](https://github.com/zhangxiang958/Blog/issues/41) 18 | 11. [Node.js 中的模块机制](https://github.com/zhangxiang958/Blog/issues/40) 19 | 12. [实现 JavaScript 继承的三种模式设计](https://github.com/zhangxiang958/Blog/issues/37) 20 | 13. [理解 ES6 generator](https://github.com/zhangxiang958/Blog/issues/32) 21 | 14. [Event Loop 中的 microtask 与 macrotask](https://github.com/zhangxiang958/Blog/issues/31) 22 | 15. [Underscore 硬绑定中的性能优化](https://github.com/zhangxiang958/Blog/issues/28) 23 | 16. [ES6 小结](https://github.com/zhangxiang958/Blog/issues/26) 24 | 17. [浅谈设计模式实战](https://github.com/zhangxiang958/Blog/issues/27) 25 | 26 | ## Koa 源码系列 27 | 28 | 1. [koa 源码解析](https://github.com/zhangxiang958/Blog/issues/35) 29 | 2. [理解 Koa 的中间件机制](https://github.com/zhangxiang958/Blog/issues/34) 30 | 3. [co 源码剖析](https://github.com/zhangxiang958/Blog/issues/33) 31 | 4. [全面理解 koa-router](https://github.com/zhangxiang958/Blog/issues/38) 32 | 33 | ## 前端相关 34 | 1. [理解 Redux](https://github.com/zhangxiang958/Blog/issues/48) 35 | 2. [理解模板引擎](https://github.com/zhangxiang958/Blog/issues/39) 36 | 3. [JS 开发者写编译器必须懂的编码](https://github.com/zhangxiang958/Blog/issues/61) 37 | 38 | ## Typescript 39 | 40 | 1. [IOC in Typescript](https://github.com/zhangxiang958/Blog/issues/51) 41 | 42 | ## Golang 43 | 44 | 1. [解读 Golang 的 fmt 包](https://github.com/zhangxiang958/Blog/issues/53) 45 | 2. [RPC in Golang(一)](https://github.com/zhangxiang958/Blog/issues/55) 46 | 3. [Golang Compiler 实现学习](https://github.com/zhangxiang958/Blog/issues/59) 47 | 4. [基于 Kong + Konga 实现接口服务蓝绿部署](https://github.com/zhangxiang958/Blog/issues/62) 48 | 5. [揭秘 OpenTelemetry-Collector 源码内幕](https://github.com/zhangxiang958/Blog/issues/66) 49 | 50 | ## 写给 Node.js 开发者的 Golang 学习书 51 | 52 | 1. [Golang 包教不包会(一) Golang 开发环境](https://github.com/zhangxiang958/Blog/issues/57) 53 | 2. [Golang 包教不包会(二) Golang 中的包与作用域](https://github.com/zhangxiang958/Blog/issues/58) 54 | 55 | ## Git 56 | 57 | 1. [Git 的主干开发工作流](https://github.com/zhangxiang958/Blog/issues/52) 58 | 2. [Git 小手记](https://github.com/zhangxiang958/Blog/issues/30) 59 | 60 | ## 网络 & 协议 61 | 1. [解析 SMTP 协议](https://github.com/zhangxiang958/Blog/issues/36) 62 | 63 | ### HTTPS 原理与实践 64 | 待更持续... 65 | 66 | ## 杂谈 67 | 1. [记一次 node 服务高并发 502 错误](https://github.com/zhangxiang958/Blog/issues/29) 68 | 69 | ## 个人记录 70 | 1. [Mac 系统初始化记录](https://github.com/zhangxiang958/Blog/issues/60) 71 | 72 | ## 勘误与鼓励/交流 73 | 74 | 如果对于博客内容有疑问或者发现错误,欢迎在相应 issues 下面可以进行交流或勘误。 75 | 76 | 如果喜欢我的文章或者有所启发/收获,欢迎 star,对作者的创作也是一种鼓励。 77 | -------------------------------------------------------------------------------- /images/algolia_logo.svg: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /images/apple-touch-icon-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/images/apple-touch-icon-next.png -------------------------------------------------------------------------------- /images/avatar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/images/avatar.gif -------------------------------------------------------------------------------- /images/cc-by-nc-nd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 122 | -------------------------------------------------------------------------------- /images/cc-by-nc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 122 | -------------------------------------------------------------------------------- /images/cc-by-nd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 118 | -------------------------------------------------------------------------------- /images/cc-by-sa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 122 | -------------------------------------------------------------------------------- /images/cc-by.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 122 | -------------------------------------------------------------------------------- /images/cc-zero.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 73 | -------------------------------------------------------------------------------- /images/favicon-16x16-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/images/favicon-16x16-next.png -------------------------------------------------------------------------------- /images/favicon-32x32-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/images/favicon-32x32-next.png -------------------------------------------------------------------------------- /images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/images/loading.gif -------------------------------------------------------------------------------- /images/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 24 | -------------------------------------------------------------------------------- /images/placeholder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/images/placeholder.gif -------------------------------------------------------------------------------- /images/quote-l.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 14 | -------------------------------------------------------------------------------- /images/quote-r.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 13 | -------------------------------------------------------------------------------- /images/searchicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/images/searchicon.png -------------------------------------------------------------------------------- /js/src/affix.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: affix.js v3.3.5 3 | * http://getbootstrap.com/javascript/#affix 4 | * ======================================================================== 5 | * Copyright 2011-2015 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // AFFIX CLASS DEFINITION 14 | // ====================== 15 | 16 | var Affix = function (element, options) { 17 | this.options = $.extend({}, Affix.DEFAULTS, options) 18 | 19 | this.$target = $(this.options.target) 20 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) 21 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) 22 | 23 | this.$element = $(element) 24 | this.affixed = null 25 | this.unpin = null 26 | this.pinnedOffset = null 27 | 28 | this.checkPosition() 29 | } 30 | 31 | Affix.VERSION = '3.3.5' 32 | 33 | Affix.RESET = 'affix affix-top affix-bottom' 34 | 35 | Affix.DEFAULTS = { 36 | offset: 0, 37 | target: window 38 | } 39 | 40 | Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { 41 | var scrollTop = this.$target.scrollTop() 42 | var position = this.$element.offset() 43 | var targetHeight = this.$target.height() 44 | 45 | if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false 46 | 47 | if (this.affixed == 'bottom') { 48 | if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' 49 | return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' 50 | } 51 | 52 | var initializing = this.affixed == null 53 | var colliderTop = initializing ? scrollTop : position.top 54 | var colliderHeight = initializing ? targetHeight : height 55 | 56 | if (offsetTop != null && scrollTop <= offsetTop) return 'top' 57 | if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' 58 | 59 | return false 60 | } 61 | 62 | Affix.prototype.getPinnedOffset = function () { 63 | if (this.pinnedOffset) return this.pinnedOffset 64 | this.$element.removeClass(Affix.RESET).addClass('affix') 65 | var scrollTop = this.$target.scrollTop() 66 | var position = this.$element.offset() 67 | return (this.pinnedOffset = position.top - scrollTop) 68 | } 69 | 70 | Affix.prototype.checkPositionWithEventLoop = function () { 71 | setTimeout($.proxy(this.checkPosition, this), 1) 72 | } 73 | 74 | Affix.prototype.checkPosition = function () { 75 | if (!this.$element.is(':visible')) return 76 | 77 | var height = this.$element.height() 78 | var offset = this.options.offset 79 | var offsetTop = offset.top 80 | var offsetBottom = offset.bottom 81 | var scrollHeight = Math.max($(document).height(), $(document.body).height()) 82 | 83 | if (typeof offset != 'object') offsetBottom = offsetTop = offset 84 | if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) 85 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) 86 | 87 | var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) 88 | 89 | if (this.affixed != affix) { 90 | if (this.unpin != null) this.$element.css('top', '') 91 | 92 | var affixType = 'affix' + (affix ? '-' + affix : '') 93 | var e = $.Event(affixType + '.bs.affix') 94 | 95 | this.$element.trigger(e) 96 | 97 | if (e.isDefaultPrevented()) return 98 | 99 | this.affixed = affix 100 | this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null 101 | 102 | this.$element 103 | .removeClass(Affix.RESET) 104 | .addClass(affixType) 105 | .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') 106 | } 107 | 108 | if (affix == 'bottom') { 109 | this.$element.offset({ 110 | top: scrollHeight - height - offsetBottom 111 | }) 112 | } 113 | } 114 | 115 | 116 | // AFFIX PLUGIN DEFINITION 117 | // ======================= 118 | 119 | function Plugin(option) { 120 | return this.each(function () { 121 | var $this = $(this) 122 | var data = $this.data('bs.affix') 123 | var options = typeof option == 'object' && option 124 | 125 | if (!data) $this.data('bs.affix', (data = new Affix(this, options))) 126 | if (typeof option == 'string') data[option]() 127 | }) 128 | } 129 | 130 | var old = $.fn.affix 131 | 132 | $.fn.affix = Plugin 133 | $.fn.affix.Constructor = Affix 134 | 135 | 136 | // AFFIX NO CONFLICT 137 | // ================= 138 | 139 | $.fn.affix.noConflict = function () { 140 | $.fn.affix = old 141 | return this 142 | } 143 | 144 | 145 | // AFFIX DATA-API 146 | // ============== 147 | 148 | $(window).on('load', function () { 149 | $('[data-spy="affix"]').each(function () { 150 | var $spy = $(this) 151 | var data = $spy.data() 152 | 153 | data.offset = data.offset || {} 154 | 155 | if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom 156 | if (data.offsetTop != null) data.offset.top = data.offsetTop 157 | 158 | Plugin.call($spy, data) 159 | }) 160 | }) 161 | 162 | }(jQuery); 163 | -------------------------------------------------------------------------------- /js/src/algolia-search.js: -------------------------------------------------------------------------------- 1 | /* global instantsearch: true */ 2 | /*jshint camelcase: false */ 3 | 4 | $(document).ready(function () { 5 | var algoliaSettings = CONFIG.algolia; 6 | var isAlgoliaSettingsValid = algoliaSettings.applicationID && 7 | algoliaSettings.apiKey && 8 | algoliaSettings.indexName; 9 | 10 | if (!isAlgoliaSettingsValid) { 11 | window.console.error('Algolia Settings are invalid.'); 12 | return; 13 | } 14 | 15 | var search = instantsearch({ 16 | appId: algoliaSettings.applicationID, 17 | apiKey: algoliaSettings.apiKey, 18 | indexName: algoliaSettings.indexName, 19 | searchFunction: function (helper) { 20 | var searchInput = $('#algolia-search-input').find('input'); 21 | 22 | if (searchInput.val()) { 23 | helper.search(); 24 | } 25 | } 26 | }); 27 | 28 | // Registering Widgets 29 | [ 30 | instantsearch.widgets.searchBox({ 31 | container: '#algolia-search-input', 32 | placeholder: algoliaSettings.labels.input_placeholder 33 | }), 34 | 35 | instantsearch.widgets.hits({ 36 | container: '#algolia-hits', 37 | hitsPerPage: algoliaSettings.hits.per_page || 10, 38 | templates: { 39 | item: function (data) { 40 | var link = data.permalink ? data.permalink : (CONFIG.root + data.path); 41 | return ( 42 | '' + 43 | data._highlightResult.title.value + 44 | '' 45 | ); 46 | }, 47 | empty: function (data) { 48 | return ( 49 | '
/, admin + getAgentInfo(agent) + '
');
24 | }
25 |
26 | return rs;
27 | };
28 | }
29 |
30 | function getAgentInfo(string) {
31 | $.ua.set(string);
32 |
33 | var UNKNOWN = 'Unknown';
34 | var sua = $.ua;
35 | var separator = isMobile() ? ' FastClick is a simple, easy-to-use library for eliminating the 300ms delay between a physical tap and the firing of a FastClick is developed by FT Labs, part of the Financial Times. According to Google: …mobile browsers will wait approximately 300ms from the time that you tap the button to fire the click event. The reason for this is that the browser is waiting to see if you are actually performing a double tap. The library has been deployed as part of the FT Web App and is tried and tested on the following mobile browsers: FastClick doesn’t attach any listeners on desktop browsers. Chrome 32+ on Android with Same goes for Chrome on Android (all versions) with For IE11+, you can use Include fastclick.js in your JavaScript bundle or add it to your HTML page like this: The script must be loaded prior to instantiating FastClick on any element of the page. To instantiate FastClick on the Or, if you’re using jQuery: If you’re using Browserify or another CommonJS-style module system, the Run Note: the pre-minified version is built using our build service which exposes the FastClick has AMD (Asynchronous Module Definition) support. This allows it to be lazy-loaded with an AMD loader, such as RequireJS. Note that when using the AMD style require, the full You can install FastClick using Component, npm or Bower. For Ruby, there’s a third-party gem called fastclick-rails. For .NET there’s a NuGet package. Sometimes you need FastClick to ignore certain elements. You can do this easily by adding the Internally, FastClick uses This is where the Another example of when to use the FastClick is designed to cope with many different browser oddities. Here are some examples to illustrate this: There are no automated tests. The files in FastClick is maintained by Rowan Beentje, Matthew Caruana Galizia and Matthew Andrews at FT Labs. All open source code released by FT Labs is licenced under the MIT licence. We welcome comments, feedback and suggestions. Please feel free to raise an issue or pull request. Make pull requests only one feature or change at the time. For example you have fixed a bug. You also have optimized some code. Optimization is not related to a bug. These should be submitted as separate pull requests. This way I can easily choose what to include. It is also easier to understand the code changes. Commit messages should be descriptive and full sentences. Do not commit minified versions. Do not touch the version number. Make the pull requests against 1.9.x branch. Proper commit message is full sentence. It starts with capital letter but does not end with period. Headlines do not end with period. The GitHub default When in doubt see Tim Pope’s blogpost A Note About Git Commit Messages When contributing to open source project it is polite to follow the original authors coding standars. They might be different than yours. It is not a holy war. Just follow then original. Lazy Load delays loading of images in long web pages. Images outside of viewport wont be loaded before user scrolls to them. This is opposite of image preloading. Using Lazy Load on long web pages containing many large images makes the page load faster. Browser will be in ready state after loading visible images. In some cases it can also help to reduce server load. Lazy Load is inspired by YUI ImageLoader Utility by Matt Mlinac. Lazy Load depends on jQuery. Include them both in end of your HTML code: You must alter your HTML code. URL of the real image must be put into data-original attribute. It is good idea to give Lazy Loaded image a specific class. This way you can easily control which images plugin is binded to. Note that you should have width and height attributes in your image tag. then in your code do: This causes all images of class lazy to be lazy loaded. More information on Lazy Load project page. You can install with bower or npm. All code licensed under the MIT License. All images licensed under Creative Commons Attribution 3.0 Unported License. In other words you are basically free to do whatever you want. Just don’t remove my name from the source.
' : '';
36 | var osName = sua.os.name || UNKNOWN;
37 | var osVersion = sua.os.version || UNKNOWN;
38 | var browserName = sua.browser.name || UNKNOWN;
39 | var browserVersion = sua.browser.version || UNKNOWN;
40 | var iconMapping = {
41 | os: {
42 | android : 'android',
43 | linux : 'linux',
44 | windows : 'windows',
45 | ios : 'apple',
46 | 'mac os': 'apple',
47 | unknown : 'desktop'
48 | },
49 | browser: {
50 | chrome : 'chrome',
51 | chromium : 'chrome',
52 | firefox : 'firefox',
53 | opera : 'opera',
54 | safari : 'safari',
55 | ie : 'internet-explorer',
56 | wechat : 'wechat',
57 | qq : 'qq',
58 | unknown : 'globe'
59 | }
60 | };
61 | var osIcon = iconMapping.os[osName.toLowerCase()];
62 | var browserIcon = iconMapping.browser[getBrowserKey()];
63 |
64 | return separator +
65 | '' +
66 | '' +
67 | osName + ' ' + osVersion +
68 | '' + separator +
69 | '' +
70 | '' +
71 | browserName + ' ' + browserVersion +
72 | '';
73 |
74 | function getBrowserKey () {
75 | var key = browserName.toLowerCase();
76 |
77 | if (key.match(/WeChat/i)) {
78 | return 'wechat';
79 | }
80 |
81 | if (key.match(/QQBrowser/i)) {
82 | return 'qq';
83 | }
84 |
85 | return key;
86 | }
87 |
88 | function isMobile() {
89 | var userAgent = window.navigator.userAgent;
90 |
91 | var isiPad = userAgent.match(/iPad/i) !== null;
92 | var mobileUA = [
93 | 'iphone', 'android', 'phone', 'mobile',
94 | 'wap', 'netfront', 'x11', 'java', 'opera mobi',
95 | 'opera mini', 'ucweb', 'windows ce', 'symbian',
96 | 'symbianos', 'series', 'webos', 'sony',
97 | 'blackberry', 'dopod', 'nokia', 'samsung',
98 | 'palmsource', 'xda', 'pieplus', 'meizu',
99 | 'midp' ,'cldc' , 'motorola', 'foma',
100 | 'docomo', 'up.browser', 'up.link', 'blazer',
101 | 'helio', 'hosin', 'huawei', 'novarra',
102 | 'coolpad', 'webos', 'techfaith', 'palmsource',
103 | 'alcatel', 'amoi', 'ktouch', 'nexian',
104 | 'ericsson', 'philips', 'sagem', 'wellcom',
105 | 'bunjalloo', 'maui', 'smartphone', 'iemobile',
106 | 'spice', 'bird', 'zte-', 'longcos',
107 | 'pantech', 'gionee', 'portalmmm', 'jig browser',
108 | 'hiptop', 'benq', 'haier', '^lct',
109 | '320x320', '240x320', '176x220'
110 | ];
111 | var pattern = new RegExp(mobileUA.join('|'), 'i');
112 |
113 | return !isiPad && userAgent.match(pattern);
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/js/src/js.cookie.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * JavaScript Cookie v2.1.4
3 | * https://github.com/js-cookie/js-cookie
4 | *
5 | * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
6 | * Released under the MIT license
7 | */
8 | ;(function (factory) {
9 | var registeredInModuleLoader = false;
10 | if (typeof define === 'function' && define.amd) {
11 | define(factory);
12 | registeredInModuleLoader = true;
13 | }
14 | if (typeof exports === 'object') {
15 | module.exports = factory();
16 | registeredInModuleLoader = true;
17 | }
18 | if (!registeredInModuleLoader) {
19 | var OldCookies = window.Cookies;
20 | var api = window.Cookies = factory();
21 | api.noConflict = function () {
22 | window.Cookies = OldCookies;
23 | return api;
24 | };
25 | }
26 | }(function () {
27 | function extend () {
28 | var i = 0;
29 | var result = {};
30 | for (; i < arguments.length; i++) {
31 | var attributes = arguments[ i ];
32 | for (var key in attributes) {
33 | result[key] = attributes[key];
34 | }
35 | }
36 | return result;
37 | }
38 |
39 | function init (converter) {
40 | function api (key, value, attributes) {
41 | var result;
42 | if (typeof document === 'undefined') {
43 | return;
44 | }
45 |
46 | // Write
47 |
48 | if (arguments.length > 1) {
49 | attributes = extend({
50 | path: '/'
51 | }, api.defaults, attributes);
52 |
53 | if (typeof attributes.expires === 'number') {
54 | var expires = new Date();
55 | expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
56 | attributes.expires = expires;
57 | }
58 |
59 | // We're using "expires" because "max-age" is not supported by IE
60 | attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
61 |
62 | try {
63 | result = JSON.stringify(value);
64 | if (/^[\{\[]/.test(result)) {
65 | value = result;
66 | }
67 | } catch (e) {}
68 |
69 | if (!converter.write) {
70 | value = encodeURIComponent(String(value))
71 | .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
72 | } else {
73 | value = converter.write(value, key);
74 | }
75 |
76 | key = encodeURIComponent(String(key));
77 | key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
78 | key = key.replace(/[\(\)]/g, escape);
79 |
80 | var stringifiedAttributes = '';
81 |
82 | for (var attributeName in attributes) {
83 | if (!attributes[attributeName]) {
84 | continue;
85 | }
86 | stringifiedAttributes += '; ' + attributeName;
87 | if (attributes[attributeName] === true) {
88 | continue;
89 | }
90 | stringifiedAttributes += '=' + attributes[attributeName];
91 | }
92 | return (document.cookie = key + '=' + value + stringifiedAttributes);
93 | }
94 |
95 | // Read
96 |
97 | if (!key) {
98 | result = {};
99 | }
100 |
101 | // To prevent the for loop in the first place assign an empty array
102 | // in case there are no cookies at all. Also prevents odd result when
103 | // calling "get()"
104 | var cookies = document.cookie ? document.cookie.split('; ') : [];
105 | var rdecode = /(%[0-9A-Z]{2})+/g;
106 | var i = 0;
107 |
108 | for (; i < cookies.length; i++) {
109 | var parts = cookies[i].split('=');
110 | var cookie = parts.slice(1).join('=');
111 |
112 | if (cookie.charAt(0) === '"') {
113 | cookie = cookie.slice(1, -1);
114 | }
115 |
116 | try {
117 | var name = parts[0].replace(rdecode, decodeURIComponent);
118 | cookie = converter.read ?
119 | converter.read(cookie, name) : converter(cookie, name) ||
120 | cookie.replace(rdecode, decodeURIComponent);
121 |
122 | if (this.json) {
123 | try {
124 | cookie = JSON.parse(cookie);
125 | } catch (e) {}
126 | }
127 |
128 | if (key === name) {
129 | result = cookie;
130 | break;
131 | }
132 |
133 | if (!key) {
134 | result[name] = cookie;
135 | }
136 | } catch (e) {}
137 | }
138 |
139 | return result;
140 | }
141 |
142 | api.set = api;
143 | api.get = function (key) {
144 | return api.call(api, key);
145 | };
146 | api.getJSON = function () {
147 | return api.apply({
148 | json: true
149 | }, [].slice.call(arguments));
150 | };
151 | api.defaults = {};
152 |
153 | api.remove = function (key, attributes) {
154 | api(key, '', extend(attributes, {
155 | expires: -1
156 | }));
157 | };
158 |
159 | api.withConverter = init;
160 |
161 | return api;
162 | }
163 |
164 | return init(function () {});
165 | }));
166 |
--------------------------------------------------------------------------------
/js/src/post-details.js:
--------------------------------------------------------------------------------
1 | /* global NexT: true */
2 |
3 | $(document).ready(function () {
4 |
5 | initScrollSpy();
6 |
7 | function initScrollSpy () {
8 | var tocSelector = '.post-toc';
9 | var $tocElement = $(tocSelector);
10 | var activeCurrentSelector = '.active-current';
11 |
12 | $tocElement
13 | .on('activate.bs.scrollspy', function () {
14 | var $currentActiveElement = $(tocSelector + ' .active').last();
15 |
16 | removeCurrentActiveClass();
17 | $currentActiveElement.addClass('active-current');
18 |
19 | // Scrolling to center active TOC element if TOC content is taller then viewport.
20 | $tocElement.scrollTop($currentActiveElement.offset().top - $tocElement.offset().top + $tocElement.scrollTop() - ($tocElement.height() / 2));
21 | })
22 | .on('clear.bs.scrollspy', removeCurrentActiveClass);
23 |
24 | $('body').scrollspy({ target: tocSelector });
25 |
26 | function removeCurrentActiveClass () {
27 | $(tocSelector + ' ' + activeCurrentSelector)
28 | .removeClass(activeCurrentSelector.substring(1));
29 | }
30 | }
31 |
32 | });
33 |
34 | $(document).ready(function () {
35 | var html = $('html');
36 | var TAB_ANIMATE_DURATION = 200;
37 | var hasVelocity = $.isFunction(html.velocity);
38 |
39 | $('.sidebar-nav li').on('click', function () {
40 | var item = $(this);
41 | var activeTabClassName = 'sidebar-nav-active';
42 | var activePanelClassName = 'sidebar-panel-active';
43 | if (item.hasClass(activeTabClassName)) {
44 | return;
45 | }
46 |
47 | var currentTarget = $('.' + activePanelClassName);
48 | var target = $('.' + item.data('target'));
49 |
50 | hasVelocity ?
51 | currentTarget.velocity('transition.slideUpOut', TAB_ANIMATE_DURATION, function () {
52 | target
53 | .velocity('stop')
54 | .velocity('transition.slideDownIn', TAB_ANIMATE_DURATION)
55 | .addClass(activePanelClassName);
56 | }) :
57 | currentTarget.animate({ opacity: 0 }, TAB_ANIMATE_DURATION, function () {
58 | currentTarget.hide();
59 | target
60 | .stop()
61 | .css({'opacity': 0, 'display': 'block'})
62 | .animate({ opacity: 1 }, TAB_ANIMATE_DURATION, function () {
63 | currentTarget.removeClass(activePanelClassName);
64 | target.addClass(activePanelClassName);
65 | });
66 | });
67 |
68 | item.siblings().removeClass(activeTabClassName);
69 | item.addClass(activeTabClassName);
70 | });
71 |
72 | // TOC item animation navigate & prevent #item selector in adress bar.
73 | $('.post-toc a').on('click', function (e) {
74 | e.preventDefault();
75 | var targetSelector = NexT.utils.escapeSelector(this.getAttribute('href'));
76 | var offset = $(targetSelector).offset().top;
77 |
78 | hasVelocity ?
79 | html.velocity('stop').velocity('scroll', {
80 | offset: offset + 'px',
81 | mobileHA: false
82 | }) :
83 | $('html, body').stop().animate({
84 | scrollTop: offset
85 | }, 500);
86 | });
87 |
88 | // Expand sidebar on post detail page by default, when post has a toc.
89 | var $tocContent = $('.post-toc-content');
90 | var isSidebarCouldDisplay = CONFIG.sidebar.display === 'post' ||
91 | CONFIG.sidebar.display === 'always';
92 | var hasTOC = $tocContent.length > 0 && $tocContent.html().trim().length > 0;
93 | if (isSidebarCouldDisplay && hasTOC) {
94 | CONFIG.motion.enable ?
95 | (NexT.motion.middleWares.sidebar = function () {
96 | NexT.utils.displaySidebar();
97 | }) : NexT.utils.displaySidebar();
98 | }
99 | });
100 |
--------------------------------------------------------------------------------
/js/src/schemes/pisces.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function () {
2 |
3 | var sidebarInner = $('.sidebar-inner');
4 |
5 | initAffix();
6 | resizeListener();
7 |
8 | function initAffix () {
9 | var headerOffset = getHeaderOffset(),
10 | footerOffset = getFooterOffset(),
11 | sidebarHeight = $('#sidebar').height() + NexT.utils.getSidebarb2tHeight(),
12 | contentHeight = $('#content').height();
13 |
14 | // Not affix if sidebar taller then content (to prevent bottom jumping).
15 | if (headerOffset + sidebarHeight < contentHeight) {
16 | sidebarInner.affix({
17 | offset: {
18 | top: headerOffset - CONFIG.sidebar.offset,
19 | bottom: footerOffset
20 | }
21 | });
22 | }
23 |
24 | setSidebarMarginTop(headerOffset).css({ 'margin-left': 'initial' });
25 | }
26 |
27 | function resizeListener () {
28 | var mql = window.matchMedia('(min-width: 991px)');
29 | mql.addListener(function(e){
30 | if(e.matches){
31 | recalculateAffixPosition();
32 | }
33 | });
34 | }
35 |
36 | function getHeaderOffset () {
37 | return $('.header-inner').height() + CONFIG.sidebar.offset;
38 | }
39 |
40 | function getFooterOffset () {
41 | var footerInner = $('.footer-inner'),
42 | footerMargin = footerInner.outerHeight(true) - footerInner.outerHeight(),
43 | footerOffset = footerInner.outerHeight(true) + footerMargin;
44 | return footerOffset;
45 | }
46 |
47 | function setSidebarMarginTop (headerOffset) {
48 | return $('#sidebar').css({ 'margin-top': headerOffset });
49 | }
50 |
51 | function recalculateAffixPosition () {
52 | $(window).off('.affix');
53 | sidebarInner.removeData('bs.affix').removeClass('affix affix-top affix-bottom');
54 | initAffix();
55 | }
56 |
57 | });
58 |
--------------------------------------------------------------------------------
/js/src/scroll-cookie.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function() {
2 |
3 | // Set relative link path (without domain)
4 | var rpath = window.location.href.replace(window.location.origin, "");
5 |
6 | // Write position in cookie
7 | var timeout;
8 | $(window).on("scroll", function() {
9 | clearTimeout(timeout);
10 | timeout = setTimeout(function () {
11 | Cookies.set("scroll-cookie", ($(window).scrollTop() + "|" + rpath), { expires: 365, path: '' });
12 | }, 250);
13 | });
14 |
15 | // Read position from cookie
16 | if (Cookies.get("scroll-cookie") !== undefined) {
17 | var cvalues = Cookies.get("scroll-cookie").split('|');
18 | if (cvalues[1] == rpath) {
19 | $(window).scrollTop(cvalues[0]);
20 | }
21 | }
22 |
23 | });
24 |
--------------------------------------------------------------------------------
/js/src/scrollspy.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: scrollspy.js v3.3.2
3 | * http://getbootstrap.com/javascript/#scrollspy
4 | * ========================================================================
5 | * Copyright 2011-2015 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 | /**
10 | * Custom by iissnan
11 | *
12 | * - Add a `clear.bs.scrollspy` event.
13 | * - Esacpe targets selector.
14 | */
15 |
16 |
17 | +function ($) {
18 | 'use strict';
19 |
20 | // SCROLLSPY CLASS DEFINITION
21 | // ==========================
22 |
23 | function ScrollSpy(element, options) {
24 | this.$body = $(document.body)
25 | this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26 | this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
27 | this.selector = (this.options.target || '') + ' .nav li > a'
28 | this.offsets = []
29 | this.targets = []
30 | this.activeTarget = null
31 | this.scrollHeight = 0
32 |
33 | this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
34 | this.refresh()
35 | this.process()
36 | }
37 |
38 | ScrollSpy.VERSION = '3.3.2'
39 |
40 | ScrollSpy.DEFAULTS = {
41 | offset: 10
42 | }
43 |
44 | ScrollSpy.prototype.getScrollHeight = function () {
45 | return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
46 | }
47 |
48 | ScrollSpy.prototype.refresh = function () {
49 | var that = this
50 | var offsetMethod = 'offset'
51 | var offsetBase = 0
52 |
53 | this.offsets = []
54 | this.targets = []
55 | this.scrollHeight = this.getScrollHeight()
56 |
57 | if (!$.isWindow(this.$scrollElement[0])) {
58 | offsetMethod = 'position'
59 | offsetBase = this.$scrollElement.scrollTop()
60 | }
61 |
62 | this.$body
63 | .find(this.selector)
64 | .map(function () {
65 | var $el = $(this)
66 | var href = $el.data('target') || $el.attr('href')
67 | var $href = /^#./.test(href) && $(NexT.utils.escapeSelector(href)) // Need to escape selector.
68 |
69 | return ($href
70 | && $href.length
71 | && $href.is(':visible')
72 | && [[$href[offsetMethod]().top + offsetBase, href]]) || null
73 | })
74 | .sort(function (a, b) { return a[0] - b[0] })
75 | .each(function () {
76 | that.offsets.push(this[0])
77 | that.targets.push(this[1])
78 | })
79 |
80 |
81 | }
82 |
83 | ScrollSpy.prototype.process = function () {
84 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
85 | var scrollHeight = this.getScrollHeight()
86 | var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
87 | var offsets = this.offsets
88 | var targets = this.targets
89 | var activeTarget = this.activeTarget
90 | var i
91 |
92 | if (this.scrollHeight != scrollHeight) {
93 | this.refresh()
94 | }
95 |
96 | if (scrollTop >= maxScroll) {
97 | return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
98 | }
99 |
100 | if (activeTarget && scrollTop < offsets[0]) {
101 | $(this.selector).trigger('clear.bs.scrollspy') // Add a custom event.
102 | this.activeTarget = null
103 | return this.clear()
104 | }
105 |
106 | for (i = offsets.length; i--;) {
107 | activeTarget != targets[i]
108 | && scrollTop >= offsets[i]
109 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
110 | && this.activate(targets[i])
111 | }
112 | }
113 |
114 | ScrollSpy.prototype.activate = function (target) {
115 | this.activeTarget = target
116 |
117 | this.clear()
118 |
119 | var selector = this.selector +
120 | '[data-target="' + target + '"],' +
121 | this.selector + '[href="' + target + '"]'
122 |
123 | var active = $(selector)
124 | .parents('li')
125 | .addClass('active')
126 |
127 | if (active.parent('.dropdown-menu').length) {
128 | active = active
129 | .closest('li.dropdown')
130 | .addClass('active')
131 | }
132 |
133 | active.trigger('activate.bs.scrollspy')
134 | }
135 |
136 | ScrollSpy.prototype.clear = function () {
137 | $(this.selector)
138 | .parentsUntil(this.options.target, '.active')
139 | .removeClass('active')
140 | }
141 |
142 |
143 | // SCROLLSPY PLUGIN DEFINITION
144 | // ===========================
145 |
146 | function Plugin(option) {
147 | return this.each(function () {
148 | var $this = $(this)
149 | var data = $this.data('bs.scrollspy')
150 | var options = typeof option == 'object' && option
151 |
152 | if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
153 | if (typeof option == 'string') data[option]()
154 | })
155 | }
156 |
157 | var old = $.fn.scrollspy
158 |
159 | $.fn.scrollspy = Plugin
160 | $.fn.scrollspy.Constructor = ScrollSpy
161 |
162 |
163 | // SCROLLSPY NO CONFLICT
164 | // =====================
165 |
166 | $.fn.scrollspy.noConflict = function () {
167 | $.fn.scrollspy = old
168 | return this
169 | }
170 |
171 |
172 | // SCROLLSPY DATA-API
173 | // ==================
174 |
175 | $(window).on('load.bs.scrollspy.data-api', function () {
176 | $('[data-spy="scroll"]').each(function () {
177 | var $spy = $(this)
178 | Plugin.call($spy, $spy.data())
179 | })
180 | })
181 |
182 | }(jQuery);
183 |
--------------------------------------------------------------------------------
/lib/Han/dist/font/han-space.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/lib/Han/dist/font/han-space.otf
--------------------------------------------------------------------------------
/lib/Han/dist/font/han-space.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/lib/Han/dist/font/han-space.woff
--------------------------------------------------------------------------------
/lib/Han/dist/font/han.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/lib/Han/dist/font/han.otf
--------------------------------------------------------------------------------
/lib/Han/dist/font/han.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/lib/Han/dist/font/han.woff
--------------------------------------------------------------------------------
/lib/Han/dist/font/han.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhangxiang958/Blog/c488898721077e73fbf79809b89bbfc970871ab9/lib/Han/dist/font/han.woff2
--------------------------------------------------------------------------------
/lib/algolia-instant-search/instantsearch.min.css:
--------------------------------------------------------------------------------
1 | /*! instantsearch.js 1.5.0 | © Algolia Inc. and other contributors; Licensed MIT | github.com/algolia/instantsearch.js */.ais-search-box--powered-by{font-size:.8em;text-align:right;margin-top:2px}.ais-search-box--powered-by-link{display:inline-block;width:45px;height:16px;text-indent:101%;overflow:hidden;white-space:nowrap;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAAAgCAYAAABwzXTcAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjVlhTJlAAAIJElEQVRoQ+1Za2xURRTugqJVEBAlhICBRFEQeRfodssqiDZaS8vu3dsXVlAbxReJwVfAoqJ/sBqE3S1IgqgBrY9EQ6KJiUAokUfpvQUKogIBlKbyEEUolNL6ndkzw9129+72YaFJv+Rk737nzMyZ756dmXs3oQtd6EJ7oaioqJvX603kr1cl8vPzb+TLzo3MzMx+Xk0r03y+0x5Ne4vpqwoohjeQ4yHYcaYiwcGfVz+ysrIGQfBGsqtWdE37lvLz+nwnmVLIyMjoBd9GxPwL/wKmOw4zCgr6YPBNSGILEviYaVt0dtHxK/DK/BFXq2lad3Z1DJDUqzIBYZrmYldUdLToI4r29HCWmLozUPmEK2AUOgOmRysttRXKTnSPxzMWfD37q0B13DJTUFBwPQatlgKKJJAsu6Oio0VPDlQsTgmajWEWMOaxOyLsRCdQccGez87OHshUxwAJzZbiIYFKkaSmXdJ1fRiHRERHi+4MGk+mBMwXnSVGPj7nQPS3qeLZHRGxRL9ScCAxk8Ur92Rnj5VCItHlHBMRrRDdQRXl8/nG4eaOp5uKz57sC8OkoDEkOWCO5K8CtJRgabnT6TfuS/ZXOKet2duPXVHRDqI7svLz+yPnJCxH07ANuGFDiQ+5WwF0NkWJrOuziEOCm5n7Jy8v7yYRGAHxio4kEyHuK+j3oIyXRr8o2G/wrUXMGIonQbFe18Kq3Ms39By/orw3KnsxKr06fHkxLjkDxubkEuNhMVAE2Ikuni98vsMYtwafQaYVwLvQ9qg1X2mI/xXzyuXQlgGNP+NO/kxLS7tOcOhMda7rz4rACIhH9Ky8vEGY+G4ZZ2ua9hi1gbhvQvBDScu3DUC1j8X1YSV0wDgLsX9m7tJl3lw9onRPDzGoBTFFp1NLyL+WaQUU5GSZG+IuIeYCrhskJ3ivN6o+EYFJDuCOaNBipuXGepI73gMq4k8pluh0E5GsXLoo8U1IMgPLyhDYYExqNL6/Lv1S9FT/7sHOkp0TXCvNYbgBp0hUfB6A2D6rsKn+7YMh9nvOoHkxJL6xLiGhMSzXtoiOfHqDn41ch5MmFC+O1ihEtDnP7c5QHDeJDTSQx8QGTH4E0wLwLWVfo0fXU5kOQyzR0ecL0o/EvoI1O95ZlzcpugAmiKVjKwu+1f2+0Yc9As5VZb3gX4JfQn9XwEyH+HUi1m/kc4hAW0S3A3J9TeaNOWQybQ8aEA0O8IDbmFagM6zsFP5PmA5DTNF5WUH7c7QZMR2GaKK7Ssw0FvyMe2XlIKYVUkrMR4Q/YB6b4t85HKIv5Pj9CY2Xq/3/Ep2qX+aN4prPtD0w2ftlI0z2GaatsJ5qztLPinkFO9Fzc3P7ghfrH/r5nulmiCY6qnhVSEQz4gkKIvvJD2sQS8yqfb3wifWeuN2jOazdRIewibQszszJuYO0yMnJuUXmjbZFHGYPTHAdN7iQOWtWxKMXfPNkx5FujJ3oEHOk9KGfpUw3QzTRsWHuCAloZDFlQaMDN+Ugqrocy8tUJulG/Mg34lGm2iR6YWHhteDnIq8diLmo8gwV0zH5HTGxRcddu1kOhg6PotGCKKbWdVg5N1eIIfpo1VbT3mW6GWxE30cCulbscjOlkLRsb7+UQGUuVOvGlABu0JdC9IChCqS1olNlg9+ocqOY0PG2FrHi1YHi4xJd15+2NorTaLO9h7sQsBOdTieqLX5VTDdD9OXFLCMBm26MdqANV7QpMXWm2iK69VS1AXmm0AmGfOIX4PUmS398omPjFME0oKZtsTPEqDM22qljJcFOdLTtDv4E+2vkM0BT2FR6sRAwaJQyZYuJ2Gyx5NSj2htSPzDpiVGg1aLzfga+mqqeaQX6L0HmjRh70a27Lib5KdNRgZjelsSq3W73NewKEx1xYaITwJVY/IuYDkM00Scv2zGOBETF1+MkM4npqIDga8RNwhMqUwKtFt3n+13wmlbGVBhaJDom9o4MxoQfYtoW6PQLNYDXqx65cX2r4n2+j5hWoN0e/BmOoeUpgDFH0qsFXA+FPQ5/lezDKjoBoq8Ta3TQ/MPl3zWK6XBAOMQtCglu1qcsN8NeScvcIV5d01cadqIjF9o8qd0p+rODaYW4RedBjnBwjbVq7QChPJYBPmda9Ef9sO88fC/NnDnzLnYL4MFqBvk4xt6aiO5ebfSBoLu5gmtxXZzsr0hyBXb1xRFxYHKwwivXfrJkv/EyN1VAn4tk/8hvPebyIK3J5ItR6Qssee1Ageh4drkbn7dT4fC8ZL/RRUeDqZZA2zeIVqAd7eSnud05JKEee3GtnsyEYUlhlwK4MWi3HiZeOVjsF/g+VN+biE6gN4nOYOV3UtiIhvO5028+xU3CgD5vg7B/yzFwXSf3FzvR6Y9s+Lar3GwMbW1Ex7kbHW0iw12bwHRcQPILVVtdn8Y0wYF+52LwChhV+3PMN8N0TARVQu9bJtKLMFAO5HGvSh7VFIpsikaHeNQPGt9A5JMkNG2asP2wJfSuhgMjwpOdPQp5fY0xTiD/vUxL0X8Q88JphWkF8Q5K1+dj7hVoby2Yi+Bq0G4nPkvRdjo36XiI5aaF/zNiUur9DN0Mpu3gmFx8JHH8inKxRLQUcmlpKWhesN4Zc+b0aukcrwSivuynR2lUkHjHjqo53lpBumABKjcRolbBluJ6FpaWKVTNWJ4eQLXQXnD5DwJ852ZdaAsgsvoTwM5wU1Z3hp9spwCqeigELcbS8RPE/QvX9M6iAd/rcH0YtrbJptyFdoYD1dwjPT39hnifD7rQhTiRkPAfxnOcWpCmnRwAAAAASUVORK5CYII=);background-repeat:no-repeat;background-size:contain;vertical-align:middle}.ais-pagination--item{display:inline-block;padding:3px}.ais-range-slider--value,.ais-range-slider--value-sub{font-size:.8em;padding-top:15px}.ais-pagination--item__disabled{visibility:hidden}.ais-hierarchical-menu--list__lvl1,.ais-hierarchical-menu--list__lvl2{margin-left:10px}.ais-range-slider--target{position:relative;direction:ltr;background:#F3F4F7;height:6px;margin-top:2em;margin-bottom:2em}.ais-range-slider--base{height:100%;position:relative;z-index:1;border-top:1px solid #DDD;border-bottom:1px solid #DDD;border-left:2px solid #DDD;border-right:2px solid #DDD}.ais-range-slider--origin{position:absolute;right:0;top:0;left:0;bottom:0}.ais-range-slider--connect{background:#46AEDA}.ais-range-slider--background{background:#F3F4F7}.ais-range-slider--handle{width:20px;height:20px;position:relative;z-index:1;background:#FFF;border:1px solid #46AEDA;border-radius:50%;cursor:pointer}.ais-range-slider--handle-lower{left:-10px;bottom:7px}.ais-range-slider--handle-upper{right:10px;bottom:7px}.ais-range-slider--tooltip{position:absolute;background:#FFF;top:-22px;font-size:.8em}.ais-range-slider--pips{box-sizing:border-box;position:absolute;height:3em;top:100%;left:0;width:100%}.ais-range-slider--value{width:40px;position:absolute;text-align:center;margin-left:-20px}.ais-range-slider--marker{position:absolute;background:#DDD;margin-left:-1px;width:1px;height:5px}.ais-range-slider--marker-sub{background:#DDD;width:2px;margin-left:-2px;height:13px}.ais-range-slider--marker-large{background:#DDD;width:2px;margin-left:-2px;height:12px}.ais-star-rating--star,.ais-star-rating--star__empty{display:inline-block;width:1em;height:1em}.ais-range-slider--marker-large:first-child{margin-left:0}.ais-star-rating--item{vertical-align:middle}.ais-star-rating--item__active{font-weight:700}.ais-star-rating--star:before{content:'\2605';color:#FBAE00}.ais-star-rating--star__empty:before{content:'\2606';color:#FBAE00}.ais-star-rating--link__disabled .ais-star-rating--star:before,.ais-star-rating--link__disabled .ais-star-rating--star__empty:before{color:#C9C9C9}.ais-root__collapsible .ais-header{cursor:pointer}.ais-root__collapsed .ais-body,.ais-root__collapsed .ais-footer{display:none}
--------------------------------------------------------------------------------
/lib/canvas-nest/canvas-nest.min.js:
--------------------------------------------------------------------------------
1 | !function(){function o(w,v,i){return w.getAttribute(v)||i}function j(i){return document.getElementsByTagName(i)}function l(){var i=j("script"),w=i.length,v=i[w-1];return{l:w,z:o(v,"zIndex",-1),o:o(v,"opacity",0.5),c:o(v,"color","0,0,0"),n:o(v,"count",99)}}function k(){r=u.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,n=u.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}function b(){e.clearRect(0,0,r,n);var w=[f].concat(t);var x,v,A,B,z,y;t.forEach(function(i){i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>r||i.x<0?-1:1,i.ya*=i.y>n||i.y<0?-1:1,e.fillRect(i.x-0.5,i.y-0.5,1,1);for(v=0;v' + list + '
').appendTo(this.wrap);
62 |
63 | //Load each thumbnail
64 | $.each(obj.group, function (i) {
65 | var href = thumbSource( obj.group[ i ] );
66 |
67 | if (!href) {
68 | return;
69 | }
70 |
71 | $("").load(function () {
72 | var width = this.width,
73 | height = this.height,
74 | widthRatio, heightRatio, parent;
75 |
76 | if (!that.list || !width || !height) {
77 | return;
78 | }
79 |
80 | //Calculate thumbnail width/height and center it
81 | widthRatio = width / thumbWidth;
82 | heightRatio = height / thumbHeight;
83 |
84 | parent = that.list.children().eq(i).find('a');
85 |
86 | if (widthRatio >= 1 && heightRatio >= 1) {
87 | if (widthRatio > heightRatio) {
88 | width = Math.floor(width / heightRatio);
89 | height = thumbHeight;
90 |
91 | } else {
92 | width = thumbWidth;
93 | height = Math.floor(height / widthRatio);
94 | }
95 | }
96 |
97 | $(this).css({
98 | width : width,
99 | height : height,
100 | top : Math.floor(thumbHeight / 2 - height / 2),
101 | left : Math.floor(thumbWidth / 2 - width / 2)
102 | });
103 |
104 | parent.width(thumbWidth).height(thumbHeight);
105 |
106 | $(this).hide().appendTo(parent).fadeIn(300);
107 |
108 | }).attr('src', href);
109 | });
110 |
111 | //Set initial width
112 | this.width = this.list.children().eq(0).outerWidth(true);
113 |
114 | this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)));
115 | },
116 |
117 | beforeLoad: function (opts, obj) {
118 | //Remove self if gallery do not have at least two items
119 | if (obj.group.length < 2) {
120 | obj.helpers.thumbs = false;
121 |
122 | return;
123 | }
124 |
125 | //Increase bottom margin to give space for thumbs
126 | obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15);
127 | },
128 |
129 | afterShow: function (opts, obj) {
130 | //Check if exists and create or update list
131 | if (this.list) {
132 | this.onUpdate(opts, obj);
133 |
134 | } else {
135 | this.init(opts, obj);
136 | }
137 |
138 | //Set active element
139 | this.list.children().removeClass('active').eq(obj.index).addClass('active');
140 | },
141 |
142 | //Center list
143 | onUpdate: function (opts, obj) {
144 | if (this.list) {
145 | this.list.stop(true).animate({
146 | 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))
147 | }, 150);
148 | }
149 | },
150 |
151 | beforeClose: function () {
152 | if (this.wrap) {
153 | this.wrap.remove();
154 | }
155 |
156 | this.wrap = null;
157 | this.list = null;
158 | this.width = 0;
159 | }
160 | }
161 |
162 | }(jQuery));
--------------------------------------------------------------------------------
/lib/fancybox/source/jquery.fancybox.css:
--------------------------------------------------------------------------------
1 | /*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
2 | .fancybox-wrap,
3 | .fancybox-skin,
4 | .fancybox-outer,
5 | .fancybox-inner,
6 | .fancybox-image,
7 | .fancybox-wrap iframe,
8 | .fancybox-wrap object,
9 | .fancybox-nav,
10 | .fancybox-nav span,
11 | .fancybox-tmp
12 | {
13 | padding: 0;
14 | margin: 0;
15 | border: 0;
16 | outline: none;
17 | vertical-align: top;
18 | }
19 |
20 | .fancybox-wrap {
21 | position: absolute;
22 | top: 0;
23 | left: 0;
24 | z-index: 8020;
25 | }
26 |
27 | .fancybox-skin {
28 | position: relative;
29 | background: #f9f9f9;
30 | color: #444;
31 | text-shadow: none;
32 | -webkit-border-radius: 4px;
33 | -moz-border-radius: 4px;
34 | border-radius: 4px;
35 | }
36 |
37 | .fancybox-opened {
38 | z-index: 8030;
39 | }
40 |
41 | .fancybox-opened .fancybox-skin {
42 | -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
43 | -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
44 | box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
45 | }
46 |
47 | .fancybox-outer, .fancybox-inner {
48 | position: relative;
49 | }
50 |
51 | .fancybox-inner {
52 | overflow: hidden;
53 | }
54 |
55 | .fancybox-type-iframe .fancybox-inner {
56 | -webkit-overflow-scrolling: touch;
57 | }
58 |
59 | .fancybox-error {
60 | color: #444;
61 | font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
62 | margin: 0;
63 | padding: 15px;
64 | white-space: nowrap;
65 | }
66 |
67 | .fancybox-image, .fancybox-iframe {
68 | display: block;
69 | width: 100%;
70 | height: 100%;
71 | }
72 |
73 | .fancybox-image {
74 | max-width: 100%;
75 | max-height: 100%;
76 | }
77 |
78 | #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
79 | background-image: url('fancybox_sprite.png');
80 | }
81 |
82 | #fancybox-loading {
83 | position: fixed;
84 | top: 50%;
85 | left: 50%;
86 | margin-top: -22px;
87 | margin-left: -22px;
88 | background-position: 0 -108px;
89 | opacity: 0.8;
90 | cursor: pointer;
91 | z-index: 8060;
92 | }
93 |
94 | #fancybox-loading div {
95 | width: 44px;
96 | height: 44px;
97 | background: url('fancybox_loading.gif') center center no-repeat;
98 | }
99 |
100 | .fancybox-close {
101 | position: absolute;
102 | top: -18px;
103 | right: -18px;
104 | width: 36px;
105 | height: 36px;
106 | cursor: pointer;
107 | z-index: 8040;
108 | }
109 |
110 | .fancybox-nav {
111 | position: absolute;
112 | top: 0;
113 | width: 40%;
114 | height: 100%;
115 | cursor: pointer;
116 | text-decoration: none;
117 | background: transparent url('blank.gif'); /* helps IE */
118 | -webkit-tap-highlight-color: rgba(0,0,0,0);
119 | z-index: 8040;
120 | }
121 |
122 | .fancybox-prev {
123 | left: 0;
124 | }
125 |
126 | .fancybox-next {
127 | right: 0;
128 | }
129 |
130 | .fancybox-nav span {
131 | position: absolute;
132 | top: 50%;
133 | width: 36px;
134 | height: 34px;
135 | margin-top: -18px;
136 | cursor: pointer;
137 | z-index: 8040;
138 | visibility: hidden;
139 | }
140 |
141 | .fancybox-prev span {
142 | left: 10px;
143 | background-position: 0 -36px;
144 | }
145 |
146 | .fancybox-next span {
147 | right: 10px;
148 | background-position: 0 -72px;
149 | }
150 |
151 | .fancybox-nav:hover span {
152 | visibility: visible;
153 | }
154 |
155 | .fancybox-tmp {
156 | position: absolute;
157 | top: -99999px;
158 | left: -99999px;
159 | visibility: hidden;
160 | max-width: 99999px;
161 | max-height: 99999px;
162 | overflow: visible !important;
163 | }
164 |
165 | /* Overlay helper */
166 |
167 | .fancybox-lock {
168 | overflow: hidden !important;
169 | width: auto;
170 | }
171 |
172 | .fancybox-lock body {
173 | overflow: hidden !important;
174 | }
175 |
176 | .fancybox-lock-test {
177 | overflow-y: hidden !important;
178 | }
179 |
180 | .fancybox-overlay {
181 | position: absolute;
182 | top: 0;
183 | left: 0;
184 | overflow: hidden;
185 | display: none;
186 | z-index: 8010;
187 | background: url('fancybox_overlay.png');
188 | }
189 |
190 | .fancybox-overlay-fixed {
191 | position: fixed;
192 | bottom: 0;
193 | right: 0;
194 | }
195 |
196 | .fancybox-lock .fancybox-overlay {
197 | overflow: auto;
198 | overflow-y: scroll;
199 | }
200 |
201 | /* Title helper */
202 |
203 | .fancybox-title {
204 | visibility: hidden;
205 | font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
206 | position: relative;
207 | text-shadow: none;
208 | z-index: 8050;
209 | }
210 |
211 | .fancybox-opened .fancybox-title {
212 | visibility: visible;
213 | }
214 |
215 | .fancybox-title-float-wrap {
216 | position: absolute;
217 | bottom: 0;
218 | right: 50%;
219 | margin-bottom: -35px;
220 | z-index: 8050;
221 | text-align: center;
222 | }
223 |
224 | .fancybox-title-float-wrap .child {
225 | display: inline-block;
226 | margin-right: -100%;
227 | padding: 2px 20px;
228 | background: transparent; /* Fallback for web browsers that doesn't support RGBa */
229 | background: rgba(0, 0, 0, 0.8);
230 | -webkit-border-radius: 15px;
231 | -moz-border-radius: 15px;
232 | border-radius: 15px;
233 | text-shadow: 0 1px 2px #222;
234 | color: #FFF;
235 | font-weight: bold;
236 | line-height: 24px;
237 | white-space: nowrap;
238 | }
239 |
240 | .fancybox-title-outside-wrap {
241 | position: relative;
242 | margin-top: 10px;
243 | color: #fff;
244 | }
245 |
246 | .fancybox-title-inside-wrap {
247 | padding-top: 10px;
248 | }
249 |
250 | .fancybox-title-over-wrap {
251 | position: absolute;
252 | bottom: 0;
253 | left: 0;
254 | color: #fff;
255 | padding: 10px;
256 | background: #000;
257 | background: rgba(0, 0, 0, .8);
258 | }
259 |
260 | /*Retina graphics!*/
261 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5),
262 | only screen and (min--moz-device-pixel-ratio: 1.5),
263 | only screen and (min-device-pixel-ratio: 1.5){
264 |
265 | #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
266 | background-image: url('fancybox_sprite@2x.png');
267 | background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
268 | }
269 |
270 | #fancybox-loading div {
271 | background-image: url('fancybox_loading@2x.gif');
272 | background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
273 | }
274 | }
--------------------------------------------------------------------------------
/lib/fastclick/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2014 The Financial Times Ltd.
2 |
3 | Permission is hereby granted, free of charge, to any person
4 | obtaining a copy of this software and associated documentation
5 | files (the "Software"), to deal in the Software without
6 | restriction, including without limitation the rights to use,
7 | copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the
9 | Software is furnished to do so, subject to the following
10 | conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/lib/fastclick/README.html:
--------------------------------------------------------------------------------
1 |
FastClick
click
event on mobile browsers. The aim is to make your application feel less laggy and more responsive while avoiding any interference with your current logic.Why does the delay exist?
7 |
9 | Compatibility
11 |
18 | When it isn’t needed
width=device-width
in the viewport meta tag doesn’t have a 300ms delay, therefore listeners aren’t attached.
22 | <meta name="viewport" content="width=device-width, initial-scale=1">
21 |
user-scalable=no
in the viewport meta tag. But be aware that user-scalable=no
also disables pinch zooming, which may be an accessibility concern.touch-action: manipulation;
to disable double-tap-to-zoom on certain elements (like links and buttons). For IE10 use -ms-touch-action: manipulation
.Usage
27 | <script type='application/javascript' src='/path/to/fastclick.js'></script>
26 |
body
, which is the recommended method of use:
35 | if ('addEventListener' in document) {
30 | document.addEventListener('DOMContentLoaded', function() {
31 | FastClick.attach(document.body);
32 | }, false);
33 | }
34 |
40 | $(function() {
37 | FastClick.attach(document.body);
38 | });
39 |
FastClick.attach
function will be returned when you call require('fastclick')
. As a result, the easiest way to use FastClick with these loaders is as follows:
44 | var attachFastClick = require('fastclick');
42 | attachFastClick(document.body);
43 |
Minified
make
to build a minified version of FastClick using the Closure Compiler REST API. The minified file is saved to build/fastclick.min.js
or you can download a pre-minified version.FastClick
object through Origami.fastclick
and will have the Browserify/CommonJS API (see above).
49 | var attachFastClick = Origami.fastclick;
47 | attachFastClick(document.body);
48 |
AMD
FastClick
object will be returned, not FastClick.attach
53 | var FastClick = require('fastclick');
51 | FastClick.attach(document.body, options);
52 |
Package managers
Advanced
Ignore certain elements with
needsclick
needsclick
class.
58 | <a class="needsclick">Ignored by FastClick</a>
57 |
Use case 1: non-synthetic click required
document.createEvent
to fire a synthetic click
event as soon as touchend
is fired by the browser. It then suppresses the additional click
event created by the browser after that. In some cases, the non-synthetic click
event created by the browser is required, as described in the triggering focus example.needsclick
class comes in. Add the class to any element that requires a non-synthetic click.Use case 2: Twitter Bootstrap 2.2.2 dropdowns
needsclick
class is with dropdowns in Twitter Bootstrap 2.2.2. Bootstrap add its own touchstart
listener for dropdowns, so you want to tell FastClick to ignore those. If you don’t, touch devices will automatically close the dropdown as soon as it is clicked, because both FastClick and Bootstrap execute the synthetic click, one opens the dropdown, the second closes it immediately after.
63 | <a class="dropdown-toggle needsclick" data-toggle="dropdown">Dropdown</a>
62 |
Examples
65 |
69 | click
handlerTests
tests/
are manual reduced test cases. We’ve had a think about how best to test these cases, but they tend to be very browser/device specific and sometimes subjective which means it’s not so trivial to test.Credits and collaboration
Contributing to Lazy Load
Only one feature or change per pull request
Write meaningful commit messages
Update filename.js
is not enough. When needed include also longer explanation what the commit does.Capitalized, short (50 chars or less) summary
5 |
6 | More detailed explanatory text, if necessary. Wrap it to about 72
7 | characters or so. In some contexts, the first line is treated as the
8 | subject of an email and the rest of the text as the body. The blank
9 | line separating the summary from the body is critical (unless you omit
10 | the body entirely); tools like rebase can get confused if you run the
11 | two together.
12 |
Follow the existing coding standards
23 |
--------------------------------------------------------------------------------
/lib/jquery_lazyload/README.html:
--------------------------------------------------------------------------------
1 | var snake_case = "something";
15 |
16 | function camelCase(options) {
17 | }
18 |
19 | if (true !== false) {
20 | console.log("here be dragons");
21 | }
22 |
Lazy Load Plugin for jQuery
How to Use?
8 | <script src="jquery.js" type="text/javascript"></script>
6 | <script src="jquery.lazyload.js" type="text/javascript"></script>
7 |
11 | <img class="lazy" data-original="img/example.jpg" width="640" height="480">
10 |
14 | $("img.lazy").lazyload();
13 |
Install
20 | $ bower install jquery.lazyload
18 | $ npm install jquery-lazyload
19 |
License
")
106 | .bind("load", function() {
107 |
108 | var original = $self.attr("data-" + settings.data_attribute);
109 | $self.hide();
110 | if ($self.is("img")) {
111 | $self.attr("src", original);
112 | } else {
113 | $self.css("background-image", "url('" + original + "')");
114 | }
115 | $self[settings.effect](settings.effect_speed);
116 |
117 | self.loaded = true;
118 |
119 | /* Remove image from array so it is not looped next time. */
120 | var temp = $.grep(elements, function(element) {
121 | return !element.loaded;
122 | });
123 | elements = $(temp);
124 |
125 | if (settings.load) {
126 | var elements_left = elements.length;
127 | settings.load.call(self, elements_left, settings);
128 | }
129 | })
130 | .attr("src", $self.attr("data-" + settings.data_attribute));
131 | }
132 | });
133 |
134 | /* When wanted event is triggered load original image */
135 | /* by triggering appear. */
136 | if (0 !== settings.event.indexOf("scroll")) {
137 | $self.bind(settings.event, function() {
138 | if (!self.loaded) {
139 | $self.trigger("appear");
140 | }
141 | });
142 | }
143 | });
144 |
145 | /* Check if something appears when window is resized. */
146 | $window.bind("resize", function() {
147 | update();
148 | });
149 |
150 | /* With IOS5 force loading images when navigating with back button. */
151 | /* Non optimal workaround. */
152 | if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {
153 | $window.bind("pageshow", function(event) {
154 | if (event.originalEvent && event.originalEvent.persisted) {
155 | elements.each(function() {
156 | $(this).trigger("appear");
157 | });
158 | }
159 | });
160 | }
161 |
162 | /* Force initial check if images should appear. */
163 | $(document).ready(function() {
164 | update();
165 | });
166 |
167 | return this;
168 | };
169 |
170 | /* Convenience methods in jQuery namespace. */
171 | /* Use as $.belowthefold(element, {threshold : 100, container : window}) */
172 |
173 | $.belowthefold = function(element, settings) {
174 | var fold;
175 |
176 | if (settings.container === undefined || settings.container === window) {
177 | fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();
178 | } else {
179 | fold = $(settings.container).offset().top + $(settings.container).height();
180 | }
181 |
182 | return fold <= $(element).offset().top - settings.threshold;
183 | };
184 |
185 | $.rightoffold = function(element, settings) {
186 | var fold;
187 |
188 | if (settings.container === undefined || settings.container === window) {
189 | fold = $window.width() + $window.scrollLeft();
190 | } else {
191 | fold = $(settings.container).offset().left + $(settings.container).width();
192 | }
193 |
194 | return fold <= $(element).offset().left - settings.threshold;
195 | };
196 |
197 | $.abovethetop = function(element, settings) {
198 | var fold;
199 |
200 | if (settings.container === undefined || settings.container === window) {
201 | fold = $window.scrollTop();
202 | } else {
203 | fold = $(settings.container).offset().top;
204 | }
205 |
206 | return fold >= $(element).offset().top + settings.threshold + $(element).height();
207 | };
208 |
209 | $.leftofbegin = function(element, settings) {
210 | var fold;
211 |
212 | if (settings.container === undefined || settings.container === window) {
213 | fold = $window.scrollLeft();
214 | } else {
215 | fold = $(settings.container).offset().left;
216 | }
217 |
218 | return fold >= $(element).offset().left + settings.threshold + $(element).width();
219 | };
220 |
221 | $.inviewport = function(element, settings) {
222 | return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&
223 | !$.belowthefold(element, settings) && !$.abovethetop(element, settings);
224 | };
225 |
226 | /* Custom selectors for your convenience. */
227 | /* Use as $("img:below-the-fold").something() or */
228 | /* $("img").filter(":below-the-fold").something() which is faster */
229 |
230 | $.extend($.expr[":"], {
231 | "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); },
232 | "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
233 | "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); },
234 | "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); },
235 | "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); },
236 | /* Maintain BC for couple of versions. */
237 | "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
238 | "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); },
239 | "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); }
240 | });
241 |
242 | })(jQuery, window, document);
243 |
--------------------------------------------------------------------------------
/lib/jquery_lazyload/jquery.scrollstop.js:
--------------------------------------------------------------------------------
1 | /* http://james.padolsey.com/javascript/special-scroll-events-for-jquery/ */
2 |
3 | (function(){
4 |
5 | var special = jQuery.event.special,
6 | uid1 = "D" + (+new Date()),
7 | uid2 = "D" + (+new Date() + 1);
8 |
9 | special.scrollstart = {
10 | setup: function() {
11 |
12 | var timer,
13 | handler = function(evt) {
14 |
15 | var _self = this,
16 | _args = arguments;
17 |
18 | if (timer) {
19 | clearTimeout(timer);
20 | } else {
21 | evt.type = "scrollstart";
22 | jQuery.event.dispatch.apply(_self, _args);
23 | }
24 |
25 | timer = setTimeout( function(){
26 | timer = null;
27 | }, special.scrollstop.latency);
28 |
29 | };
30 |
31 | jQuery(this).bind("scroll", handler).data(uid1, handler);
32 |
33 | },
34 | teardown: function(){
35 | jQuery(this).unbind( "scroll", jQuery(this).data(uid1) );
36 | }
37 | };
38 |
39 | special.scrollstop = {
40 | latency: 300,
41 | setup: function() {
42 |
43 | var timer,
44 | handler = function(evt) {
45 |
46 | var _self = this,
47 | _args = arguments;
48 |
49 | if (timer) {
50 | clearTimeout(timer);
51 | }
52 |
53 | timer = setTimeout( function(){
54 |
55 | timer = null;
56 | evt.type = "scrollstop";
57 | jQuery.event.dispatch.apply(_self, _args);
58 |
59 |
60 | }, special.scrollstop.latency);
61 |
62 | };
63 |
64 | jQuery(this).bind("scroll", handler).data(uid2, handler);
65 |
66 | },
67 | teardown: function() {
68 | jQuery(this).unbind( "scroll", jQuery(this).data(uid2) );
69 | }
70 | };
71 |
72 | })();
--------------------------------------------------------------------------------
/lib/needsharebutton/needsharebutton.css:
--------------------------------------------------------------------------------
1 | /***********************************************
2 | needShareButton
3 | - Version 1.0.0
4 | - Copyright 2015 Dzmitry Vasileuski
5 | - Licensed under MIT (http://opensource.org/licenses/MIT)
6 | ***********************************************/
7 | /* Social icons font
8 | ***********************************************/
9 | @import url('font-embedded.css');
10 | .need-share-button {
11 | position: relative;
12 | }
13 | .need-share-button-opened {
14 | position: relative;
15 | }
16 | .need-share-button-opened img.need-share-wechat-code-image {
17 | display: block;
18 |
19 | width: 100%;
20 | max-width: 200px;
21 | margin: auto;
22 | }
23 | .need-share-button_dropdown {
24 | position: absolute;
25 | z-index: 10;
26 |
27 | visibility: hidden;
28 | overflow: hidden;
29 |
30 | width: 300px;
31 |
32 | font-size: 16px;
33 |
34 | -webkit-transition: .3s;
35 | transition: .3s;
36 | -webkit-transform: scale(.1);
37 | -ms-transform: scale(.1);
38 | transform: scale(.1);
39 | text-align: center;
40 | white-space: normal;
41 |
42 | opacity: 0;
43 | -webkit-border-radius: 4px;
44 | border-radius: 4px;
45 | background-color: #fff;
46 | -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .5);
47 | box-shadow: 0 0 2px rgba(0, 0, 0, .5);
48 | }
49 | .need-share-button-opened .need-share-button_dropdown {
50 | visibility: visible;
51 |
52 | -webkit-transform: scale(1);
53 | -ms-transform: scale(1);
54 | transform: scale(1);
55 |
56 | opacity: 1;
57 | }
58 | .need-share-button_dropdown-box-vertical,
59 | .need-share-button_dropdown-box-horizontal {
60 | -webkit-border-radius: 0;
61 | border-radius: 0;
62 | }
63 | .need-share-button_dropdown-box-vertical {
64 | width: 50px;
65 | }
66 | .need-share-button_dropdown-box-horizontal {
67 | width: auto;
68 |
69 | white-space: nowrap;
70 | }
71 | .need-share-button_link {
72 | display: inline-block;
73 |
74 | width: 50px;
75 | height: 50px;
76 |
77 | line-height: 50px;
78 |
79 | cursor: pointer;
80 | text-align: center;
81 | }
82 | .need-share-button_link:hover {
83 | -webkit-transition: .3s;
84 | transition: .3s;
85 |
86 | opacity: .7;
87 | }
88 | /* Dropdown position
89 | ***********************************************/
90 | .need-share-button_dropdown-top-left {
91 | right: 100%;
92 | bottom: 100%;
93 |
94 | margin-right: 10px;
95 | margin-bottom: 10px;
96 | }
97 | .need-share-button_dropdown-top-right {
98 | bottom: 100%;
99 | left: 100%;
100 |
101 | margin-bottom: 10px;
102 | margin-left: 10px;
103 | }
104 | .need-share-button_dropdown-top-center {
105 | bottom: 100%;
106 | left: 50%;
107 |
108 | margin-bottom: 10px;
109 | }
110 | .need-share-button_dropdown-middle-left {
111 | top: 50%;
112 | right: 100%;
113 |
114 | margin-right: 10px;
115 | }
116 | .need-share-button_dropdown-middle-right {
117 | top: 50%;
118 | left: 100%;
119 |
120 | margin-left: 10px;
121 | }
122 | .need-share-button_dropdown-bottom-left {
123 | top: 100%;
124 | right: 100%;
125 |
126 | margin-top: 10px;
127 | margin-right: 10px;
128 | }
129 | .need-share-button_dropdown-bottom-right {
130 | top: 100%;
131 | left: 100%;
132 |
133 | margin-top: 10px;
134 | margin-left: 10px;
135 | }
136 | .need-share-button_dropdown-bottom-center {
137 | top: 100%;
138 | left: 50%;
139 |
140 | margin-top: 10px;
141 | }
142 | /* Default theme
143 | ***********************************************/
144 | .need-share-button-default {
145 | display: inline-block;
146 |
147 | margin-bottom: 0;
148 | padding: 6px 12px;
149 |
150 | font-size: 14px;
151 | line-height: 1.42857143;
152 | font-weight: 400;
153 | color: #333;
154 |
155 | cursor: pointer;
156 | -webkit-user-select: none;
157 | -moz-user-select: none;
158 | -ms-user-select: none;
159 | user-select: none;
160 | text-align: center;
161 | vertical-align: middle;
162 |
163 | border: 1px solid #ccc;
164 | -webkit-border-radius: 4px;
165 | border-radius: 4px;
166 | background-color: #fff;
167 | }
168 | /* Network buttons
169 | ***********************************************/
170 | .need-share-button_wechat {
171 | color: #a2dc30;
172 | }
173 | .need-share-button_wechat.need-share-button_link-box {
174 | color: #fff;
175 |
176 | background: #a2dc30;
177 | }
178 | .need-share-button_weibo {
179 | color: #d52b2b;
180 | }
181 | .need-share-button_weibo.need-share-button_link-box {
182 | color: #fff;
183 |
184 | background: #d52b2b;
185 | }
186 | .need-share-button_douban {
187 | color: #072;
188 | }
189 | .need-share-button_douban:before {
190 | content: '豆';
191 | }
192 | .need-share-button_douban.need-share-button_link-box {
193 | color: #fff;
194 |
195 | background: #072;
196 | }
197 | .need-share-button_qqzone {
198 | color: #ffce00;
199 | }
200 | .need-share-button_qqzone.need-share-button_link-box {
201 | color: #fff;
202 |
203 | background: #ffce00;
204 | }
205 | .need-share-button_renren {
206 | color: #207cc5;
207 | }
208 | .need-share-button_renren.need-share-button_link-box {
209 | color: #fff;
210 |
211 | background: #207cc5;
212 | }
213 | .need-share-button_mailto {
214 | color: #efbe00;
215 | }
216 | .need-share-button_mailto.need-share-button_link-box {
217 | color: #fff;
218 |
219 | background: #efbe00;
220 | }
221 | .need-share-button_twitter {
222 | color: #00acec;
223 | }
224 | .need-share-button_twitter.need-share-button_link-box {
225 | color: #fff;
226 |
227 | background: #00acec;
228 | }
229 | .need-share-button_pinterest {
230 | color: #cd2027;
231 | }
232 | .need-share-button_pinterest.need-share-button_link-box {
233 | color: #fff;
234 |
235 | background: #cd2027;
236 | }
237 | .need-share-button_facebook {
238 | color: #3b5998;
239 | }
240 | .need-share-button_facebook.need-share-button_link-box {
241 | color: #fff;
242 |
243 | background: #3b5998;
244 | }
245 | .need-share-button_googleplus {
246 | color: #d44132;
247 | }
248 | .need-share-button_googleplus.need-share-button_link-box {
249 | color: #fff;
250 |
251 | background: #d44132;
252 | }
253 | .need-share-button_reddit {
254 | color: #000;
255 | }
256 | .need-share-button_reddit.need-share-button_link-box {
257 | color: #fff;
258 |
259 | background: #000;
260 | }
261 | .need-share-button_delicious {
262 | color: #000;
263 | }
264 | .need-share-button_delicious.need-share-button_link-box {
265 | color: #fff;
266 |
267 | background: #000;
268 | }
269 | .need-share-button_stumbleupon {
270 | color: #f04e23;
271 | }
272 | .need-share-button_stumbleupon.need-share-button_link-box {
273 | color: #fff;
274 |
275 | background: #f04e23;
276 | }
277 | .need-share-button_linkedin {
278 | color: #0085af;
279 | }
280 | .need-share-button_linkedin.need-share-button_link-box {
281 | color: #fff;
282 |
283 | background: #0085af;
284 | }
285 | .need-share-button_slashdot {
286 | color: #026664;
287 | }
288 | .need-share-button_slashdot.need-share-button_link-box {
289 | color: #fff;
290 |
291 | background: #026664;
292 | }
293 | .need-share-button_technorati {
294 | color: #49ae47;
295 | }
296 | .need-share-button_technorati.need-share-button_link-box {
297 | color: #fff;
298 |
299 | background: #49ae47;
300 | }
301 | .need-share-button_posterous {
302 | color: #795d31;
303 | }
304 | .need-share-button_posterous.need-share-button_link-box {
305 | color: #fff;
306 |
307 | background: #795d31;
308 | }
309 | .need-share-button_tumblr {
310 | color: #34465d;
311 | }
312 | .need-share-button_tumblr.need-share-button_link-box {
313 | color: #fff;
314 |
315 | background: #34465d;
316 | }
317 | .need-share-button_googlebookmarks {
318 | color: #fde331;
319 | }
320 | .need-share-button_googlebookmarks.need-share-button_link-box {
321 | color: #fff;
322 |
323 | background: #fde331;
324 | }
325 | .need-share-button_newsvine {
326 | color: #03652c;
327 | }
328 | .need-share-button_newsvine.need-share-button_link-box {
329 | color: #fff;
330 |
331 | background: #03652c;
332 | }
333 | .need-share-button_evernote {
334 | color: #79d626;
335 | }
336 | .need-share-button_evernote.need-share-button_link-box {
337 | color: #fff;
338 |
339 | background: #79d626;
340 | }
341 | .need-share-button_friendfeed {
342 | color: #b0cbe9;
343 | }
344 | .need-share-button_friendfeed.need-share-button_link-box {
345 | color: #fff;
346 |
347 | background: #b0cbe9;
348 | }
349 | .need-share-button_vkontakte {
350 | color: #4c75a3;
351 | }
352 | .need-share-button_vkontakte.need-share-button_link-box {
353 | color: #fff;
354 |
355 | background: #4c75a3;
356 | }
357 | .need-share-button_odnoklassniki {
358 | color: #ed812b;
359 | }
360 | .need-share-button_odnoklassniki.need-share-button_link-box {
361 | color: #fff;
362 |
363 | background: #ed812b;
364 | }
365 | .need-share-button_mailru {
366 | color: #f89c0e;
367 | }
368 | .need-share-button_mailru.need-share-button_link-box {
369 | color: #fff;
370 |
371 | background: #f89c0e;
372 | }
373 |
--------------------------------------------------------------------------------
/lib/pace/pace-theme-barber-shop.min.css:
--------------------------------------------------------------------------------
1 | .pace,.pace .pace-progress{width:100%;overflow:hidden}.pace,.pace .pace-activity{position:fixed;top:0;left:0}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:2000;height:12px;background:#fff}.pace-inactive{display:none}.pace .pace-progress{background-color:#29d;position:fixed;top:0;bottom:0;right:100%}.pace .pace-activity{right:-32px;bottom:0;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.2)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.2)),color-stop(.75,rgba(255,255,255,.2)),color-stop(.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);-webkit-background-size:32px 32px;-moz-background-size:32px 32px;-o-background-size:32px 32px;background-size:32px 32px;-webkit-animation:pace-theme-barber-shop-motion .5s linear infinite;-moz-animation:pace-theme-barber-shop-motion .5s linear infinite;-ms-animation:pace-theme-barber-shop-motion .5s linear infinite;-o-animation:pace-theme-barber-shop-motion .5s linear infinite;animation:pace-theme-barber-shop-motion .5s linear infinite}@-webkit-keyframes pace-theme-barber-shop-motion{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate(-32px,0);transform:translate(-32px,0)}}@-moz-keyframes pace-theme-barber-shop-motion{0%{-moz-transform:none;transform:none}100%{-moz-transform:translate(-32px,0);transform:translate(-32px,0)}}@-o-keyframes pace-theme-barber-shop-motion{0%{-o-transform:none;transform:none}100%{-o-transform:translate(-32px,0);transform:translate(-32px,0)}}@-ms-keyframes pace-theme-barber-shop-motion{0%{-ms-transform:none;transform:none}100%{-ms-transform:translate(-32px,0);transform:translate(-32px,0)}}@keyframes pace-theme-barber-shop-motion{0%{transform:none}100%{transform:translate(-32px,0)}}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-big-counter.min.css:
--------------------------------------------------------------------------------
1 | .pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace.pace-inactive .pace-progress{display:none}.pace .pace-progress{position:fixed;z-index:2000;top:0;right:0;height:5rem;width:5rem;-webkit-transform:translate3d(0,0,0)!important;-ms-transform:translate3d(0,0,0)!important;transform:translate3d(0,0,0)!important}.pace .pace-progress:after{display:block;position:absolute;top:0;right:.5rem;content:attr(data-progress-text);font-family:"Helvetica Neue",sans-serif;font-weight:100;font-size:5rem;line-height:1;text-align:right;color:rgba(34,153,221,.19999999999999996)}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-bounce.min.css:
--------------------------------------------------------------------------------
1 | .pace{width:140px;height:300px;position:fixed;top:-90px;right:-20px;z-index:2000;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);opacity:0;-webkit-transition:all 2s linear 0s;-moz-transition:all 2s linear 0s;transition:all 2s linear 0s}.pace.pace-active{-webkit-transform:scale(.25);-moz-transform:scale(.25);-ms-transform:scale(.25);-o-transform:scale(.25);transform:scale(.25);opacity:1}.pace .pace-activity{width:140px;height:140px;border-radius:70px;background:#29d;position:absolute;top:0;z-index:1911;-webkit-animation:pace-bounce 1s infinite;-moz-animation:pace-bounce 1s infinite;-o-animation:pace-bounce 1s infinite;-ms-animation:pace-bounce 1s infinite;animation:pace-bounce 1s infinite}.pace .pace-progress{position:absolute;display:block;left:50%;bottom:0;z-index:1910;margin-left:-30px;width:60px;height:75px;background:rgba(20,20,20,.1);box-shadow:0 0 20px 35px rgba(20,20,20,.1);border-radius:30px/40px;-webkit-transform:scaleY(.3)!important;-moz-transform:scaleY(.3)!important;-ms-transform:scaleY(.3)!important;-o-transform:scaleY(.3)!important;transform:scaleY(.3)!important;-webkit-animation:pace-compress .5s infinite alternate;-moz-animation:pace-compress .5s infinite alternate;-o-animation:pace-compress .5s infinite alternate;-ms-animation:pace-compress .5s infinite alternate;animation:pace-compress .5s infinite alternate}@-webkit-keyframes pace-bounce{0%,100%,95%{top:0;-webkit-animation-timing-function:ease-in}50%{top:140px;height:140px;-webkit-animation-timing-function:ease-out}55%{top:160px;height:120px;border-radius:70px/60px;-webkit-animation-timing-function:ease-in}65%{top:120px;height:140px;border-radius:70px;-webkit-animation-timing-function:ease-out}}@-moz-keyframes pace-bounce{0%,100%,95%{top:0;-moz-animation-timing-function:ease-in}50%{top:140px;height:140px;-moz-animation-timing-function:ease-out}55%{top:160px;height:120px;border-radius:70px/60px;-moz-animation-timing-function:ease-in}65%{top:120px;height:140px;border-radius:70px;-moz-animation-timing-function:ease-out}}@keyframes pace-bounce{0%,100%,95%{top:0;animation-timing-function:ease-in}50%{top:140px;height:140px;animation-timing-function:ease-out}55%{top:160px;height:120px;border-radius:70px/60px;animation-timing-function:ease-in}65%{top:120px;height:140px;border-radius:70px;animation-timing-function:ease-out}}@-webkit-keyframes pace-compress{0%{bottom:0;margin-left:-30px;width:60px;height:75px;background:rgba(20,20,20,.1);box-shadow:0 0 20px 35px rgba(20,20,20,.1);border-radius:30px/40px;-webkit-animation-timing-function:ease-in}100%{bottom:30px;margin-left:-10px;width:20px;height:5px;background:rgba(20,20,20,.3);box-shadow:0 0 20px 35px rgba(20,20,20,.3);border-radius:20px;-webkit-animation-timing-function:ease-out}}@-moz-keyframes pace-compress{0%{bottom:0;margin-left:-30px;width:60px;height:75px;background:rgba(20,20,20,.1);box-shadow:0 0 20px 35px rgba(20,20,20,.1);border-radius:30px/40px;-moz-animation-timing-function:ease-in}100%{bottom:30px;margin-left:-10px;width:20px;height:5px;background:rgba(20,20,20,.3);box-shadow:0 0 20px 35px rgba(20,20,20,.3);border-radius:20px;-moz-animation-timing-function:ease-out}}@keyframes pace-compress{0%{bottom:0;margin-left:-30px;width:60px;height:75px;background:rgba(20,20,20,.1);box-shadow:0 0 20px 35px rgba(20,20,20,.1);border-radius:30px/40px;animation-timing-function:ease-in}100%{bottom:30px;margin-left:-10px;width:20px;height:5px;background:rgba(20,20,20,.3);box-shadow:0 0 20px 35px rgba(20,20,20,.3);border-radius:20px;animation-timing-function:ease-out}}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-center-atom.min.css:
--------------------------------------------------------------------------------
1 | .pace,.pace .pace-progress{z-index:2000;height:60px;width:100px}.pace .pace-activity,.pace .pace-progress:before{border-radius:50%;display:block;position:absolute}.pace.pace-inactive{display:none}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;position:fixed;margin:auto;top:0;left:0;right:0;bottom:0}.pace .pace-progress{position:absolute;-webkit-transform:translate3d(0,0,0)!important;-ms-transform:translate3d(0,0,0)!important;transform:translate3d(0,0,0)!important}.pace .pace-progress:before{content:attr(data-progress-text);text-align:center;color:#fff;background:#29d;font-family:"Helvetica Neue",sans-serif;font-size:14px;font-weight:100;line-height:1;padding:20% 0 7px;width:50%;height:40%;margin:10px 0 0 30px;z-index:999}.pace .pace-activity{font-size:15px;line-height:1;z-index:2000;-webkit-animation:pace-theme-center-atom-spin 2s linear infinite;-moz-animation:pace-theme-center-atom-spin 2s linear infinite;-o-animation:pace-theme-center-atom-spin 2s linear infinite;animation:pace-theme-center-atom-spin 2s linear infinite;border:5px solid #29d;content:' ';top:0;left:0;height:60px;width:100px}.pace .pace-activity:after,.pace .pace-activity:before{content:' ';display:block;position:absolute;top:-5px;left:-5px;height:60px;width:100px}.pace .pace-activity:after{border-radius:50%;border:5px solid #29d;-webkit-transform:rotate(60deg);-moz-transform:rotate(60deg);-o-transform:rotate(60deg);transform:rotate(60deg)}.pace .pace-activity:before{border-radius:50%;border:5px solid #29d;-webkit-transform:rotate(120deg);-moz-transform:rotate(120deg);-o-transform:rotate(120deg);transform:rotate(120deg)}@-webkit-keyframes pace-theme-center-atom-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-moz-keyframes pace-theme-center-atom-spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-o-keyframes pace-theme-center-atom-spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@keyframes pace-theme-center-atom-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-center-circle.min.css:
--------------------------------------------------------------------------------
1 | .pace,.pace .pace-progress{z-index:2000;left:0;top:0;height:6rem}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-perspective:12rem;-moz-perspective:12rem;-ms-perspective:12rem;-o-perspective:12rem;perspective:12rem;position:fixed;width:6rem;margin:auto;right:0;bottom:0}.pace.pace-inactive .pace-progress{display:none}.pace .pace-progress{display:block;position:absolute;width:6rem!important;line-height:6rem;font-size:2rem;border-radius:50%;background:rgba(34,153,221,.8);color:#fff;font-family:"Helvetica Neue",sans-serif;font-weight:100;text-align:center;-webkit-animation:pace-theme-center-circle-spin linear infinite 2s;-moz-animation:pace-theme-center-circle-spin linear infinite 2s;-ms-animation:pace-theme-center-circle-spin linear infinite 2s;-o-animation:pace-theme-center-circle-spin linear infinite 2s;animation:pace-theme-center-circle-spin linear infinite 2s;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d}.pace .pace-progress:after{content:attr(data-progress-text);display:block}@-webkit-keyframes pace-theme-center-circle-spin{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(360deg)}}@-moz-keyframes pace-theme-center-circle-spin{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(360deg)}}@-ms-keyframes pace-theme-center-circle-spin{from{-ms-transform:rotateY(0)}to{-ms-transform:rotateY(360deg)}}@-o-keyframes pace-theme-center-circle-spin{from{-o-transform:rotateY(0)}to{-o-transform:rotateY(360deg)}}@keyframes pace-theme-center-circle-spin{from{transform:rotateY(0)}to{transform:rotateY(360deg)}}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-center-radar.min.css:
--------------------------------------------------------------------------------
1 | .pace,.pace .pace-activity{z-index:2000;height:90px;width:90px}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;position:fixed;margin:auto;top:0;left:0;right:0;bottom:0}.pace.pace-inactive .pace-activity{display:none}.pace .pace-activity,.pace .pace-activity:before{position:absolute;display:block;border-color:#29d transparent transparent;border-radius:50%}.pace .pace-activity{left:-30px;top:-30px;border-width:30px;border-style:double;-webkit-animation:spin 1s linear infinite;-moz-animation:spin 1s linear infinite;-o-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.pace .pace-activity:before{content:' ';top:10px;left:10px;height:50px;width:50px;border-width:10px;border-style:solid}@-webkit-keyframes spin{100%{-webkit-transform:rotate(359deg)}}@-moz-keyframes spin{100%{-moz-transform:rotate(359deg)}}@-o-keyframes spin{100%{-moz-transform:rotate(359deg)}}@keyframes spin{100%{transform:rotate(359deg)}}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-center-simple.min.css:
--------------------------------------------------------------------------------
1 | .pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:2000;position:fixed;margin:auto;top:0;left:0;right:0;bottom:0;height:5px;width:200px;background:#fff;border:1px solid #29d;overflow:hidden}.pace .pace-progress{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);max-width:200px;z-index:2000;display:block;position:absolute;top:0;right:100%;height:100%;width:100%;background:#29d}.pace.pace-inactive{display:none}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-corner-indicator.min.css:
--------------------------------------------------------------------------------
1 | .pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace .pace-activity{display:block;position:fixed;z-index:2000;top:0;right:0;width:300px;height:300px;background:#29d;-webkit-transition:-webkit-transform .3s;transition:transform .3s;-webkit-transform:translateX(100%) translateY(-100%) rotate(45deg);transform:translateX(100%) translateY(-100%) rotate(45deg);pointer-events:none}.pace.pace-active .pace-activity{-webkit-transform:translateX(50%) translateY(-50%) rotate(45deg);transform:translateX(50%) translateY(-50%) rotate(45deg)}.pace .pace-activity::after,.pace .pace-activity::before{-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;bottom:30px;left:50%;display:block;border:5px solid #fff;border-radius:50%;content:''}.pace .pace-activity::before{margin-left:-40px;width:80px;height:80px;border-right-color:rgba(0,0,0,.2);border-left-color:rgba(0,0,0,.2);-webkit-animation:pace-theme-corner-indicator-spin 3s linear infinite;animation:pace-theme-corner-indicator-spin 3s linear infinite}.pace .pace-activity::after{bottom:50px;margin-left:-20px;width:40px;height:40px;border-top-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.2);-webkit-animation:pace-theme-corner-indicator-spin 1s linear infinite;animation:pace-theme-corner-indicator-spin 1s linear infinite}@-webkit-keyframes pace-theme-corner-indicator-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes pace-theme-corner-indicator-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-fill-left.min.css:
--------------------------------------------------------------------------------
1 | .pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background-color:rgba(34,153,221,.19999999999999996);position:fixed;z-index:-1;top:0;right:100%;bottom:0;width:100%}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-flash.min.css:
--------------------------------------------------------------------------------
1 | .pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#29d;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}.pace .pace-progress-inner{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);-moz-transform:rotate(3deg) translate(0,-4px);-ms-transform:rotate(3deg) translate(0,-4px);-o-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}.pace .pace-activity{display:block;position:fixed;z-index:2000;top:15px;right:15px;width:14px;height:14px;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:10px;-webkit-animation:pace-spinner .4s linear infinite;-moz-animation:pace-spinner .4s linear infinite;-ms-animation:pace-spinner .4s linear infinite;-o-animation:pace-spinner .4s linear infinite;animation:pace-spinner .4s linear infinite}@-webkit-keyframes pace-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes pace-spinner{0%{-moz-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes pace-spinner{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes pace-spinner{0%{-ms-transform:rotate(0);transform:rotate(0)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pace-spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-loading-bar.min.css:
--------------------------------------------------------------------------------
1 | .pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;z-index:2000;position:fixed;margin:auto;top:12px;left:0;right:0;bottom:0;width:200px;height:50px;overflow:hidden}.pace .pace-progress{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);display:block;position:absolute;right:100%;margin-right:-7px;width:93%;top:7px;height:14px;font-size:12px;background:#29d;color:#29d;line-height:60px;font-weight:700;font-family:Helvetica,Arial,"Lucida Grande",sans-serif;-webkit-box-shadow:120px 0 #fff,240px 0 #fff;-ms-box-shadow:120px 0 #fff,240px 0 #fff;box-shadow:120px 0 #fff,240px 0 #fff}.pace .pace-progress:after{content:attr(data-progress-text);display:inline-block;position:fixed;width:45px;text-align:right;right:0;padding-right:16px;top:4px}.pace .pace-progress[data-progress-text="0%"]:after{right:-200px}.pace .pace-progress[data-progress-text="1%"]:after{right:-198.14px}.pace .pace-progress[data-progress-text="2%"]:after{right:-196.28px}.pace .pace-progress[data-progress-text="3%"]:after{right:-194.42px}.pace .pace-progress[data-progress-text="4%"]:after{right:-192.56px}.pace .pace-progress[data-progress-text="5%"]:after{right:-190.7px}.pace .pace-progress[data-progress-text="6%"]:after{right:-188.84px}.pace .pace-progress[data-progress-text="7%"]:after{right:-186.98px}.pace .pace-progress[data-progress-text="8%"]:after{right:-185.12px}.pace .pace-progress[data-progress-text="9%"]:after{right:-183.26px}.pace .pace-progress[data-progress-text="10%"]:after{right:-181.4px}.pace .pace-progress[data-progress-text="11%"]:after{right:-179.54px}.pace .pace-progress[data-progress-text="12%"]:after{right:-177.68px}.pace .pace-progress[data-progress-text="13%"]:after{right:-175.82px}.pace .pace-progress[data-progress-text="14%"]:after{right:-173.96px}.pace .pace-progress[data-progress-text="15%"]:after{right:-172.1px}.pace .pace-progress[data-progress-text="16%"]:after{right:-170.24px}.pace .pace-progress[data-progress-text="17%"]:after{right:-168.38px}.pace .pace-progress[data-progress-text="18%"]:after{right:-166.52px}.pace .pace-progress[data-progress-text="19%"]:after{right:-164.66px}.pace .pace-progress[data-progress-text="20%"]:after{right:-162.8px}.pace .pace-progress[data-progress-text="21%"]:after{right:-160.94px}.pace .pace-progress[data-progress-text="22%"]:after{right:-159.08px}.pace .pace-progress[data-progress-text="23%"]:after{right:-157.22px}.pace .pace-progress[data-progress-text="24%"]:after{right:-155.36px}.pace .pace-progress[data-progress-text="25%"]:after{right:-153.5px}.pace .pace-progress[data-progress-text="26%"]:after{right:-151.64px}.pace .pace-progress[data-progress-text="27%"]:after{right:-149.78px}.pace .pace-progress[data-progress-text="28%"]:after{right:-147.92px}.pace .pace-progress[data-progress-text="29%"]:after{right:-146.06px}.pace .pace-progress[data-progress-text="30%"]:after{right:-144.2px}.pace .pace-progress[data-progress-text="31%"]:after{right:-142.34px}.pace .pace-progress[data-progress-text="32%"]:after{right:-140.48px}.pace .pace-progress[data-progress-text="33%"]:after{right:-138.62px}.pace .pace-progress[data-progress-text="34%"]:after{right:-136.76px}.pace .pace-progress[data-progress-text="35%"]:after{right:-134.9px}.pace .pace-progress[data-progress-text="36%"]:after{right:-133.04px}.pace .pace-progress[data-progress-text="37%"]:after{right:-131.18px}.pace .pace-progress[data-progress-text="38%"]:after{right:-129.32px}.pace .pace-progress[data-progress-text="39%"]:after{right:-127.46px}.pace .pace-progress[data-progress-text="40%"]:after{right:-125.6px}.pace .pace-progress[data-progress-text="41%"]:after{right:-123.74px}.pace .pace-progress[data-progress-text="42%"]:after{right:-121.88px}.pace .pace-progress[data-progress-text="43%"]:after{right:-120.02px}.pace .pace-progress[data-progress-text="44%"]:after{right:-118.16px}.pace .pace-progress[data-progress-text="45%"]:after{right:-116.3px}.pace .pace-progress[data-progress-text="46%"]:after{right:-114.44px}.pace .pace-progress[data-progress-text="47%"]:after{right:-112.58px}.pace .pace-progress[data-progress-text="48%"]:after{right:-110.72px}.pace .pace-progress[data-progress-text="49%"]:after{right:-108.86px}.pace .pace-progress[data-progress-text="50%"]:after{right:-107px}.pace .pace-progress[data-progress-text="51%"]:after{right:-105.14px}.pace .pace-progress[data-progress-text="52%"]:after{right:-103.28px}.pace .pace-progress[data-progress-text="53%"]:after{right:-101.42px}.pace .pace-progress[data-progress-text="54%"]:after{right:-99.56px}.pace .pace-progress[data-progress-text="55%"]:after{right:-97.7px}.pace .pace-progress[data-progress-text="56%"]:after{right:-95.84px}.pace .pace-progress[data-progress-text="57%"]:after{right:-93.98px}.pace .pace-progress[data-progress-text="58%"]:after{right:-92.12px}.pace .pace-progress[data-progress-text="59%"]:after{right:-90.26px}.pace .pace-progress[data-progress-text="60%"]:after{right:-88.4px}.pace .pace-progress[data-progress-text="61%"]:after{right:-86.54px}.pace .pace-progress[data-progress-text="62%"]:after{right:-84.68px}.pace .pace-progress[data-progress-text="63%"]:after{right:-82.82px}.pace .pace-progress[data-progress-text="64%"]:after{right:-80.96px}.pace .pace-progress[data-progress-text="65%"]:after{right:-79.1px}.pace .pace-progress[data-progress-text="66%"]:after{right:-77.24px}.pace .pace-progress[data-progress-text="67%"]:after{right:-75.38px}.pace .pace-progress[data-progress-text="68%"]:after{right:-73.52px}.pace .pace-progress[data-progress-text="69%"]:after{right:-71.66px}.pace .pace-progress[data-progress-text="70%"]:after{right:-69.8px}.pace .pace-progress[data-progress-text="71%"]:after{right:-67.94px}.pace .pace-progress[data-progress-text="72%"]:after{right:-66.08px}.pace .pace-progress[data-progress-text="73%"]:after{right:-64.22px}.pace .pace-progress[data-progress-text="74%"]:after{right:-62.36px}.pace .pace-progress[data-progress-text="75%"]:after{right:-60.5px}.pace .pace-progress[data-progress-text="76%"]:after{right:-58.64px}.pace .pace-progress[data-progress-text="77%"]:after{right:-56.78px}.pace .pace-progress[data-progress-text="78%"]:after{right:-54.92px}.pace .pace-progress[data-progress-text="79%"]:after{right:-53.06px}.pace .pace-progress[data-progress-text="80%"]:after{right:-51.2px}.pace .pace-progress[data-progress-text="81%"]:after{right:-49.34px}.pace .pace-progress[data-progress-text="82%"]:after{right:-47.48px}.pace .pace-progress[data-progress-text="83%"]:after{right:-45.62px}.pace .pace-progress[data-progress-text="84%"]:after{right:-43.76px}.pace .pace-progress[data-progress-text="85%"]:after{right:-41.9px}.pace .pace-progress[data-progress-text="86%"]:after{right:-40.04px}.pace .pace-progress[data-progress-text="87%"]:after{right:-38.18px}.pace .pace-progress[data-progress-text="88%"]:after{right:-36.32px}.pace .pace-progress[data-progress-text="89%"]:after{right:-34.46px}.pace .pace-progress[data-progress-text="90%"]:after{right:-32.6px}.pace .pace-progress[data-progress-text="91%"]:after{right:-30.74px}.pace .pace-progress[data-progress-text="92%"]:after{right:-28.88px}.pace .pace-progress[data-progress-text="93%"]:after{right:-27.02px}.pace .pace-progress[data-progress-text="94%"]:after{right:-25.16px}.pace .pace-progress[data-progress-text="95%"]:after{right:-23.3px}.pace .pace-progress[data-progress-text="96%"]:after{right:-21.44px}.pace .pace-progress[data-progress-text="97%"]:after{right:-19.58px}.pace .pace-progress[data-progress-text="98%"]:after{right:-17.72px}.pace .pace-progress[data-progress-text="99%"]:after{right:-15.86px}.pace .pace-progress[data-progress-text="100%"]:after{right:-14px}.pace .pace-activity{position:absolute;width:100%;height:28px;z-index:2001;box-shadow:inset 0 0 0 2px #29d,inset 0 0 0 7px #FFF;border-radius:10px}.pace.pace-inactive{display:none}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-mac-osx.min.css:
--------------------------------------------------------------------------------
1 | .pace,.pace .pace-progress{width:100%;height:12px;overflow:hidden}.pace,.pace .pace-activity{position:fixed;top:0;left:0}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:2000;background:#fff}.pace-inactive{display:none}.pace .pace-progress{background-color:#0087E1;position:fixed;top:0;right:100%;-webkit-border-radius:0 0 4px;-moz-border-radius:0 0 4px;-o-border-radius:0 0 4px;border-radius:0 0 4px;-webkit-box-shadow:inset -1px 0 #00558F,inset 0 -1px #00558F,inset 0 2px rgba(255,255,255,.5),inset 0 6px rgba(255,255,255,.3);-moz-box-shadow:inset -1px 0 #00558F,inset 0 -1px #00558F,inset 0 2px rgba(255,255,255,.5),inset 0 6px rgba(255,255,255,.3);-o-box-shadow:inset -1px 0 #00558F,inset 0 -1px #00558F,inset 0 2px rgba(255,255,255,.5),inset 0 6px rgba(255,255,255,.3);box-shadow:inset -1px 0 #00558F,inset 0 -1px #00558F,inset 0 2px rgba(255,255,255,.5),inset 0 6px rgba(255,255,255,.3)}.pace .pace-activity{right:-28px;bottom:0;-webkit-background-image:radial-gradient(rgba(255,255,255,.65) 0,rgba(255,255,255,.15) 100%);-moz-background-image:radial-gradient(rgba(255,255,255,.65) 0,rgba(255,255,255,.15) 100%);-o-background-image:radial-gradient(rgba(255,255,255,.65) 0,rgba(255,255,255,.15) 100%);background-image:radial-gradient(rgba(255,255,255,.65) 0,rgba(255,255,255,.15) 100%);-webkit-background-size:28px 100%;-moz-background-size:28px 100%;-o-background-size:28px 100%;background-size:28px 100%;-webkit-animation:pace-theme-mac-osx-motion .5s linear infinite;-moz-animation:pace-theme-mac-osx-motion .5s linear infinite;-ms-animation:pace-theme-mac-osx-motion .5s linear infinite;-o-animation:pace-theme-mac-osx-motion .5s linear infinite;animation:pace-theme-mac-osx-motion .5s linear infinite}@-webkit-keyframes pace-theme-mac-osx-motion{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate(-28px,0);transform:translate(-28px,0)}}@-moz-keyframes pace-theme-mac-osx-motion{0%{-moz-transform:none;transform:none}100%{-moz-transform:translate(-28px,0);transform:translate(-28px,0)}}@-o-keyframes pace-theme-mac-osx-motion{0%{-o-transform:none;transform:none}100%{-o-transform:translate(-28px,0);transform:translate(-28px,0)}}@-ms-keyframes pace-theme-mac-osx-motion{0%{-ms-transform:none;transform:none}100%{-ms-transform:translate(-28px,0);transform:translate(-28px,0)}}@keyframes pace-theme-mac-osx-motion{0%{transform:none}100%{transform:translate(-28px,0)}}
--------------------------------------------------------------------------------
/lib/pace/pace-theme-minimal.min.css:
--------------------------------------------------------------------------------
1 | .pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#29d;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}
--------------------------------------------------------------------------------
/lib/ua-parser-js/dist/ua-parser.pack.js:
--------------------------------------------------------------------------------
1 | /**
2 | * UAParser.js v0.7.9
3 | * Lightweight JavaScript-based User-Agent string parser
4 | * https://github.com/faisalman/ua-parser-js
5 | *
6 | * Copyright © 2012-2015 Faisal Salman