├── layout ├── index.pug ├── views │ ├── nav.pug │ ├── index.pug │ ├── main.pug │ └── head.pug ├── tag.pug ├── plugins │ ├── reward.pug │ ├── google.pug │ ├── livere.pug │ ├── mathjax.pug │ └── valine.pug ├── mixins │ ├── tags.pug │ ├── gallery.pug │ └── post.pug ├── archive.pug └── post.pug ├── source ├── img │ ├── alu │ │ ├── 吐.png │ │ ├── 汗.png │ │ ├── 不出所料.png │ │ ├── 不说话.png │ │ ├── 不高兴.png │ │ ├── 中刀.png │ │ ├── 中指.png │ │ ├── 中枪.png │ │ ├── 亲亲.png │ │ ├── 便便.png │ │ ├── 内伤.png │ │ ├── 击掌.png │ │ ├── 口水.png │ │ ├── 吐舌.png │ │ ├── 吐血倒地.png │ │ ├── 呲牙.png │ │ ├── 咽气.png │ │ ├── 哭泣.png │ │ ├── 喜极而泣.png │ │ ├── 喷水.png │ │ ├── 喷血.png │ │ ├── 坐等.png │ │ ├── 害羞.png │ │ ├── 小眼睛.png │ │ ├── 尴尬.png │ │ ├── 得意.png │ │ ├── 惊喜.png │ │ ├── 想一想.png │ │ ├── 愤怒.png │ │ ├── 扇耳光.png │ │ ├── 投降.png │ │ ├── 抠鼻.png │ │ ├── 抽烟.png │ │ ├── 无奈.png │ │ ├── 无所谓.png │ │ ├── 无语.png │ │ ├── 暗地观察.png │ │ ├── 期待.png │ │ ├── 欢呼.png │ │ ├── 深思.png │ │ ├── 狂汗.png │ │ ├── 献花.png │ │ ├── 献黄瓜.png │ │ ├── 皱眉.png │ │ ├── 看不见.png │ │ ├── 看热闹.png │ │ ├── 瞅你.png │ │ ├── 肿包.png │ │ ├── 脸红.png │ │ ├── 蜡烛.png │ │ ├── 装大款.png │ │ ├── 观察.png │ │ ├── 赞一个.png │ │ ├── 邪恶.png │ │ ├── 锁眉.png │ │ ├── 长草.png │ │ ├── 阴暗.png │ │ ├── 高兴.png │ │ ├── 黑线.png │ │ └── 鼓掌.png │ ├── alipay.png │ ├── wechat.png │ └── smiles │ │ ├── cry.gif │ │ ├── eek.gif │ │ ├── lol.gif │ │ ├── mad.gif │ │ ├── sad.gif │ │ ├── arrow.gif │ │ ├── cool.gif │ │ ├── evil.gif │ │ ├── idea.gif │ │ ├── razz.gif │ │ ├── smile.gif │ │ ├── wink.gif │ │ ├── biggrin.gif │ │ ├── confused.gif │ │ ├── exclaim.gif │ │ ├── mrgreen.gif │ │ ├── neutral.gif │ │ ├── question.gif │ │ ├── redface.gif │ │ ├── rolleyes.gif │ │ ├── twisted.gif │ │ └── surprised.gif ├── fonts │ ├── icon.eot │ ├── icon.ttf │ ├── icon.woff │ └── icon.svg ├── css │ ├── base │ │ ├── _mixin.styl │ │ ├── _util.styl │ │ ├── _font.styl │ │ ├── _reset.styl │ │ └── _base.styl │ ├── main.styl │ ├── _var.styl │ ├── vendor │ │ ├── _highlight.styl │ │ ├── _echo.styl │ │ └── _normalize.styl │ ├── _main-r.styl │ └── partial │ │ ├── _main.styl │ │ └── _post.styl └── js │ ├── main.js │ ├── particles.oli.js │ ├── fancybox │ ├── jquery.fancybox.min.css │ └── jquery.fancybox.min.js │ ├── scroller.js │ └── particles.min.js ├── package.json ├── .gitignore ├── LICENSE ├── _config.default.yml └── README.md /layout/index.pug: -------------------------------------------------------------------------------- 1 | extends views/index 2 | 3 | block head 4 | title 5 | = config.title 6 | -------------------------------------------------------------------------------- /source/img/alu/吐.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/吐.png -------------------------------------------------------------------------------- /source/img/alu/汗.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/汗.png -------------------------------------------------------------------------------- /source/fonts/icon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/fonts/icon.eot -------------------------------------------------------------------------------- /source/fonts/icon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/fonts/icon.ttf -------------------------------------------------------------------------------- /source/fonts/icon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/fonts/icon.woff -------------------------------------------------------------------------------- /source/img/alipay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alipay.png -------------------------------------------------------------------------------- /source/img/alu/不出所料.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/不出所料.png -------------------------------------------------------------------------------- /source/img/alu/不说话.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/不说话.png -------------------------------------------------------------------------------- /source/img/alu/不高兴.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/不高兴.png -------------------------------------------------------------------------------- /source/img/alu/中刀.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/中刀.png -------------------------------------------------------------------------------- /source/img/alu/中指.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/中指.png -------------------------------------------------------------------------------- /source/img/alu/中枪.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/中枪.png -------------------------------------------------------------------------------- /source/img/alu/亲亲.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/亲亲.png -------------------------------------------------------------------------------- /source/img/alu/便便.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/便便.png -------------------------------------------------------------------------------- /source/img/alu/内伤.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/内伤.png -------------------------------------------------------------------------------- /source/img/alu/击掌.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/击掌.png -------------------------------------------------------------------------------- /source/img/alu/口水.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/口水.png -------------------------------------------------------------------------------- /source/img/alu/吐舌.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/吐舌.png -------------------------------------------------------------------------------- /source/img/alu/吐血倒地.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/吐血倒地.png -------------------------------------------------------------------------------- /source/img/alu/呲牙.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/呲牙.png -------------------------------------------------------------------------------- /source/img/alu/咽气.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/咽气.png -------------------------------------------------------------------------------- /source/img/alu/哭泣.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/哭泣.png -------------------------------------------------------------------------------- /source/img/alu/喜极而泣.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/喜极而泣.png -------------------------------------------------------------------------------- /source/img/alu/喷水.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/喷水.png -------------------------------------------------------------------------------- /source/img/alu/喷血.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/喷血.png -------------------------------------------------------------------------------- /source/img/alu/坐等.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/坐等.png -------------------------------------------------------------------------------- /source/img/alu/害羞.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/害羞.png -------------------------------------------------------------------------------- /source/img/alu/小眼睛.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/小眼睛.png -------------------------------------------------------------------------------- /source/img/alu/尴尬.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/尴尬.png -------------------------------------------------------------------------------- /source/img/alu/得意.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/得意.png -------------------------------------------------------------------------------- /source/img/alu/惊喜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/惊喜.png -------------------------------------------------------------------------------- /source/img/alu/想一想.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/想一想.png -------------------------------------------------------------------------------- /source/img/alu/愤怒.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/愤怒.png -------------------------------------------------------------------------------- /source/img/alu/扇耳光.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/扇耳光.png -------------------------------------------------------------------------------- /source/img/alu/投降.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/投降.png -------------------------------------------------------------------------------- /source/img/alu/抠鼻.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/抠鼻.png -------------------------------------------------------------------------------- /source/img/alu/抽烟.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/抽烟.png -------------------------------------------------------------------------------- /source/img/alu/无奈.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/无奈.png -------------------------------------------------------------------------------- /source/img/alu/无所谓.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/无所谓.png -------------------------------------------------------------------------------- /source/img/alu/无语.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/无语.png -------------------------------------------------------------------------------- /source/img/alu/暗地观察.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/暗地观察.png -------------------------------------------------------------------------------- /source/img/alu/期待.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/期待.png -------------------------------------------------------------------------------- /source/img/alu/欢呼.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/欢呼.png -------------------------------------------------------------------------------- /source/img/alu/深思.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/深思.png -------------------------------------------------------------------------------- /source/img/alu/狂汗.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/狂汗.png -------------------------------------------------------------------------------- /source/img/alu/献花.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/献花.png -------------------------------------------------------------------------------- /source/img/alu/献黄瓜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/献黄瓜.png -------------------------------------------------------------------------------- /source/img/alu/皱眉.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/皱眉.png -------------------------------------------------------------------------------- /source/img/alu/看不见.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/看不见.png -------------------------------------------------------------------------------- /source/img/alu/看热闹.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/看热闹.png -------------------------------------------------------------------------------- /source/img/alu/瞅你.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/瞅你.png -------------------------------------------------------------------------------- /source/img/alu/肿包.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/肿包.png -------------------------------------------------------------------------------- /source/img/alu/脸红.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/脸红.png -------------------------------------------------------------------------------- /source/img/alu/蜡烛.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/蜡烛.png -------------------------------------------------------------------------------- /source/img/alu/装大款.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/装大款.png -------------------------------------------------------------------------------- /source/img/alu/观察.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/观察.png -------------------------------------------------------------------------------- /source/img/alu/赞一个.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/赞一个.png -------------------------------------------------------------------------------- /source/img/alu/邪恶.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/邪恶.png -------------------------------------------------------------------------------- /source/img/alu/锁眉.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/锁眉.png -------------------------------------------------------------------------------- /source/img/alu/长草.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/长草.png -------------------------------------------------------------------------------- /source/img/alu/阴暗.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/阴暗.png -------------------------------------------------------------------------------- /source/img/alu/高兴.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/高兴.png -------------------------------------------------------------------------------- /source/img/alu/黑线.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/黑线.png -------------------------------------------------------------------------------- /source/img/alu/鼓掌.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/alu/鼓掌.png -------------------------------------------------------------------------------- /source/img/wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/wechat.png -------------------------------------------------------------------------------- /source/img/smiles/cry.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/cry.gif -------------------------------------------------------------------------------- /source/img/smiles/eek.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/eek.gif -------------------------------------------------------------------------------- /source/img/smiles/lol.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/lol.gif -------------------------------------------------------------------------------- /source/img/smiles/mad.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/mad.gif -------------------------------------------------------------------------------- /source/img/smiles/sad.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/sad.gif -------------------------------------------------------------------------------- /source/img/smiles/arrow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/arrow.gif -------------------------------------------------------------------------------- /source/img/smiles/cool.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/cool.gif -------------------------------------------------------------------------------- /source/img/smiles/evil.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/evil.gif -------------------------------------------------------------------------------- /source/img/smiles/idea.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/idea.gif -------------------------------------------------------------------------------- /source/img/smiles/razz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/razz.gif -------------------------------------------------------------------------------- /source/img/smiles/smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/smile.gif -------------------------------------------------------------------------------- /source/img/smiles/wink.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/wink.gif -------------------------------------------------------------------------------- /source/img/smiles/biggrin.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/biggrin.gif -------------------------------------------------------------------------------- /source/img/smiles/confused.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/confused.gif -------------------------------------------------------------------------------- /source/img/smiles/exclaim.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/exclaim.gif -------------------------------------------------------------------------------- /source/img/smiles/mrgreen.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/mrgreen.gif -------------------------------------------------------------------------------- /source/img/smiles/neutral.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/neutral.gif -------------------------------------------------------------------------------- /source/img/smiles/question.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/question.gif -------------------------------------------------------------------------------- /source/img/smiles/redface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/redface.gif -------------------------------------------------------------------------------- /source/img/smiles/rolleyes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/rolleyes.gif -------------------------------------------------------------------------------- /source/img/smiles/twisted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/twisted.gif -------------------------------------------------------------------------------- /source/img/smiles/surprised.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ochukai/hexo-theme-ochuunn/HEAD/source/img/smiles/surprised.gif -------------------------------------------------------------------------------- /layout/views/nav.pug: -------------------------------------------------------------------------------- 1 | nav.head-nav.u-fr 2 | ul.head-nav__list 3 | each val, index in theme.menu 4 | li.head-nav__item: a.head-nav__link(href = url_for(val)) 5 | = index -------------------------------------------------------------------------------- /source/css/base/_mixin.styl: -------------------------------------------------------------------------------- 1 | // font-size-rem(size) 2 | // font-size: ( size ) px 3 | // font-size: ( size / 10 ) rem 4 | 5 | font-size-rem(size) 6 | font-size: ( size ) px 7 | font-size: ( size / 16 ) rem -------------------------------------------------------------------------------- /layout/tag.pug: -------------------------------------------------------------------------------- 1 | extends views/main.pug 2 | 3 | block head 4 | title 5 | = page.tag + ' - ' + config.title 6 | 7 | block main 8 | include mixins/post.pug 9 | -page.posts.each(function(post) { 10 | +post(post, 'archive') 11 | -}) 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hexo-theme-ochuunn", 3 | "version": "1.1.0", 4 | "main": "_config.yml", 5 | "repository": "https://github.com/ochukai/hexo-theme-ochuunn.git", 6 | "author": "ochukai ", 7 | "license": "MIT" 8 | } 9 | -------------------------------------------------------------------------------- /layout/plugins/reward.pug: -------------------------------------------------------------------------------- 1 | if theme.reward_images 2 | section.reward 3 | a(class="btn-reward" href="#") 打赏 4 | div.reward-wrapper.clearfix 5 | -theme.reward_images.forEach(function(img) { 6 | img(src = url_for(img.url), title = img.type || '') 7 | -}) 8 | -------------------------------------------------------------------------------- /layout/mixins/tags.pug: -------------------------------------------------------------------------------- 1 | mixin tags(title, count) 2 | .tag-cloud 3 | .tag-cloud__title.post__title 4 | = title 5 | span.tag-cloud__amount 6 | = count 7 | .tag-cloud-tags!= tagcloud({min_font: 14, max_font: 60, amount: count, color: true, start_color: '#c45e91', end_color: '#642545'}) -------------------------------------------------------------------------------- /layout/mixins/gallery.pug: -------------------------------------------------------------------------------- 1 | mixin gallery(post, index) 2 | if post.photos && post.photos.length 3 | div.gallery#gallery 4 | each item, index in post.photos 5 | - var className = index === 0 ? '' : 'u-hidden' 6 | a(href = item, data-fancybox="gallery", group='oli-image-gallery' class = className): img(src = url_for(item), alt='featured-image') 7 | -------------------------------------------------------------------------------- /source/css/base/_util.styl: -------------------------------------------------------------------------------- 1 | .u-cf 2 | &:before 3 | &:after 4 | content:'' 5 | display:table 6 | &:after 7 | clear:both 8 | 9 | .u-bfc 10 | overflow: hidden 11 | 12 | .u-fl 13 | float: left 14 | 15 | .u-fr 16 | float: right 17 | 18 | .u-hidden 19 | display: none !important 20 | visibility: hidden 21 | 22 | .modal-active 23 | overflow: hidden 24 | -------------------------------------------------------------------------------- /layout/views/index.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | html.index(lang="zh-CN") 3 | head 4 | include head.pug 5 | body 6 | #particles-oli-wrapper.hide 7 | .index-wrapper 8 | header.head.index.hide 9 | h1.head-title.u-fl 10 | = config.title 11 | include nav.pug 12 | 13 | != js('js/particles.min.js') 14 | != js('js/particles.oli.js') 15 | 16 | include ../plugins/google.pug 17 | -------------------------------------------------------------------------------- /layout/plugins/google.pug: -------------------------------------------------------------------------------- 1 | if theme.google_analytics && !env.debug 2 | script. 3 | (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;e=o.createElement(i);r=o.getElementsByTagName(i)[0];e.src='//www.google-analytics.com/analytics.js';r.parentNode.insertBefore(e,r)}(window,document,'script','ga')); 4 | ga('create','#{theme.google_analytics}'); 5 | ga('send','pageview'); 6 | -------------------------------------------------------------------------------- /layout/archive.pug: -------------------------------------------------------------------------------- 1 | extends views/main.pug 2 | 3 | block head 4 | title 5 | = config.title 6 | 7 | block main 8 | include mixins/post.pug 9 | -var time 10 | -site.posts.sort('date', 'desc').each(function(post) { 11 | -var year = post.date.year() 12 | -if (time != year) { 13 | -if (time) { 14 | h2.archive-title 15 | = year 16 | -} 17 | -time = year 18 | -} 19 | +post(post, 'archive') 20 | -}) 21 | -------------------------------------------------------------------------------- /layout/plugins/livere.pug: -------------------------------------------------------------------------------- 1 | if theme.livere.uid 2 | div.comments#lv-container(data-id = theme.livere.id, data-uid = theme.livere.uid) 3 | script. 4 | (function(d, s) { 5 | var j, e = d.getElementsByTagName(s)[0]; 6 | if (typeof LivereTower === 'function') return; 7 | j = d.createElement(s); 8 | j.src = 'https://cdn-city.livere.com/js/embed.dist.js'; 9 | j.async = true; 10 | e.parentNode.insertBefore(j, e); 11 | })(document, 'script'); 12 | 13 | -------------------------------------------------------------------------------- /layout/plugins/mathjax.pug: -------------------------------------------------------------------------------- 1 | script(type="text/x-mathjax-config"). 2 | MathJax.Hub.Config({ 3 | tex2jax: { 4 | inlineMath: [ ['$','$'], ["\\(","\\)"] ], 5 | processEscapes: true, 6 | skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'] 7 | } 8 | }); 9 | MathJax.Hub.Queue(function() { 10 | var all = MathJax.Hub.getAllJax(), i; 11 | for(i=0; i < all.length; i += 1) { 12 | all[i].SourceElement().parentNode.className += ' has-jax'; 13 | } 14 | }); 15 | 16 | script(src = theme.mathjax_cdn) 17 | -------------------------------------------------------------------------------- /layout/post.pug: -------------------------------------------------------------------------------- 1 | extends views/main.pug 2 | 3 | block head 4 | title 5 | = page.title + ' - ' + config.title 6 | 7 | block main 8 | if page.type === 'tags' 9 | include mixins/tags.pug 10 | +tags('TAGS', site.tags.length) 11 | else 12 | include mixins/post.pug 13 | +post(page, 'post') 14 | 15 | //- 16 | include plugins/reward.pug 17 | 18 | //- comment 19 | if theme.comment_plugin == 'valine' 20 | include plugins/valine.pug 21 | else 22 | include plugins/livere.pug 23 | 24 | //- mathjax 25 | if page.mathjax 26 | include plugins/mathjax.pug 27 | -------------------------------------------------------------------------------- /source/css/base/_font.styl: -------------------------------------------------------------------------------- 1 | @font-face 2 | font-family: 'icon' 3 | src: url("../fonts/icon.eot?-3uy3dk") 4 | src: url("../fonts/icon.eot?#iefix-3uy3dk") format('embedded-opentype'),url("../fonts/icon.woff?-3uy3dk") format('woff'),url("../fonts/icon.ttf?-3uy3dk") format('truetype'),url("../fonts/icon.svg?-3uy3dk#icon") format('svg') 5 | font-weight: normal 6 | font-style: normal 7 | 8 | [class^="icon-"], 9 | [class*=" icon-"] 10 | font-family: 'icon' 11 | font-style: normal 12 | -webkit-font-smoothing: antialiased 13 | -moz-osx-font-smoothing: grayscale 14 | 15 | .icon-arrow-right:before 16 | content: "\e600" 17 | 18 | .icon-arrow-left:before 19 | content: "\e601" -------------------------------------------------------------------------------- /source/css/base/_reset.styl: -------------------------------------------------------------------------------- 1 | blockquote 2 | dl 3 | dd 4 | h1 5 | h2 6 | h3 7 | h4 8 | h5 9 | h6 10 | figure 11 | p 12 | pre 13 | margin: 0 14 | 15 | button 16 | padding: 0 17 | border: 0 18 | background: transparent 19 | 20 | fieldset 21 | margin: 0 22 | padding: 0 23 | border: 0 24 | 25 | iframe 26 | border: 0 27 | 28 | ol 29 | ul 30 | menu 31 | margin: 0 32 | padding: 0 33 | list-style: none 34 | 35 | img 36 | audio 37 | canvas 38 | video 39 | vertical-align: middle 40 | 41 | .clearfix:after, 42 | .clearfix:before { 43 | display: table; 44 | content: " " 45 | } 46 | 47 | .clearfix:after { 48 | clear: both 49 | } 50 | 51 | .hide { 52 | visibility: hidden; 53 | } -------------------------------------------------------------------------------- /source/css/base/_base.styl: -------------------------------------------------------------------------------- 1 | html 2 | background-color $html-bg-color 3 | // background-image: url(../img/bg-1.png) 4 | background-attachment: fixed 5 | background-repeat: no-repeat 6 | background-size: auto 7 | // background-position: 50% 0 8 | color: $base-font-color 9 | font-style: normal; 10 | text-rendering: optimizeLegibility; 11 | 12 | html.index 13 | background-color $content-bg-color 14 | 15 | // html 16 | // font-size: 62.5% 17 | 18 | body 19 | font-size-rem($base-font-size) 20 | line-height: $base-line-height 21 | font-family: $base-font-family 22 | padding: 80px 0 20px 23 | 24 | html.index body 25 | padding: 0 26 | 27 | code, kbd, pre, samp 28 | font-family: $base-code-font-family 29 | 30 | a 31 | color: $base-link-color 32 | text-decoration: none 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | *.bak.yml 40 | 41 | .DS_Store 42 | *.lock 43 | _config.yml 44 | -------------------------------------------------------------------------------- /layout/views/main.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | html(lang="zh-CN") 3 | head 4 | include head.pug 5 | 6 | body(style="opacity:0") 7 | header.head 8 | h1.head-title.u-fl: a(href = config.root) 9 | = config.title 10 | include nav.pug 11 | 12 | main.main 13 | block main 14 | 15 | footer.foot 16 | div.foot-copy 17 | if theme.start_year != date(new Date(), 'YYYY') 18 | != '© ' + theme.start_year + ' - ' + date(new Date(), 'YYYY') + ' ' + (config.author || config.title) 19 | else 20 | != '© ' + date(new Date(), 'YYYY') + ' ' + (config.author || config.title) 21 | 22 | //- icp 备案信息 23 | if theme.icp_link 24 | a(href=theme.icp_link, class="icp-a", target="view_window") 25 | != theme.icp_text 26 | 27 | include ../plugins/google.pug 28 | 29 | != js('js/scroller') 30 | != js('js/main') 31 | -------------------------------------------------------------------------------- /source/fonts/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /source/css/main.styl: -------------------------------------------------------------------------------- 1 | @import '_var' 2 | 3 | /* ========================================================================== 4 | Init 5 | ========================================================================== */ 6 | 7 | @import 'vendor/_normalize' 8 | 9 | /* ========================================================================== 10 | Base 11 | ========================================================================== */ 12 | @import 'base/_font' 13 | @import 'base/_mixin' 14 | @import 'base/_base' 15 | @import 'base/_reset' 16 | @import 'base/_util' 17 | @import 'vendor/_echo' 18 | @import 'vendor/_highlight' 19 | 20 | /* ========================================================================== 21 | Partial 22 | ========================================================================== */ 23 | 24 | @import 'partial/_main' 25 | @import 'partial/_post' 26 | 27 | /* ========================================================================== 28 | Responsive 29 | ========================================================================== */ 30 | 31 | @import '_main-r' -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Oliver Wang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /_config.default.yml: -------------------------------------------------------------------------------- 1 | # head 2 | menu: 3 | 标签: /tags 4 | 目录: /archives 5 | # sitemap: /sitemap.xml 6 | # other menus 7 | 8 | rss: /atom.xml 9 | favicon: /favicon.png 10 | 11 | date_format: "YYYY - MM - DD HH:mm:ss" 12 | 13 | google_verification: false # your token 14 | google_analytics: false # your id 15 | 16 | # post comment 17 | comment_plugin: false # valine or livere 18 | 19 | # mathjax 20 | mathjax: false # or true 21 | mathjax_cdn: //cdn.bootcss.com/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML 22 | 23 | # valine https://valine.js.org/ 24 | valine: 25 | appId: "" 26 | appKey: "" 27 | notify: false 28 | verify: false 29 | avatar: "retro" # ''/mp/identicon/monsterid/wavatar/robohash/retro/hide 30 | pageSize: 20 31 | lang: "zh-cn" 32 | placeholder: "balabala~" 33 | avatarForce: false 34 | visitor: true # 阅读量统计 35 | highlight: true 36 | 37 | # livere 38 | livere: 39 | id: "" 40 | uid: "" 41 | 42 | # copyright 43 | start_year: 2016 44 | icp_text: "" 45 | icp_link: "" 46 | 47 | # add your qr image 48 | reward_images: 49 | - type: "微信" 50 | url: "/img/wechat.png" 51 | # - type: '支付宝' 52 | # url: '/img/wechat.png' 53 | -------------------------------------------------------------------------------- /layout/views/head.pug: -------------------------------------------------------------------------------- 1 | meta(charset='utf-8') 2 | meta(http-equiv='X-UA-Compatible', content='IE=edge') 3 | meta(name='viewport', content='width=device-width, initial-scale=1') 4 | 5 | if theme.google_verification 6 | meta(name="google-site-verification", content = theme.google_verification) 7 | 8 | if config.author 9 | meta(name='author', content = config.author) 10 | 11 | if config.keywords 12 | meta(name='keywords', content = config.keywords) 13 | 14 | if config.description 15 | meta(name='description', content = config.description) 16 | 17 | if theme.rss 18 | link(rel='alternative', href = theme.rss, title = config.title, type='application/atom+xml') 19 | 20 | if theme.favicon 21 | link(rel="icon", href = theme.favicon) 22 | 23 | block head 24 | 25 | != css('css/main') 26 | != css('js/fancybox/jquery.fancybox.min.css') 27 | 28 | != js('js/jquery-3.1.1.min.js') 29 | != js('js/fancybox/jquery.fancybox.min.js') 30 | 31 | -------------------------------------------------------------------------------- /layout/mixins/post.pug: -------------------------------------------------------------------------------- 1 | mixin post(post, index) 2 | article.post 3 | if index === 'archive' 4 | header.post__head.archive 5 | a(href = url_for(post.path)) 6 | time.post__time(datetime = date_xml(post.date)) 7 | = date(post.date, theme.date_format) 8 | 9 | h1.post__title.archive: a(href = url_for(post.path)) 10 | = post.title 11 | 12 | if post.excerpt 13 | div.excerpt 14 | != post.excerpt 15 | else 16 | header.post__head 17 | include gallery.pug 18 | +gallery(post) 19 | 20 | time.post__time(datetime = date_xml(post.date)) 21 | = date(post.date, theme.date_format) 22 | 23 | h1.post__title: a(href = url_for(post.path)) 24 | = post.title 25 | 26 | if post.img 27 | a.post__image(href = url_for(post.path)): img(src = url_for(post.img), alt = 'featured-image') 28 | 29 | div.post__main.echo 30 | != post.content 31 | 32 | if post.tags && post.tags.length > 0 33 | footer.post__foot.u-cf 34 | ul.post__tag.u-fl 35 | -post.tags.forEach(function(tag) { 36 | li.post__tag__item: a.post__tag__link(href = url_for(tag.path)) 37 | = tag.name 38 | -}) 39 | -------------------------------------------------------------------------------- /layout/plugins/valine.pug: -------------------------------------------------------------------------------- 1 | if theme.valine.appId && theme.valine.appKey 2 | div.comments#v-container 3 | script(src="//cdn1.lncld.net/static/js/3.0.4/av-min.js") 4 | != js('js/Valine.min') 5 | script. 6 | new Valine({ 7 | av: AV, 8 | el: '#v-container', 9 | app_id: '#{theme.valine.appId}', 10 | app_key: '#{theme.valine.appKey}', 11 | avatar: '#{theme.valine.avatar}', 12 | avatarForce: #{theme.valine.avatarForce}, 13 | notify: false, 14 | verify: false, 15 | lang: '#{theme.valine.lang}', 16 | placeholder: '#{theme.valine.placeholder}', 17 | pageSize: #{theme.valine.pageSize}, 18 | visitor: #{theme.valine.visitor}, 19 | highlight: #{theme.valine.highlight}, 20 | emoticon_url: '/img/alu', 21 | emoticon_list: ["吐.png","喷血.png","狂汗.png","不说话.png","汗.png","坐等.png","献花.png","不高兴.png","中刀.png","害羞.png","皱眉.png","小眼睛.png","中指.png","尴尬.png","瞅你.png","想一想.png","中枪.png","得意.png","肿包.png","扇耳光.png","亲亲.png","惊喜.png","脸红.png","无所谓.png","便便.png","愤怒.png","蜡烛.png","献黄瓜.png","内伤.png","投降.png","观察.png","看不见.png","击掌.png","抠鼻.png","邪恶.png","看热闹.png","口水.png","抽烟.png","锁眉.png","装大款.png","吐舌.png","无奈.png","长草.png","赞一个.png","呲牙.png","无语.png","阴暗.png","不出所料.png","咽气.png","期待.png","高兴.png","吐血倒地.png","哭泣.png","欢呼.png","黑线.png","喜极而泣.png","喷水.png","深思.png","鼓掌.png","暗地观察.png"], 22 | }); 23 | 24 | -------------------------------------------------------------------------------- /source/css/_var.styl: -------------------------------------------------------------------------------- 1 | // Base 2 | $base-background = #f6z 3 | $base-font-size = 14px 4 | $base-font-size-r = 12px 5 | $base-font-color = #333 6 | $base-line-height = 1.5 7 | $base-font-family = 'Helvetica Neue', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'Microsoft Yahei', sans-serif 8 | $base-code-font-family = 'Source Code Pro', Consolas, 'Liberation Mono', Courier, monospace, serif 9 | $base-link-color = #258fb8 10 | $base-link-color-hover = #258fb8 11 | 12 | $border-color = #f0f0f0 13 | 14 | $background-color = #fcfcfc 15 | 16 | // General colors 17 | $highlight-foreground = #399c9c 18 | $highlight-background = #f8f8f8 19 | $highlight-comment = #b0bec5 20 | $highlight-title = #399c9c 21 | 22 | // Code Color 23 | // $highlight-background = #473D41 24 | // $highlight-current-line = #393939 25 | $highlight-selection = #c5c8c6 26 | // $highlight-foreground = #81a2be 27 | // $highlight-comment = #999999 28 | 29 | $highlight-func-keyword = #80cbc4 30 | // $highlight-red = #91ba61 31 | $highlight-orange = #ff5370 32 | $highlight-yellow = #ffcc66 33 | $highlight-green = #91ba61 34 | $highlight-aqua = #66cccc 35 | $highlight-blue = #6699cc 36 | $highlight-purple = #cc99cc 37 | 38 | $color-green = #399c9c 39 | $color-green-dark = #328989 40 | $color-green-hover = #40afaf 41 | $color-green-super-light = #4bbdbd 42 | 43 | $padding-left-right = 50px 44 | $margin-left-right = 50px 45 | 46 | $html-bg-color = #fff 47 | $content-bg-color = #fff 48 | 49 | // $global-padding: 60px 50 | -------------------------------------------------------------------------------- /source/css/vendor/_highlight.styl: -------------------------------------------------------------------------------- 1 | .highlight 2 | overflow: auto 3 | // background-color: $highlight-background 4 | background-color: #f4fbfb 5 | color: $color-green-dark 6 | border: 1px solid $border-color 7 | 8 | .gutter 9 | color: #666 10 | display: none 11 | 12 | .code 13 | padding: 1em 45px 14 | 15 | figcaption 16 | margin-bottom: 1em 17 | color: #999 18 | font-size: .85em 19 | a 20 | float: right 21 | 22 | .comment 23 | color: $highlight-comment 24 | 25 | .title 26 | color: $highlight-title 27 | 28 | .variable 29 | .attribute 30 | .tag 31 | .regexp 32 | .ruby .constant 33 | .xml .tag .title 34 | .xml .pi 35 | .xml .doctype 36 | .html .doctype 37 | .css .id 38 | .css .class 39 | .css .pseudo 40 | color: $highlight-green 41 | 42 | .number 43 | .preprocessor 44 | .built_in 45 | .literal 46 | .params 47 | .constant 48 | color: $highlight-orange 49 | 50 | .class 51 | .ruby .class .title 52 | .css .rules .attribute 53 | color: $highlight-green 54 | 55 | .string 56 | .value 57 | .inheritance 58 | .header 59 | .ruby .symbol 60 | .xml .cdata 61 | color: $highlight-green 62 | 63 | .css .hexcolor 64 | color: $highlight-aqua 65 | 66 | .function 67 | .python .decorator 68 | .python .title 69 | .ruby .function .title 70 | .ruby .title .keyword 71 | .perl .sub 72 | .javascript .title 73 | .coffeescript .title 74 | color: $highlight-func-keyword 75 | 76 | .keyword 77 | .javascript .function 78 | color: $highlight-purple 79 | 80 | .marked 81 | background-color: #ffecec 82 | -------------------------------------------------------------------------------- /source/css/_main-r.styl: -------------------------------------------------------------------------------- 1 | @media (max-width: 1023px) 2 | html 3 | background: #fff 4 | .head 5 | margin-top: 80px; 6 | body 7 | padding-top: 0 8 | 9 | @media (max-width: 767px) 10 | body 11 | margin: 10px 12 | margin-bottom: 20px 13 | margin-top: 0px 14 | padding: 0 15 | font-size: font-size-rem($base-font-size-r) 16 | 17 | .head 18 | .main 19 | .foot 20 | width: 100% 21 | 22 | .head 23 | .foot 24 | padding: 20px 25 | height: auto 26 | line-height: inherit 27 | 28 | .head-title 29 | .head-nav 30 | .foot-copy 31 | .page-menu 32 | float: none 33 | 34 | .main 35 | margin-top: 20px 36 | margin-bottom: 20px 37 | 38 | .head 39 | margin-top: 20px 40 | text-align: center 41 | 42 | .head-nav 43 | margin-top: 10px 44 | 45 | .head-nav__item 46 | margin: 0 5px 47 | margin-left: 0 48 | 49 | .post 50 | margin-top: 20px 51 | 52 | .post__head.archive 53 | .post__head 54 | margin: 20px 5px 55 | 56 | .post__main 57 | margin: 20px 5px 58 | 59 | .post__title 60 | .post__time 61 | margin: 5px 62 | 63 | .post__title 64 | font-size-rem(22.4) 65 | 66 | .post__main 67 | blockquote 68 | .highlight 69 | margin: 30px -20px; 70 | padding: 20px; 71 | 72 | .post__foot 73 | position: relative 74 | padding: 10px 75 | 76 | 77 | .post__tag 78 | // display: none 79 | .post__more 80 | box-sizing: border-box; 81 | width: 100%; 82 | text-align: center; 83 | .post__image 84 | margin: 20px -20px 85 | img 86 | margin 0 auto 87 | .foot 88 | margin-bottom: 0 89 | text-align: center 90 | .page-menu 91 | margin-top: 10px 92 | .foot bdi 93 | display: none 94 | .archive-title 95 | margin: 20px 96 | 97 | .highlight .code 98 | padding: 0 99 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ochuunn 2 |

3 | 4 |

5 | 6 | ## 版本改动 7 | 8 | ### 1.1.0 9 | 10 | 感谢 [zhufengning](https://github.com/zhufengning) 的 [pr #37](https://github.com/ochukai/hexo-theme-ochuunn/pull/37/commits/a62ab67c0fcc81f1957d00457ebf901dcdf4d489), 添加了一个 tags 云~ 好看~ (原谅我稍微改了一下 😅) 11 | 12 | ### 1.0.4 13 | 14 | * 支持 MathJax 15 | * 页头加入 mathjax: true 便可以使用 MathJax 公式了~~~ 16 | * 哦哦哦,还需要在 *_config.yml* 中,把 mathjax 设置为 true 17 | 18 | ### 1.0.3 19 | 20 | * 滚动条颜色变浅 21 | * 代码高亮颜色变深 22 | * body 颜色深 23 | * 这个版本的文章更适合阅读~ 24 | 25 | ### 1.0.2 26 | 27 | * 评论时不会触发页面滚动了 28 | * valine fork from [https://deserts.io/diy-a-comment-system/](https://deserts.io/diy-a-comment-system/), 文档看他的,但是他不支持头像随机,我改了,repo 在这里 [ochukai/valine](https://github.com/ochukai/Valine) 29 | 30 | ## 特点 31 | * 文章界面很清晰,很适合阅读~ 32 | * Google Search Console 33 | * Google Analytics 34 | * [LiveRe](https://livere.com/) (我去掉了disqus, 国内不翻墙压根连不上) 35 | * [Valine](https://valine.js.org/) (速度无敌,需要自己开一个 leancloud app,很简单,看文档吧,感谢 @[rubychat](https://github.com/rubychat)) 36 | * 打赏 37 | * 🎈 页面滚动快捷键 (j, k, t, b, n, m 具体功能自己尝试, console 有提示~) 38 | 39 | ## Demo 40 | [I am Oliver](https://ochukai.github.io/) 41 | ochukai.me 最近解析到 git-pages 总是有问题~ 先不用了~ 42 | 43 | # ⚠ 这里很重要 💢💥💖 44 | 45 | ```sh 46 | npm install hexo-renderer-pug --save 47 | ``` 48 | 49 | # ⚠ 关于tags(标签)页面 50 | 51 | 需要手动在hexo的根目录下创建`tags`页: 52 | ```sh 53 | hexo new page "tags" 54 | ``` 55 | 然后在`index.md`中加上`type: "tags"` 56 | 57 | ## Install 58 | 59 | 1. In the `root` directory: 60 | 61 | ```git 62 | $ git clone https://github.com/ochukai/hexo-theme-ochuunn.git themes/ochuunn 63 | ``` 64 | 65 | 2. Change file `_config.default.yml` to `_config.yml`; 66 | 67 | 3. Change the `theme` property in the `config.yml` file. 68 | 69 | ```yml 70 | # theme: landscape 71 | theme: ochuunn 72 | ``` 73 | 74 | ## 不足 75 | 76 | * 不支持 link 类型的文章 77 | * 不支持 category,只有 tag 78 | 79 | (在目录的最下面, 是 hexo 的测试文章,按 b 键直达~) 80 | 81 | -------------------------------------------------------------------------------- /source/css/vendor/_echo.styl: -------------------------------------------------------------------------------- 1 | /*36/30/24/18/14*/ 2 | .echo 3 | font-size-rem(14) 4 | line-height: 1.5 5 | 6 | a 7 | color: $base-link-color 8 | 9 | &:hover, 10 | &:focus, 11 | &:active 12 | text-decoration: underline 13 | 14 | h1 15 | h2 16 | h3 17 | h4 18 | h5 19 | h6 20 | font-weight: normal 21 | line-height: 1.5 22 | margin: 1.6em 0 23 | 24 | h1 25 | font-size-rem(30) 26 | 27 | h2 28 | font-size-rem(24) 29 | 30 | h3 31 | font-size-rem(18) 32 | 33 | h4 34 | h5 35 | h6 36 | font-size-rem(14) 37 | 38 | p 39 | margin: 1em 0 40 | font-size-rem(16) 41 | text-align: justify 42 | line-height: 1.8 43 | 44 | address 45 | blockquote 46 | dl 47 | figure 48 | form 49 | hr 50 | img 51 | ol 52 | pre 53 | table 54 | ul 55 | margin: 1.6em 0 56 | 57 | hr 58 | margin: 1.6em auto 59 | width: 61% 60 | height: 4px 61 | border: none 62 | background: #eee 63 | 64 | img 65 | max-width: 100% 66 | height: auto 67 | 68 | caption 69 | text-transform: uppercase 70 | padding: 1em 71 | color: #777 72 | 73 | thead 74 | background-color: #eee 75 | 76 | td 77 | th 78 | border: 1px solid #cbcbcb 79 | padding: .5em 1em 80 | text-align: left 81 | font-weight: normal 82 | 83 | tfoot 84 | background-color: #f4f4f4 85 | 86 | dl 87 | ol 88 | ul 89 | margin-left: 2em 90 | 91 | dd 92 | margin-left: 1em 93 | 94 | ol 95 | list-style: decimal outside 96 | 97 | ul 98 | list-style: disc outside 99 | 100 | figcaption 101 | font-size: .85em 102 | 103 | blockquote small, 104 | cite 105 | color: #777 106 | 107 | abbr 108 | cursor: help 109 | 110 | address 111 | font-style: normal 112 | 113 | code 114 | // > 115 | // 排版无需空格, 使用半角空格宽度防止粘连 1em / 2 / 2 116 | // margin: 0 .25em 117 | // >[], 118 | // 排版须有空格, 1em 防止标点符号粘连 119 | display: inline-block; 120 | margin: 0 .1em 121 | white-space: nowrap 122 | font-size: 0.85em 123 | font-family: consolas, "微软雅黑" 124 | border-radius: 4px 125 | background-color: rgba(27,31,35,.05) 126 | padding: 3px 6px 127 | 128 | kbd 129 | @extend .echo code 130 | box-shadow: 0 1px 0px #CCCCCC, 0 0 0 2px #FFFFFF inset 131 | 132 | blockquote 133 | margin: 1.6em -50px 134 | padding: 10px 45px 135 | border-left: 8px solid $color-green 136 | border-right: 0 137 | border-top: 1px solid $border-color; 138 | border-bottom: 1px solid $border-color; 139 | background-color: #e1f4f4; 140 | 141 | &.right 142 | border-left: 0 143 | border-right: 8px solid $color-green 144 | -------------------------------------------------------------------------------- /source/css/partial/_main.styl: -------------------------------------------------------------------------------- 1 | .index-wrapper 2 | display: -webkit-box 3 | display: -webkit-flex 4 | display: flex 5 | width: 100% 6 | height: 100vh 7 | 8 | -webkit-box-pack: center 9 | -webkit-justify-content: center 10 | justify-content: center 11 | 12 | -webkit-box-align: center 13 | -webkit-align-items: center 14 | align-items: center 15 | 16 | header 17 | z-index: 10 18 | 19 | #particles-oli-wrapper 20 | position: fixed 21 | top: 0 22 | bottom: 0 23 | left: 0 24 | right: 0 25 | width: 100% 26 | // z-index: -1 27 | 28 | .head 29 | .main 30 | .foot 31 | margin: 0 auto 32 | width: 768px 33 | 34 | .head 35 | .foot 36 | padding: 0 50px 37 | height: 120px 38 | background-color: #399c9c 39 | line-height: (@height) 40 | box-sizing: border-box 41 | 42 | .head-title 43 | font-size-rem(30) 44 | font-weight: normal 45 | color: #FFFFFF 46 | 47 | > a 48 | color: #FFFFFF 49 | 50 | .head-nav__item 51 | display: inline-block 52 | margin-left: 20px 53 | 54 | .head-nav__link 55 | color: #fff 56 | 57 | &:hover 58 | color: #f0f0f0 59 | text-decoration: underline 60 | 61 | .main 62 | margin-top: 30px 63 | margin-bottom: 30px 64 | 65 | .archive-title 66 | margin: 1.6em 67 | text-align: center 68 | // 1.6 * 16 69 | font-size-rem(25.6) 70 | font-weight: normal 71 | 72 | .comments 73 | margin: 30px 0 74 | padding: 50px 75 | background-color: #FFFFFF 76 | border: 1px solid $border-color 77 | 78 | .foot 79 | margin-bottom: 30px 80 | 81 | .foot-copy 82 | text-align: center 83 | color: #fff 84 | font-size-rem(12) 85 | 86 | .page-menu__item 87 | display: inline-block 88 | 89 | .page-menu__link 90 | color: #FFFFFF 91 | font-size-rem(30) 92 | 93 | .page-menu__link--disabled 94 | color: #f0f0f0 95 | 96 | ::-webkit-scrollbar { 97 | width: 5px; 98 | height: 5px; 99 | background-color: #f5f5f5; 100 | } 101 | 102 | /* 定义滚动条轨道的内阴影+圆角 */ 103 | ::-webkit-scrollbar-track { 104 | -webkit-box-shadow: inset 0 0 8px rgba(0, 0, 0, .3); 105 | background-color: #f5f5f5; 106 | } 107 | 108 | /* 定义滑块的内阴影+圆角 */ 109 | ::-webkit-scrollbar-thumb { 110 | -webkit-box-shadow: inset 0 0 8px rgba(0, 0, 0, .3); 111 | background-color: $color-green-super-light; 112 | } 113 | 114 | .right p 115 | text-align: right 116 | 117 | .reward, 118 | .comments, 119 | .post, 120 | .tag-cloud 121 | transition: all .3s 122 | 123 | &:hover 124 | box-shadow: rgba(0, 0, 0, 0.12) 0px 1px 6px, rgba(0, 0, 0, 0.12) 0px 1px 4px; 125 | border-color: transparent 126 | 127 | .tag-cloud 128 | border: 1px solid #f0f0f0; 129 | padding: 20px; 130 | 131 | .tag-cloud__title 132 | font-size: font-size-rem(30) 133 | margin-bottom: 30px; 134 | 135 | .tag-cloud__amount 136 | margin-left: 8px; 137 | 138 | .icp-a 139 | color: #fff 140 | display: inline-block 141 | margin: 0 10px 142 | -------------------------------------------------------------------------------- /source/css/vendor/_normalize.styl: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.1 | MIT License | git.io/normalize */ 2 | 3 | html 4 | font-family: sans-serif 5 | -ms-text-size-adjust: 100% 6 | -webkit-text-size-adjust: 100% 7 | 8 | body 9 | margin: 0 10 | 11 | article 12 | aside 13 | details 14 | figcaption 15 | figure 16 | footer 17 | header 18 | hgroup 19 | main 20 | nav 21 | section 22 | summary 23 | display: block 24 | 25 | audio 26 | canvas 27 | progress 28 | video 29 | display: inline-block 30 | vertical-align: baseline 31 | 32 | audio:not([controls]) 33 | display: none 34 | height: 0 35 | 36 | [hidden] 37 | template 38 | display: none 39 | 40 | a 41 | background: transparent 42 | 43 | a:active 44 | a:hover 45 | outline: 0 46 | 47 | abbr[title] 48 | border-bottom: 1px dotted 49 | 50 | b 51 | strong 52 | font-weight: bold 53 | 54 | dfn 55 | font-style: italic 56 | 57 | h1 58 | font-size: 2em 59 | margin: .67em 0 60 | 61 | mark 62 | background: #ff0 63 | color: #000 64 | 65 | small 66 | font-size: 80% 67 | 68 | sub 69 | sup 70 | font-size: 75% 71 | line-height: 0 72 | position: relative 73 | vertical-align: baseline 74 | 75 | sup 76 | top: -0.5em 77 | 78 | sub 79 | bottom: -0.25em 80 | 81 | img 82 | border: 0 83 | 84 | svg:not(:root) 85 | overflow: hidden 86 | 87 | figure 88 | margin: 1em 40px 89 | 90 | hr 91 | -moz-box-sizing: content-box 92 | box-sizing: content-box 93 | height: 0 94 | 95 | pre 96 | overflow: auto 97 | 98 | code 99 | kbd 100 | pre 101 | samp 102 | font-family: monospace,monospace 103 | font-size: 1em 104 | 105 | button 106 | input 107 | optgroup 108 | select 109 | textarea 110 | color: inherit 111 | font: inherit 112 | margin: 0 113 | 114 | button 115 | overflow: visible 116 | 117 | button 118 | select 119 | text-transform: none 120 | 121 | button 122 | html input[type="button"] 123 | input[type="reset"] 124 | input[type="submit"] 125 | -webkit-appearance: button 126 | cursor: pointer 127 | 128 | button[disabled] 129 | html input[disabled] 130 | cursor: default 131 | 132 | button::-moz-focus-inner 133 | input::-moz-focus-inner 134 | border: 0 135 | padding: 0 136 | 137 | input 138 | line-height: normal 139 | 140 | input[type="checkbox"] 141 | input[type="radio"] 142 | box-sizing: border-box 143 | padding: 0 144 | 145 | input[type="number"]::-webkit-inner-spin-button 146 | input[type="number"]::-webkit-outer-spin-button 147 | height: auto 148 | 149 | input[type="search"] 150 | -webkit-appearance: textfield 151 | -moz-box-sizing: content-box 152 | -webkit-box-sizing: content-box 153 | box-sizing: content-box 154 | 155 | input[type="search"]::-webkit-search-cancel-button 156 | input[type="search"]::-webkit-search-decoration 157 | -webkit-appearance: none 158 | 159 | fieldset 160 | border: 1px solid silver 161 | margin: 0 2px 162 | padding: .35em .625em .75em 163 | 164 | legend 165 | border: 0 166 | padding: 0 167 | 168 | textarea 169 | overflow: auto 170 | 171 | optgroup 172 | font-weight: bold 173 | 174 | table 175 | border-collapse: collapse 176 | border-spacing: 0 177 | 178 | td 179 | th 180 | padding: 0 -------------------------------------------------------------------------------- /source/js/main.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | $('.post__main img').on('click', function () { 4 | var $img = $(this); 5 | 6 | $.fancybox.open([{ 7 | src: $img.attr('src'), 8 | type: 'image' 9 | }]); 10 | }); 11 | 12 | $('[data-fancybox]').fancybox({ 13 | // closeClickOutside: false, 14 | image: { 15 | protect: true 16 | } 17 | }); 18 | 19 | // key bind 20 | 21 | // j down 22 | // k top 23 | // t page top 24 | // b page bottom 25 | 26 | // i go index 27 | var $body = $('html'); 28 | var unTriggerEles = [ 29 | '.veditor', 30 | '.vnick', 31 | '.vmail', 32 | '.vlink', 33 | ]; 34 | 35 | var isKeydown = false; 36 | $body.on('keydown', function (e) { 37 | // console.log(e.which, 'key down', e.target); 38 | 39 | // 有些 input 或者 textarea 不应该触发这些快捷键 40 | var $tar = $(e.target); 41 | var needTrigger = true; 42 | for (var i = 0; i < unTriggerEles.length; i++) { 43 | if ($tar.is(unTriggerEles[i])) { 44 | needTrigger = false; 45 | break; 46 | } 47 | } 48 | 49 | if (!needTrigger) { 50 | return; 51 | } 52 | 53 | switch (e.which) { 54 | case 74: // j down 55 | if (!isKeydown) { 56 | isKeydown = true; 57 | requestAnimationFrame(function animate() { 58 | var curTop = window.scrollY; 59 | window.scrollTo(0, curTop + 15); 60 | 61 | if (isKeydown) { 62 | requestAnimationFrame(animate); 63 | } 64 | }); 65 | } 66 | 67 | break; 68 | 69 | case 75: // k up 70 | if (!isKeydown) { 71 | isKeydown = true; 72 | requestAnimationFrame(function animate() { 73 | var curTop = window.scrollY; 74 | window.scrollTo(0, curTop - 15); 75 | 76 | if (isKeydown) { 77 | requestAnimationFrame(animate); 78 | } 79 | }); 80 | } 81 | 82 | break; 83 | 84 | case 191: // shift + / = ? show help modal 85 | break; 86 | 87 | // 16 shift 88 | case 84: // t 89 | window.scrollToTop(1); 90 | break; 91 | 92 | case 66: // b 93 | window.scrollToBottom(); 94 | break; 95 | 96 | case 78: // n half 97 | window.scrollPageDown(1); 98 | break; 99 | 100 | case 77: // m 101 | window.scrollPageUp(1); 102 | break; 103 | } 104 | 105 | }); 106 | 107 | $body.on('keyup', function (e) { 108 | isKeydown = false; 109 | }); 110 | 111 | // print hint 112 | 113 | var comments = [ 114 | '', 115 | ' .::::. 快捷键:', 116 | ' .::::::::. j:下移', 117 | ' ::::::::::: k:上移', 118 | " ..:::::::::::' t:移到最顶", 119 | " '::::::::::::' b:移到最底", 120 | ' .:::::::::: n:下移很多', 121 | " '::::::::::::::.. m:上移很多", 122 | ' ..::::::::::::.', 123 | ' ``::::::::::::::::', 124 | " ::::``:::::::::' .:::.", 125 | " ::::' ':::::' .::::::::.", 126 | " .::::' :::: .:::::::'::::.", 127 | " .:::' ::::: .::::::::' ':::::.", 128 | " .::' :::::::::::::::' ':::::.", 129 | " .::' :::::::::::::::' ':::.", 130 | " ...::: :::::::::::::' ``::.", 131 | " ```` ':. '::::::::::' ::::..", 132 | " ':::::' ':'````..", 133 | '' 134 | ]; 135 | 136 | comments.forEach(function (item) { 137 | console.log('%c' + item, 'color: #399c9c'); 138 | }); 139 | 140 | $('.btn-reward').on('click', function (e) { 141 | e.preventDefault(); 142 | 143 | var $reward = $('.reward-wrapper'); 144 | $reward.slideToggle(); 145 | }); 146 | 147 | $('body').addClass('queue-in'); 148 | setTimeout(function() { 149 | $('body').css({ opacity: 1}).removeClass('queue-in'); 150 | }, 500); 151 | 152 | }); 153 | -------------------------------------------------------------------------------- /source/js/particles.oli.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | particlesJS("particles-oli-wrapper", { 4 | "particles": { 5 | "number": { 6 | "value": 40, 7 | "density": { 8 | "enable": true, 9 | "value_area": 800 10 | } 11 | }, 12 | "color": { 13 | "value": "#399c9c" 14 | }, 15 | "shape": { 16 | "type": "circle", 17 | "stroke": { 18 | "width": 0, 19 | "color": "#000000" 20 | }, 21 | "polygon": { 22 | "nb_sides": 5 23 | }, 24 | // "image": { 25 | // "src": "img/github.svg", 26 | // "width": 100, 27 | // "height": 100 28 | // } 29 | }, 30 | "opacity": { 31 | "value": 0.3, 32 | "random": false, 33 | "anim": { 34 | "enable": false, 35 | "speed": 1, 36 | "opacity_min": 0.1, 37 | "sync": false 38 | } 39 | }, 40 | "size": { 41 | "value": 20, 42 | "random": true, 43 | "anim": { 44 | "enable": false, 45 | "speed": 30, 46 | "size_min": 0.1, 47 | "sync": false 48 | } 49 | }, 50 | "line_linked": { 51 | "enable": true, 52 | "distance": 250, 53 | "color": "#40afaf", 54 | "opacity": 0.2, 55 | "width": 1 56 | }, 57 | "move": { 58 | "enable": true, 59 | "speed": 3, 60 | "direction": "none", 61 | "random": true, 62 | "straight": false, 63 | "out_mode": "out", 64 | "bounce": true, 65 | "attract": { 66 | "enable": false, 67 | "rotateX": 600, 68 | "rotateY": 1200 69 | } 70 | } 71 | }, 72 | "interactivity": { 73 | "detect_on": "canvas", 74 | "events": { 75 | "onhover": { 76 | "enable": true, 77 | "mode": "grab" 78 | }, 79 | "onclick": { 80 | "enable": true, 81 | "mode": "push" 82 | }, 83 | "resize": true 84 | }, 85 | "modes": { 86 | "grab": { 87 | "distance": 100, 88 | "line_linked": { 89 | "opacity": 0.5 90 | } 91 | }, 92 | 93 | } 94 | }, 95 | "retina_detect": true 96 | }); 97 | 98 | var $particle = $('#particles-oli-wrapper').css({ display: 'none' }).removeClass('hide'); 99 | var $navH1 = $('.index-wrapper header h1, .index-wrapper header nav').hide(); 100 | 101 | var $header = $('.index-wrapper .hide') 102 | .removeClass('hide') 103 | .css({ 104 | height: 0 105 | }) 106 | .animate({ 107 | height: 120 108 | }, 800, function() { 109 | $particle.fadeIn(600); 110 | $navH1.fadeIn(600); 111 | }); 112 | 113 | $('.head-nav__link').on('click', function(e) { 114 | e.preventDefault(); 115 | var $this = $(this); 116 | 117 | $particle.fadeOut(600); 118 | $navH1.fadeOut(100); 119 | 120 | $header.animate({ 121 | height: 0 122 | }, 800, function() { 123 | window.location.href = $this.attr('href'); 124 | }); 125 | }); 126 | 127 | }); 128 | -------------------------------------------------------------------------------- /source/css/partial/_post.styl: -------------------------------------------------------------------------------- 1 | .excerpt 2 | margin-top: 20px 3 | 4 | .reward 5 | border: 1px solid $border-color 6 | padding: 20px 7 | text-align: center 8 | margin-top: 20px 9 | background-color: #fff 10 | 11 | .btn-reward 12 | padding: 10px 20px 13 | background-color: #399c9c 14 | color: $content-bg-color 15 | display: inline-block 16 | transition: all .3s 17 | 18 | &:hover 19 | background-color: $color-green-hover 20 | 21 | .reward-wrapper 22 | margin-top: 20px 23 | display: none 24 | 25 | img 26 | width: 200px 27 | height: 200px 28 | border: 1px solid $border-color 29 | margin: 0 10px 30 | 31 | .post 32 | overflow: hidden 33 | margin-top: 30px 34 | border: 1px solid $border-color 35 | background-color: $content-bg-color 36 | 37 | .post__head 38 | margin: $margin-left-right 39 | 40 | &.archive 41 | margin: 30px $margin-left-right 42 | 43 | .post__time 44 | color: #CCCCCC 45 | font-size-rem(12) 46 | 47 | .post__title 48 | margin-top: 5px 49 | line-height: 1.5 50 | font-size-rem(24) 51 | font-weight: normal 52 | 53 | > a 54 | color: #666 55 | transition: all .3s 56 | 57 | &:hover 58 | color: #9c396b 59 | text-shadow: 1px 1px 1px #ddd 60 | 61 | .post__image 62 | display: block 63 | // cursor: pointer 64 | margin: $margin-left-right 0 65 | 66 | .post__main 67 | margin-top: $margin-left-right 68 | 69 | .headerlink 70 | display: inline-block 71 | 72 | img 73 | cursor: pointer 74 | transition: all .3s 75 | 76 | &:hover 77 | box-shadow: 0 0 1px #ccc 78 | 79 | .highlight 80 | margin: 1.6em -60px 81 | padding: 15px 82 | 83 | figcaption 84 | padding: 0 45px 85 | 86 | table 87 | margin: 0 88 | width: auto 89 | border: none 90 | 91 | td 92 | th 93 | border: none 94 | 95 | pre 96 | margin: 0 97 | 98 | h1 99 | // 1.6 * 16 100 | font-size-rem(25.6) 101 | 102 | h2 103 | // 1.4 * 16 104 | font-size-rem(22.4) 105 | 106 | h3 107 | // 1.2 * 16 108 | font-size-rem(19.2) 109 | 110 | img 111 | // display: block 112 | margin: 1.6em auto 113 | 114 | .post__foot 115 | padding: 8px $margin-left-right 116 | border-top: 1px solid $border-color 117 | background-color: $background-color 118 | 119 | .post__foot-link 120 | padding: 10px 15px 10px 0 121 | color: #3CB371 122 | font-size-rem(14) 123 | 124 | .post__tag__item 125 | display: inline-block 126 | 127 | .post__tag__link 128 | @extend .post__foot-link 129 | transition: all .3s 130 | display: block 131 | 132 | &:hover 133 | color: #9c396b 134 | 135 | &:before 136 | content: "#" 137 | 138 | .post__more 139 | @extend .post__foot-link 140 | padding: 10px 20px 141 | border: 1px solid $border-color 142 | border-radius: 3px 143 | background-color: #CCCCCC 144 | color: #FFFFFF 145 | 146 | &:hover 147 | background-color: #DDDDDD 148 | 149 | 150 | .gallery 151 | margin-bottom: 45px 152 | 153 | a 154 | display: inline-block 155 | width: 100% 156 | 157 | &:focus 158 | outline: 0 159 | 160 | img 161 | width: 100% 162 | 163 | 164 | .video-container 165 | width: 100% 166 | 167 | iframe 168 | width: 100% 169 | min-height: 320px 170 | 171 | 172 | .queue-in 173 | animation-name: queue-in 174 | animation-duration: .3s 175 | animation-fill-mode: forwards 176 | animation-timing-function: ease-in 177 | 178 | .queue-out 179 | animation-name: queue-out 180 | animation-duration: .3s 181 | animation-fill-mode: forwards 182 | animation-timing-function: ease-out 183 | 184 | @keyframes queue-in { 185 | from { 186 | // opacity: .5; 187 | // margin-left: 40px; 188 | transform: translateX(40px); 189 | } 190 | 191 | to { 192 | opacity: 1; 193 | transform: translateX(0); 194 | } 195 | } 196 | 197 | 198 | @keyframes queue-out { 199 | from { 200 | opacity: 1; 201 | transform: translateX(0); 202 | } 203 | 204 | to { 205 | opacity: 0; 206 | display: none; 207 | transform: translateX(40px); 208 | } 209 | } 210 | -------------------------------------------------------------------------------- /source/js/fancybox/jquery.fancybox.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.fancybox-enabled{overflow:hidden}.fancybox-enabled body{overflow:visible;height:100%}.fancybox-container{position:fixed;top:0;left:0;width:100%;height:100%;z-index:99993;-webkit-backface-visibility:hidden;backface-visibility:hidden}.fancybox-container~.fancybox-container{z-index:99992}.fancybox-bg{position:absolute;top:0;right:0;bottom:0;left:0;background:#0f0f11;opacity:0;transition-timing-function:cubic-bezier(.55,.06,.68,.19);-webkit-backface-visibility:hidden;backface-visibility:hidden}.fancybox-container--ready .fancybox-bg{opacity:.87;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-controls{position:absolute;top:0;left:0;right:0;text-align:center;opacity:0;z-index:99994;transition:opacity .2s;pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;direction:ltr}.fancybox-show-controls .fancybox-controls{opacity:1}.fancybox-infobar{display:none}.fancybox-show-infobar .fancybox-infobar{display:inline-block;pointer-events:all}.fancybox-infobar__body{display:inline-block;width:70px;line-height:44px;font-size:13px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center;color:#ddd;background-color:rgba(30,30,30,.7);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:subpixel-antialiased}.fancybox-buttons{position:absolute;top:0;right:0;display:none;pointer-events:all}.fancybox-show-buttons .fancybox-buttons{display:block}.fancybox-slider-wrap{overflow:hidden;direction:ltr}.fancybox-slider,.fancybox-slider-wrap{position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;z-index:99993;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-tap-highlight-color:transparent}.fancybox-slide{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:auto;outline:none;white-space:normal;box-sizing:border-box;text-align:center;z-index:99994;-webkit-overflow-scrolling:touch}.fancybox-slide:before{content:"";height:100%;width:0}.fancybox-slide:before,.fancybox-slide>*{display:inline-block;vertical-align:middle}.fancybox-slide>*{position:relative;padding:24px;margin:44px 0;border-width:0;text-align:left;background-color:#fff;overflow:auto;box-sizing:border-box}.fancybox-slide--image{overflow:hidden}.fancybox-slide--image:before{display:none}.fancybox-content{display:inline-block;position:relative;margin:44px auto;padding:0;border:0;width:80%;height:calc(100% - 88px);vertical-align:middle;line-height:normal;text-align:left;white-space:normal;outline:none;font-size:16px;font-family:Arial,sans-serif;box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-overflow-scrolling:touch}.fancybox-iframe{display:block;margin:0;padding:0;border:0;width:100%;height:100%;background:#fff}.fancybox-slide--video .fancybox-content,.fancybox-slide--video .fancybox-iframe{background:transparent}.fancybox-placeholder{z-index:99995;background:transparent;cursor:default;overflow:visible;-webkit-transform-origin:top left;transform-origin:top left;background-size:100% 100%;background-repeat:no-repeat;-webkit-backface-visibility:hidden;backface-visibility:hidden}.fancybox-image,.fancybox-placeholder,.fancybox-spaceball{position:absolute;top:0;left:0;margin:0;padding:0;border:0}.fancybox-image,.fancybox-spaceball{width:100%;height:100%;max-width:none;max-height:none;background:transparent;background-size:100% 100%}.fancybox-controls--canzoomOut .fancybox-placeholder{cursor:zoom-out}.fancybox-controls--canzoomIn .fancybox-placeholder{cursor:zoom-in}.fancybox-controls--canGrab .fancybox-placeholder{cursor:-webkit-grab;cursor:grab}.fancybox-controls--isGrabbing .fancybox-placeholder{cursor:-webkit-grabbing;cursor:grabbing}.fancybox-spaceball{z-index:1}.fancybox-tmp{position:absolute;top:-9999px;left:-9999px;visibility:hidden}.fancybox-error{position:absolute;margin:0;padding:40px;top:50%;left:50%;width:380px;max-width:100%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background:#fff;cursor:default}.fancybox-error p{margin:0;padding:0;color:#444;font:16px/20px Helvetica Neue,Helvetica,Arial,sans-serif}.fancybox-close-small{position:absolute;top:0;right:0;width:44px;height:44px;padding:0;margin:0;border:0;border-radius:0;outline:none;background:transparent;z-index:10;cursor:pointer}.fancybox-close-small:after{content:"×";position:absolute;top:5px;right:5px;width:30px;height:30px;font:20px/30px Arial,Helvetica Neue,Helvetica,sans-serif;color:#888;font-weight:300;text-align:center;border-radius:50%;border-width:0;background:#fff;transition:background .2s;box-sizing:border-box;z-index:2}.fancybox-close-small:focus:after{outline:1px dotted #888}.fancybox-slide--video .fancybox-close-small{top:-36px;right:-36px;background:transparent}.fancybox-close-small:hover:after{color:#555;background:#eee}.fancybox-caption-wrap{position:absolute;bottom:0;left:0;right:0;padding:60px 30px 0;z-index:99998;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;background:linear-gradient(180deg,transparent 0,rgba(0,0,0,.1) 20%,rgba(0,0,0,.2) 40%,rgba(0,0,0,.6) 80%,rgba(0,0,0,.8));opacity:0;transition:opacity .2s;pointer-events:none}.fancybox-show-caption .fancybox-caption-wrap{opacity:1}.fancybox-caption{padding:30px 0;border-top:1px solid hsla(0,0%,100%,.4);font-size:14px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#fff;line-height:20px;-webkit-text-size-adjust:none}.fancybox-caption a,.fancybox-caption button{pointer-events:all}.fancybox-caption a{color:#fff;text-decoration:underline}.fancybox-button{display:inline-block;position:relative;width:44px;height:44px;line-height:44px;margin:0;padding:0;border:0;border-radius:0;cursor:pointer;background:transparent;color:#fff;box-sizing:border-box;vertical-align:top;outline:none}.fancybox-button--disabled{cursor:default;pointer-events:none}.fancybox-button,.fancybox-infobar__body{background:rgba(30,30,30,.6)}.fancybox-button:hover{background:rgba(0,0,0,.8)}.fancybox-button:after,.fancybox-button:before{content:"";pointer-events:none;position:absolute;border-color:#fff;background-color:currentColor;color:currentColor;opacity:.9;box-sizing:border-box;display:inline-block}.fancybox-button--disabled:after,.fancybox-button--disabled:before{opacity:.5}.fancybox-button--left:after{left:20px;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.fancybox-button--left:after,.fancybox-button--right:after{top:18px;width:6px;height:6px;background:transparent;border-top:2px solid currentColor;border-right:2px solid currentColor}.fancybox-button--right:after{right:20px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.fancybox-button--left{border-bottom-left-radius:5px}.fancybox-button--right{border-bottom-right-radius:5px}.fancybox-button--close{float:right}.fancybox-button--close:after,.fancybox-button--close:before{content:"";display:inline-block;position:absolute;height:2px;width:16px;top:calc(50% - 1px);left:calc(50% - 8px)}.fancybox-button--close:before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.fancybox-button--close:after{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.fancybox-loading{border:6px solid hsla(0,0%,39%,.4);border-top:6px solid hsla(0,0%,100%,.6);border-radius:100%;height:50px;width:50px;-webkit-animation:a .8s infinite linear;animation:a .8s infinite linear;background:transparent;position:absolute;top:50%;left:50%;margin-top:-25px;margin-left:-25px;z-index:99999}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@media (max-width:800px){.fancybox-controls{text-align:left}.fancybox-button--left,.fancybox-button--right,.fancybox-buttons button:not(.fancybox-button--close){display:none!important}.fancybox-caption{padding:20px 0;margin:0}}.fancybox-button--fullscreen:before{width:15px;height:11px;left:15px;top:16px;border:2px solid;background:none}.fancybox-button--play:before{top:16px;left:18px;width:0;height:0;border-top:6px inset transparent;border-bottom:6px inset transparent;border-left:10px solid;border-radius:1px;background:transparent}.fancybox-button--pause:before{top:16px;left:18px;width:7px;height:11px;border-style:solid;border-width:0 2px;background:transparent}.fancybox-button--thumbs span{font-size:23px}.fancybox-button--thumbs:before{top:20px;left:21px;width:3px;height:3px;box-shadow:0 -4px 0,-4px -4px 0,4px -4px 0,inset 0 0 0 32px,-4px 0 0,4px 0 0,0 4px 0,-4px 4px 0,4px 4px 0}.fancybox-container--thumbs .fancybox-caption-wrap,.fancybox-container--thumbs .fancybox-controls,.fancybox-container--thumbs .fancybox-slider-wrap{right:220px}.fancybox-thumbs{position:absolute;top:0;right:0;bottom:0;left:auto;width:220px;margin:0;padding:5px 5px 0 0;background:#fff;z-index:99993;word-break:normal;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;box-sizing:border-box}.fancybox-thumbs>ul{list-style:none;position:absolute;position:relative;width:100%;height:100%;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;font-size:0}.fancybox-thumbs>ul>li{float:left;overflow:hidden;max-width:50%;padding:0;margin:0;width:105px;height:75px;position:relative;cursor:pointer;outline:none;border:5px solid #fff;border-top-width:0;border-right-width:0;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}li.fancybox-thumbs-loading{background:rgba(0,0,0,.1)}.fancybox-thumbs>ul>li>img{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;max-height:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-thumbs>ul>li:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px;border:4px solid #4ea7f9;z-index:99991;opacity:0;transition:all .2s cubic-bezier(.25,.46,.45,.94)}.fancybox-thumbs>ul>li.fancybox-thumbs-active:before{opacity:1}@media (max-width:800px){.fancybox-thumbs{display:none!important}.fancybox-container--thumbs .fancybox-caption-wrap,.fancybox-container--thumbs .fancybox-controls,.fancybox-container--thumbs .fancybox-slider-wrap{right:0}} -------------------------------------------------------------------------------- /source/js/scroller.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.9.3 2 | (function () { 3 | 4 | var Utils = { 5 | isString: function (obj) { 6 | return typeof obj === 'string' || obj instanceof String; 7 | } 8 | }; 9 | 10 | var CoreScroller, Scroller, activatedElement, checkVisibility, doesScroll, findScrollableElement, firstScrollableElement, getDimension, getScrollingElement, getSign, isScrollableElement, performScroll, root, scrollProperties, shouldScroll; 11 | 12 | activatedElement = null; 13 | 14 | getScrollingElement = function () { 15 | var ref; 16 | return (ref = document.scrollingElement) != null ? ref : document.body; 17 | }; 18 | 19 | getSign = function (val) { 20 | if (!val) { 21 | return 0; 22 | } else { 23 | if (val < 0) { 24 | return -1; 25 | } else { 26 | return 1; 27 | } 28 | } 29 | }; 30 | 31 | scrollProperties = { 32 | x: { 33 | axisName: 'scrollLeft', 34 | max: 'scrollWidth', 35 | viewSize: 'clientWidth' 36 | }, 37 | y: { 38 | axisName: 'scrollTop', 39 | max: 'scrollHeight', 40 | viewSize: 'clientHeight' 41 | } 42 | }; 43 | 44 | getDimension = function (el, direction, amount) { 45 | var name; 46 | if (Utils.isString(amount)) { 47 | name = amount; 48 | if (name === 'viewSize' && el === getScrollingElement()) { 49 | if (direction === 'x') { 50 | return window.innerWidth; 51 | } else { 52 | return window.innerHeight; 53 | } 54 | } else { 55 | return el[scrollProperties[direction][name]]; 56 | } 57 | } else { 58 | return amount; 59 | } 60 | }; 61 | 62 | performScroll = function (element, direction, amount) { 63 | var axisName, before; 64 | axisName = scrollProperties[direction].axisName; 65 | before = element[axisName]; 66 | element[axisName] += amount; 67 | return element[axisName] !== before; 68 | }; 69 | 70 | shouldScroll = function (element, direction) { 71 | var computedStyle, ref; 72 | computedStyle = window.getComputedStyle(element); 73 | if (computedStyle.getPropertyValue("overflow-" + direction) === "hidden") { 74 | return false; 75 | } 76 | 77 | if ((ref = computedStyle.getPropertyValue("visibility")) === "hidden" || ref === "collapse") { 78 | return false; 79 | } 80 | 81 | if (computedStyle.getPropertyValue("display") === "none") { 82 | return false; 83 | } 84 | 85 | return true; 86 | }; 87 | 88 | doesScroll = function (element, direction, amount, factor) { 89 | var delta; 90 | delta = factor * getDimension(element, direction, amount) || -1; 91 | delta = getSign(delta); 92 | return performScroll(element, direction, delta) && performScroll(element, direction, -delta); 93 | }; 94 | 95 | isScrollableElement = function (element, direction, amount, factor) { 96 | if (direction == null) { 97 | direction = "y"; 98 | } 99 | 100 | if (amount == null) { 101 | amount = 1; 102 | } 103 | 104 | if (factor == null) { 105 | factor = 1; 106 | } 107 | return doesScroll(element, direction, amount, factor) && shouldScroll(element, direction); 108 | }; 109 | 110 | findScrollableElement = function (element, direction, amount, factor) { 111 | var ref; 112 | while (element !== getScrollingElement() && !isScrollableElement(element, direction, amount, factor)) { 113 | element = (ref = DomUtils.getContainingElement(element)) != null ? ref : getScrollingElement(); 114 | } 115 | 116 | return element; 117 | }; 118 | 119 | firstScrollableElement = function (element) { 120 | var child, children, ele, i, len, ref; 121 | if (element == null) { 122 | element = getScrollingElement(); 123 | } 124 | if (doesScroll(element, "y", 1, 1) || doesScroll(element, "y", -1, 1)) { 125 | return element; 126 | } else { 127 | children = (function () { 128 | var i, len, ref, results; 129 | ref = element.children; 130 | results = []; 131 | for (i = 0, len = ref.length; i < len; i++) { 132 | child = ref[i]; 133 | results.push({ 134 | element: child, 135 | rect: DomUtils.getVisibleClientRect(child) 136 | }); 137 | } 138 | return results; 139 | })(); 140 | 141 | children = children.filter(function (child) { 142 | return child.rect; 143 | }); 144 | 145 | children.map(function (child) { 146 | return child.area = child.rect.width * child.rect.height; 147 | }); 148 | 149 | ref = children.sort(function (a, b) { 150 | return b.area - a.area; 151 | }); 152 | 153 | for (i = 0, len = ref.length; i < len; i++) { 154 | child = ref[i]; 155 | if (ele = firstScrollableElement(child.element)) { 156 | return ele; 157 | } 158 | } 159 | return null; 160 | } 161 | }; 162 | 163 | checkVisibility = function (element) { 164 | var rect; 165 | rect = activatedElement.getBoundingClientRect(); 166 | if (rect.bottom < 0 || rect.top > window.innerHeight || rect.right < 0 || rect.left > window.innerWidth) { 167 | return activatedElement = element; 168 | } 169 | }; 170 | 171 | CoreScroller = { 172 | 173 | init: function () { 174 | this.time = 0; 175 | this.lastEvent = null; 176 | this.keyIsDown = false; 177 | 178 | return 1; 179 | }, 180 | 181 | wouldNotInitiateScroll: function () { 182 | var ref; 183 | return ((ref = this.lastEvent) != null ? ref.repeat : void 0); 184 | }, 185 | 186 | minCalibration: 0.5, 187 | maxCalibration: 1.6, 188 | calibrationBoundary: 150, 189 | 190 | scroll: function (element, direction, amount, continuous) { 191 | var activationTime, animate, calibration, duration, myKeyIsStillDown, previousTimestamp, ref, sign, totalDelta, totalElapsed; 192 | if (continuous == null) { 193 | continuous = true; 194 | } 195 | 196 | if (!amount) { 197 | return; 198 | } 199 | 200 | if ((ref = this.lastEvent) != null ? ref.repeat : void 0) { 201 | return; 202 | } 203 | 204 | activationTime = ++this.time; 205 | 206 | myKeyIsStillDown = (function (_this) { 207 | return function () { 208 | return _this.time === activationTime && _this.keyIsDown; 209 | }; 210 | })(this); 211 | 212 | sign = getSign(amount); 213 | amount = Math.abs(amount); 214 | duration = Math.max(100, 20 * Math.log(amount)); 215 | totalDelta = 0; 216 | totalElapsed = 0.0; 217 | calibration = 1.0; 218 | previousTimestamp = null; 219 | 220 | animate = (function (_this) { 221 | return function (timestamp) { 222 | var delta, elapsed; 223 | if (previousTimestamp == null) { 224 | previousTimestamp = timestamp; 225 | } 226 | 227 | if (timestamp === previousTimestamp) { 228 | return requestAnimationFrame(animate); 229 | } 230 | 231 | elapsed = timestamp - previousTimestamp; 232 | totalElapsed += elapsed; 233 | previousTimestamp = timestamp; 234 | 235 | if (myKeyIsStillDown() && 236 | 75 <= totalElapsed && 237 | (_this.minCalibration <= calibration && calibration <= _this.maxCalibration)) { 238 | if (1.05 * calibration * amount < _this.calibrationBoundary) { 239 | calibration *= 1.05; 240 | } 241 | if (_this.calibrationBoundary < 0.95 * calibration * amount) { 242 | calibration *= 0.95; 243 | } 244 | } 245 | 246 | delta = Math.ceil(amount * (elapsed / duration) * calibration); 247 | delta = myKeyIsStillDown() ? delta : Math.max(0, Math.min(delta, amount - totalDelta)); 248 | if (delta && performScroll(element, direction, sign * delta)) { 249 | totalDelta += delta; 250 | return requestAnimationFrame(animate); 251 | } else { 252 | return checkVisibility(element); 253 | } 254 | }; 255 | })(this); 256 | 257 | if (!continuous) { 258 | ++this.time; 259 | } 260 | 261 | return requestAnimationFrame(animate); 262 | } 263 | }; 264 | 265 | Scroller = { 266 | 267 | init: function () { 268 | return CoreScroller.init(); 269 | }, 270 | 271 | scrollBy: function (direction, amount, factor, continuous) { 272 | var element, elementAmount; 273 | if (factor == null) { 274 | factor = 1; 275 | } 276 | 277 | if (continuous == null) { 278 | continuous = true; 279 | } 280 | 281 | if (!getScrollingElement() && amount instanceof Number) { 282 | if (direction === "x") { 283 | window.scrollBy(amount, 0); 284 | } else { 285 | window.scrollBy(0, amount); 286 | } 287 | return; 288 | } 289 | 290 | activatedElement || (activatedElement = (getScrollingElement() && firstScrollableElement()) || getScrollingElement()); 291 | if (!activatedElement) { 292 | return; 293 | } 294 | 295 | if (!CoreScroller.wouldNotInitiateScroll()) { 296 | element = findScrollableElement(activatedElement, direction, amount, factor); 297 | elementAmount = factor * getDimension(element, direction, amount); 298 | return CoreScroller.scroll(element, direction, elementAmount, continuous); 299 | } 300 | }, 301 | 302 | scrollTo: function (direction, pos) { 303 | var amount, element; 304 | activatedElement || (activatedElement = (getScrollingElement() && firstScrollableElement()) || getScrollingElement()); 305 | if (!activatedElement) { 306 | return; 307 | } 308 | 309 | element = findScrollableElement(activatedElement, direction, pos, 1); 310 | amount = getDimension(element, direction, pos) - element[scrollProperties[direction].axisName]; 311 | return CoreScroller.scroll(element, direction, amount); 312 | }, 313 | 314 | isScrollableElement: function (element) { 315 | activatedElement || (activatedElement = (getScrollingElement() && firstScrollableElement()) || getScrollingElement()); 316 | return element !== activatedElement && isScrollableElement(element); 317 | }, 318 | 319 | scrollIntoView: function (element) { 320 | var amount, rect, ref; 321 | activatedElement || (activatedElement = getScrollingElement() && firstScrollableElement()); 322 | rect = (ref = element.getClientRects()) != null ? ref[0] : void 0; 323 | if (rect != null) { 324 | if (rect.bottom < 0) { 325 | amount = rect.bottom - Math.min(rect.height, window.innerHeight); 326 | element = findScrollableElement(element, "y", amount, 1); 327 | CoreScroller.scroll(element, "y", amount, false); 328 | } else if (window.innerHeight < rect.top) { 329 | amount = rect.top + Math.min(rect.height - window.innerHeight, 0); 330 | element = findScrollableElement(element, "y", amount, 1); 331 | CoreScroller.scroll(element, "y", amount, false); 332 | } 333 | 334 | if (rect.right < 0) { 335 | amount = rect.right - Math.min(rect.width, window.innerWidth); 336 | element = findScrollableElement(element, "x", amount, 1); 337 | return CoreScroller.scroll(element, "x", amount, false); 338 | } else if (window.innerWidth < rect.left) { 339 | amount = rect.left + Math.min(rect.width - window.innerWidth, 0); 340 | element = findScrollableElement(element, "x", amount, 1); 341 | return CoreScroller.scroll(element, "x", amount, false); 342 | } 343 | } 344 | } 345 | 346 | }; 347 | 348 | root = typeof exports !== "undefined" && exports !== null ? exports : window; 349 | 350 | root.Scroller = Scroller; 351 | 352 | }).call(this); 353 | 354 | var scrollStepSize = 60; 355 | $.extend(window, { 356 | 357 | scrollToBottom: function () { 358 | // Marks.setPreviousPosition(); 359 | return Scroller.scrollTo("y", "max"); 360 | }, 361 | 362 | scrollToTop: function (count) { 363 | // Marks.setPreviousPosition(); 364 | return Scroller.scrollTo("y", (count - 1) * scrollStepSize); 365 | }, 366 | 367 | scrollUp: function (count) { 368 | return Scroller.scrollBy("y", -1 * scrollStepSize * count); 369 | }, 370 | 371 | scrollDown: function (count) { 372 | return Scroller.scrollBy("y", scrollStepSize * count); 373 | }, 374 | 375 | scrollPageUp: function (count) { 376 | return Scroller.scrollBy("y", "viewSize", -1 / 2 * count); 377 | }, 378 | 379 | scrollPageDown: function (count) { 380 | return Scroller.scrollBy("y", "viewSize", 1 / 2 * count); 381 | }, 382 | 383 | scrollFullPageUp: function (count) { 384 | return Scroller.scrollBy("y", "viewSize", -1 * count); 385 | }, 386 | 387 | scrollFullPageDown: function (count) { 388 | return Scroller.scrollBy("y", "viewSize", 1 * count); 389 | }, 390 | 391 | // scrollToLeft: function () { 392 | // return Scroller.scrollTo("x", 0); 393 | // }, 394 | 395 | // scrollToRight: function () { 396 | // return Scroller.scrollTo("x", "max"); 397 | // }, 398 | 399 | // scrollLeft: function (count) { 400 | // return Scroller.scrollBy("x", -1 * scrollStepSize * count); 401 | // }, 402 | 403 | // scrollRight: function (count) { 404 | // return Scroller.scrollBy("x", scrollStepSize * count); 405 | // } 406 | 407 | }); -------------------------------------------------------------------------------- /source/js/particles.min.js: -------------------------------------------------------------------------------- 1 | /* ----------------------------------------------- 2 | /* Author : Vincent Garreau - vincentgarreau.com 3 | /* MIT license: http://opensource.org/licenses/MIT 4 | /* Demo / Generator : vincentgarreau.com/particles.js 5 | /* GitHub : github.com/VincentGarreau/particles.js 6 | /* How to use? : Check the GitHub README 7 | /* v2.0.0 8 | /* ----------------------------------------------- */ 9 | function hexToRgb(e){var a=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(a,function(e,a,t,i){return a+a+t+t+i+i});var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function clamp(e,a,t){return Math.min(Math.max(e,a),t)}function isInArray(e,a){return a.indexOf(e)>-1}var pJS=function(e,a){var t=document.querySelector("#"+e+" > .particles-js-canvas-el");this.pJS={canvas:{el:t,w:t.offsetWidth,h:t.offsetHeight},particles:{number:{value:400,density:{enable:!0,value_area:800}},color:{value:"#fff"},shape:{type:"circle",stroke:{width:0,color:"#ff0000"},polygon:{nb_sides:5},image:{src:"",width:100,height:100}},opacity:{value:1,random:!1,anim:{enable:!1,speed:2,opacity_min:0,sync:!1}},size:{value:20,random:!1,anim:{enable:!1,speed:20,size_min:0,sync:!1}},line_linked:{enable:!0,distance:100,color:"#fff",opacity:1,width:1},move:{enable:!0,speed:2,direction:"none",random:!1,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotateX:3e3,rotateY:3e3}},array:[]},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:100,line_linked:{opacity:1}},bubble:{distance:200,size:80,duration:.4},repulse:{distance:200,duration:.4},push:{particles_nb:4},remove:{particles_nb:2}},mouse:{}},retina_detect:!1,fn:{interact:{},modes:{},vendors:{}},tmp:{}};var i=this.pJS;a&&Object.deepExtend(i,a),i.tmp.obj={size_value:i.particles.size.value,size_anim_speed:i.particles.size.anim.speed,move_speed:i.particles.move.speed,line_linked_distance:i.particles.line_linked.distance,line_linked_width:i.particles.line_linked.width,mode_grab_distance:i.interactivity.modes.grab.distance,mode_bubble_distance:i.interactivity.modes.bubble.distance,mode_bubble_size:i.interactivity.modes.bubble.size,mode_repulse_distance:i.interactivity.modes.repulse.distance},i.fn.retinaInit=function(){i.retina_detect&&window.devicePixelRatio>1?(i.canvas.pxratio=window.devicePixelRatio,i.tmp.retina=!0):(i.canvas.pxratio=1,i.tmp.retina=!1),i.canvas.w=i.canvas.el.offsetWidth*i.canvas.pxratio,i.canvas.h=i.canvas.el.offsetHeight*i.canvas.pxratio,i.particles.size.value=i.tmp.obj.size_value*i.canvas.pxratio,i.particles.size.anim.speed=i.tmp.obj.size_anim_speed*i.canvas.pxratio,i.particles.move.speed=i.tmp.obj.move_speed*i.canvas.pxratio,i.particles.line_linked.distance=i.tmp.obj.line_linked_distance*i.canvas.pxratio,i.interactivity.modes.grab.distance=i.tmp.obj.mode_grab_distance*i.canvas.pxratio,i.interactivity.modes.bubble.distance=i.tmp.obj.mode_bubble_distance*i.canvas.pxratio,i.particles.line_linked.width=i.tmp.obj.line_linked_width*i.canvas.pxratio,i.interactivity.modes.bubble.size=i.tmp.obj.mode_bubble_size*i.canvas.pxratio,i.interactivity.modes.repulse.distance=i.tmp.obj.mode_repulse_distance*i.canvas.pxratio},i.fn.canvasInit=function(){i.canvas.ctx=i.canvas.el.getContext("2d")},i.fn.canvasSize=function(){i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i&&i.interactivity.events.resize&&window.addEventListener("resize",function(){i.canvas.w=i.canvas.el.offsetWidth,i.canvas.h=i.canvas.el.offsetHeight,i.tmp.retina&&(i.canvas.w*=i.canvas.pxratio,i.canvas.h*=i.canvas.pxratio),i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i.particles.move.enable||(i.fn.particlesEmpty(),i.fn.particlesCreate(),i.fn.particlesDraw(),i.fn.vendors.densityAutoParticles()),i.fn.vendors.densityAutoParticles()})},i.fn.canvasPaint=function(){i.canvas.ctx.fillRect(0,0,i.canvas.w,i.canvas.h)},i.fn.canvasClear=function(){i.canvas.ctx.clearRect(0,0,i.canvas.w,i.canvas.h)},i.fn.particle=function(e,a,t){if(this.radius=(i.particles.size.random?Math.random():1)*i.particles.size.value,i.particles.size.anim.enable&&(this.size_status=!1,this.vs=i.particles.size.anim.speed/100,i.particles.size.anim.sync||(this.vs=this.vs*Math.random())),this.x=t?t.x:Math.random()*i.canvas.w,this.y=t?t.y:Math.random()*i.canvas.h,this.x>i.canvas.w-2*this.radius?this.x=this.x-this.radius:this.x<2*this.radius&&(this.x=this.x+this.radius),this.y>i.canvas.h-2*this.radius?this.y=this.y-this.radius:this.y<2*this.radius&&(this.y=this.y+this.radius),i.particles.move.bounce&&i.fn.vendors.checkOverlap(this,t),this.color={},"object"==typeof e.value)if(e.value instanceof Array){var s=e.value[Math.floor(Math.random()*i.particles.color.value.length)];this.color.rgb=hexToRgb(s)}else void 0!=e.value.r&&void 0!=e.value.g&&void 0!=e.value.b&&(this.color.rgb={r:e.value.r,g:e.value.g,b:e.value.b}),void 0!=e.value.h&&void 0!=e.value.s&&void 0!=e.value.l&&(this.color.hsl={h:e.value.h,s:e.value.s,l:e.value.l});else"random"==e.value?this.color.rgb={r:Math.floor(256*Math.random())+0,g:Math.floor(256*Math.random())+0,b:Math.floor(256*Math.random())+0}:"string"==typeof e.value&&(this.color=e,this.color.rgb=hexToRgb(this.color.value));this.opacity=(i.particles.opacity.random?Math.random():1)*i.particles.opacity.value,i.particles.opacity.anim.enable&&(this.opacity_status=!1,this.vo=i.particles.opacity.anim.speed/100,i.particles.opacity.anim.sync||(this.vo=this.vo*Math.random()));var n={};switch(i.particles.move.direction){case"top":n={x:0,y:-1};break;case"top-right":n={x:.5,y:-.5};break;case"right":n={x:1,y:-0};break;case"bottom-right":n={x:.5,y:.5};break;case"bottom":n={x:0,y:1};break;case"bottom-left":n={x:-.5,y:1};break;case"left":n={x:-1,y:0};break;case"top-left":n={x:-.5,y:-.5};break;default:n={x:0,y:0}}i.particles.move.straight?(this.vx=n.x,this.vy=n.y,i.particles.move.random&&(this.vx=this.vx*Math.random(),this.vy=this.vy*Math.random())):(this.vx=n.x+Math.random()-.5,this.vy=n.y+Math.random()-.5),this.vx_i=this.vx,this.vy_i=this.vy;var r=i.particles.shape.type;if("object"==typeof r){if(r instanceof Array){var c=r[Math.floor(Math.random()*r.length)];this.shape=c}}else this.shape=r;if("image"==this.shape){var o=i.particles.shape;this.img={src:o.image.src,ratio:o.image.width/o.image.height},this.img.ratio||(this.img.ratio=1),"svg"==i.tmp.img_type&&void 0!=i.tmp.source_svg&&(i.fn.vendors.createSvgImg(this),i.tmp.pushing&&(this.img.loaded=!1))}},i.fn.particle.prototype.draw=function(){function e(){i.canvas.ctx.drawImage(r,a.x-t,a.y-t,2*t,2*t/a.img.ratio)}var a=this;if(void 0!=a.radius_bubble)var t=a.radius_bubble;else var t=a.radius;if(void 0!=a.opacity_bubble)var s=a.opacity_bubble;else var s=a.opacity;if(a.color.rgb)var n="rgba("+a.color.rgb.r+","+a.color.rgb.g+","+a.color.rgb.b+","+s+")";else var n="hsla("+a.color.hsl.h+","+a.color.hsl.s+"%,"+a.color.hsl.l+"%,"+s+")";switch(i.canvas.ctx.fillStyle=n,i.canvas.ctx.beginPath(),a.shape){case"circle":i.canvas.ctx.arc(a.x,a.y,t,0,2*Math.PI,!1);break;case"edge":i.canvas.ctx.rect(a.x-t,a.y-t,2*t,2*t);break;case"triangle":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t,a.y+t/1.66,2*t,3,2);break;case"polygon":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t/(i.particles.shape.polygon.nb_sides/3.5),a.y-t/.76,2.66*t/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,1);break;case"star":i.fn.vendors.drawShape(i.canvas.ctx,a.x-2*t/(i.particles.shape.polygon.nb_sides/4),a.y-t/1.52,2*t*2.66/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,2);break;case"image":if("svg"==i.tmp.img_type)var r=a.img.obj;else var r=i.tmp.img_obj;r&&e()}i.canvas.ctx.closePath(),i.particles.shape.stroke.width>0&&(i.canvas.ctx.strokeStyle=i.particles.shape.stroke.color,i.canvas.ctx.lineWidth=i.particles.shape.stroke.width,i.canvas.ctx.stroke()),i.canvas.ctx.fill()},i.fn.particlesCreate=function(){for(var e=0;e=i.particles.opacity.value&&(a.opacity_status=!1),a.opacity+=a.vo):(a.opacity<=i.particles.opacity.anim.opacity_min&&(a.opacity_status=!0),a.opacity-=a.vo),a.opacity<0&&(a.opacity=0)),i.particles.size.anim.enable&&(1==a.size_status?(a.radius>=i.particles.size.value&&(a.size_status=!1),a.radius+=a.vs):(a.radius<=i.particles.size.anim.size_min&&(a.size_status=!0),a.radius-=a.vs),a.radius<0&&(a.radius=0)),"bounce"==i.particles.move.out_mode)var s={x_left:a.radius,x_right:i.canvas.w,y_top:a.radius,y_bottom:i.canvas.h};else var s={x_left:-a.radius,x_right:i.canvas.w+a.radius,y_top:-a.radius,y_bottom:i.canvas.h+a.radius};switch(a.x-a.radius>i.canvas.w?(a.x=s.x_left,a.y=Math.random()*i.canvas.h):a.x+a.radius<0&&(a.x=s.x_right,a.y=Math.random()*i.canvas.h),a.y-a.radius>i.canvas.h?(a.y=s.y_top,a.x=Math.random()*i.canvas.w):a.y+a.radius<0&&(a.y=s.y_bottom,a.x=Math.random()*i.canvas.w),i.particles.move.out_mode){case"bounce":a.x+a.radius>i.canvas.w?a.vx=-a.vx:a.x-a.radius<0&&(a.vx=-a.vx),a.y+a.radius>i.canvas.h?a.vy=-a.vy:a.y-a.radius<0&&(a.vy=-a.vy)}if(isInArray("grab",i.interactivity.events.onhover.mode)&&i.fn.modes.grabParticle(a),(isInArray("bubble",i.interactivity.events.onhover.mode)||isInArray("bubble",i.interactivity.events.onclick.mode))&&i.fn.modes.bubbleParticle(a),(isInArray("repulse",i.interactivity.events.onhover.mode)||isInArray("repulse",i.interactivity.events.onclick.mode))&&i.fn.modes.repulseParticle(a),i.particles.line_linked.enable||i.particles.move.attract.enable)for(var n=e+1;n0){var c=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+c.r+","+c.g+","+c.b+","+r+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(a.x,a.y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}},i.fn.interact.attractParticles=function(e,a){var t=e.x-a.x,s=e.y-a.y,n=Math.sqrt(t*t+s*s);if(n<=i.particles.line_linked.distance){var r=t/(1e3*i.particles.move.attract.rotateX),c=s/(1e3*i.particles.move.attract.rotateY);e.vx-=r,e.vy-=c,a.vx+=r,a.vy+=c}},i.fn.interact.bounceParticles=function(e,a){var t=e.x-a.x,i=e.y-a.y,s=Math.sqrt(t*t+i*i),n=e.radius+a.radius;n>=s&&(e.vx=-e.vx,e.vy=-e.vy,a.vx=-a.vx,a.vy=-a.vy)},i.fn.modes.pushParticles=function(e,a){i.tmp.pushing=!0;for(var t=0;e>t;t++)i.particles.array.push(new i.fn.particle(i.particles.color,i.particles.opacity.value,{x:a?a.pos_x:Math.random()*i.canvas.w,y:a?a.pos_y:Math.random()*i.canvas.h})),t==e-1&&(i.particles.move.enable||i.fn.particlesDraw(),i.tmp.pushing=!1)},i.fn.modes.removeParticles=function(e){i.particles.array.splice(0,e),i.particles.move.enable||i.fn.particlesDraw()},i.fn.modes.bubbleParticle=function(e){function a(){e.opacity_bubble=e.opacity,e.radius_bubble=e.radius}function t(a,t,s,n,c){if(a!=t)if(i.tmp.bubble_duration_end){if(void 0!=s){var o=n-p*(n-a)/i.interactivity.modes.bubble.duration,l=a-o;d=a+l,"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else if(r<=i.interactivity.modes.bubble.distance){if(void 0!=s)var v=s;else var v=n;if(v!=a){var d=n-p*(n-a)/i.interactivity.modes.bubble.duration;"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else"size"==c&&(e.radius_bubble=void 0),"opacity"==c&&(e.opacity_bubble=void 0)}if(i.interactivity.events.onhover.enable&&isInArray("bubble",i.interactivity.events.onhover.mode)){var s=e.x-i.interactivity.mouse.pos_x,n=e.y-i.interactivity.mouse.pos_y,r=Math.sqrt(s*s+n*n),c=1-r/i.interactivity.modes.bubble.distance;if(r<=i.interactivity.modes.bubble.distance){if(c>=0&&"mousemove"==i.interactivity.status){if(i.interactivity.modes.bubble.size!=i.particles.size.value)if(i.interactivity.modes.bubble.size>i.particles.size.value){var o=e.radius+i.interactivity.modes.bubble.size*c;o>=0&&(e.radius_bubble=o)}else{var l=e.radius-i.interactivity.modes.bubble.size,o=e.radius-l*c;o>0?e.radius_bubble=o:e.radius_bubble=0}if(i.interactivity.modes.bubble.opacity!=i.particles.opacity.value)if(i.interactivity.modes.bubble.opacity>i.particles.opacity.value){var v=i.interactivity.modes.bubble.opacity*c;v>e.opacity&&v<=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}else{var v=e.opacity-(i.particles.opacity.value-i.interactivity.modes.bubble.opacity)*c;v=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}}}else a();"mouseleave"==i.interactivity.status&&a()}else if(i.interactivity.events.onclick.enable&&isInArray("bubble",i.interactivity.events.onclick.mode)){if(i.tmp.bubble_clicking){var s=e.x-i.interactivity.mouse.click_pos_x,n=e.y-i.interactivity.mouse.click_pos_y,r=Math.sqrt(s*s+n*n),p=((new Date).getTime()-i.interactivity.mouse.click_time)/1e3;p>i.interactivity.modes.bubble.duration&&(i.tmp.bubble_duration_end=!0),p>2*i.interactivity.modes.bubble.duration&&(i.tmp.bubble_clicking=!1,i.tmp.bubble_duration_end=!1)}i.tmp.bubble_clicking&&(t(i.interactivity.modes.bubble.size,i.particles.size.value,e.radius_bubble,e.radius,"size"),t(i.interactivity.modes.bubble.opacity,i.particles.opacity.value,e.opacity_bubble,e.opacity,"opacity"))}},i.fn.modes.repulseParticle=function(e){function a(){var a=Math.atan2(d,p);if(e.vx=u*Math.cos(a),e.vy=u*Math.sin(a),"bounce"==i.particles.move.out_mode){var t={x:e.x+e.vx,y:e.y+e.vy};t.x+e.radius>i.canvas.w?e.vx=-e.vx:t.x-e.radius<0&&(e.vx=-e.vx),t.y+e.radius>i.canvas.h?e.vy=-e.vy:t.y-e.radius<0&&(e.vy=-e.vy)}}if(i.interactivity.events.onhover.enable&&isInArray("repulse",i.interactivity.events.onhover.mode)&&"mousemove"==i.interactivity.status){var t=e.x-i.interactivity.mouse.pos_x,s=e.y-i.interactivity.mouse.pos_y,n=Math.sqrt(t*t+s*s),r={x:t/n,y:s/n},c=i.interactivity.modes.repulse.distance,o=100,l=clamp(1/c*(-1*Math.pow(n/c,2)+1)*c*o,0,50),v={x:e.x+r.x*l,y:e.y+r.y*l};"bounce"==i.particles.move.out_mode?(v.x-e.radius>0&&v.x+e.radius0&&v.y+e.radius=m&&a()}else 0==i.tmp.repulse_clicking&&(e.vx=e.vx_i,e.vy=e.vy_i)},i.fn.modes.grabParticle=function(e){if(i.interactivity.events.onhover.enable&&"mousemove"==i.interactivity.status){var a=e.x-i.interactivity.mouse.pos_x,t=e.y-i.interactivity.mouse.pos_y,s=Math.sqrt(a*a+t*t);if(s<=i.interactivity.modes.grab.distance){var n=i.interactivity.modes.grab.line_linked.opacity-s/(1/i.interactivity.modes.grab.line_linked.opacity)/i.interactivity.modes.grab.distance;if(n>0){var r=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+r.r+","+r.g+","+r.b+","+n+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x,i.interactivity.mouse.pos_y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}}},i.fn.vendors.eventsListeners=function(){"window"==i.interactivity.detect_on?i.interactivity.el=window:i.interactivity.el=i.canvas.el,(i.interactivity.events.onhover.enable||i.interactivity.events.onclick.enable)&&(i.interactivity.el.addEventListener("mousemove",function(e){if(i.interactivity.el==window)var a=e.clientX,t=e.clientY;else var a=e.offsetX||e.clientX,t=e.offsetY||e.clientY;i.interactivity.mouse.pos_x=a,i.interactivity.mouse.pos_y=t,i.tmp.retina&&(i.interactivity.mouse.pos_x*=i.canvas.pxratio,i.interactivity.mouse.pos_y*=i.canvas.pxratio),i.interactivity.status="mousemove"}),i.interactivity.el.addEventListener("mouseleave",function(e){i.interactivity.mouse.pos_x=null,i.interactivity.mouse.pos_y=null,i.interactivity.status="mouseleave"})),i.interactivity.events.onclick.enable&&i.interactivity.el.addEventListener("click",function(){if(i.interactivity.mouse.click_pos_x=i.interactivity.mouse.pos_x,i.interactivity.mouse.click_pos_y=i.interactivity.mouse.pos_y,i.interactivity.mouse.click_time=(new Date).getTime(),i.interactivity.events.onclick.enable)switch(i.interactivity.events.onclick.mode){case"push":i.particles.move.enable?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):1==i.interactivity.modes.push.particles_nb?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):i.interactivity.modes.push.particles_nb>1&&i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);break;case"remove":i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);break;case"bubble":i.tmp.bubble_clicking=!0;break;case"repulse":i.tmp.repulse_clicking=!0,i.tmp.repulse_count=0,i.tmp.repulse_finish=!1,setTimeout(function(){i.tmp.repulse_clicking=!1},1e3*i.interactivity.modes.repulse.duration)}})},i.fn.vendors.densityAutoParticles=function(){if(i.particles.number.density.enable){var e=i.canvas.el.width*i.canvas.el.height/1e3;i.tmp.retina&&(e/=2*i.canvas.pxratio);var a=e*i.particles.number.value/i.particles.number.density.value_area,t=i.particles.array.length-a;0>t?i.fn.modes.pushParticles(Math.abs(t)):i.fn.modes.removeParticles(t)}},i.fn.vendors.checkOverlap=function(e,a){for(var t=0;tv;v++)e.lineTo(i,0),e.translate(i,0),e.rotate(l);e.fill(),e.restore()},i.fn.vendors.exportImg=function(){window.open(i.canvas.el.toDataURL("image/png"),"_blank")},i.fn.vendors.loadImg=function(e){if(i.tmp.img_error=void 0,""!=i.particles.shape.image.src)if("svg"==e){var a=new XMLHttpRequest;a.open("GET",i.particles.shape.image.src),a.onreadystatechange=function(e){4==a.readyState&&(200==a.status?(i.tmp.source_svg=e.currentTarget.response,i.fn.vendors.checkBeforeDraw()):(console.log("Error pJS - Image not found"),i.tmp.img_error=!0))},a.send()}else{var t=new Image;t.addEventListener("load",function(){i.tmp.img_obj=t,i.fn.vendors.checkBeforeDraw()}),t.src=i.particles.shape.image.src}else console.log("Error pJS - No image.src"),i.tmp.img_error=!0},i.fn.vendors.draw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type?i.tmp.count_svg>=i.particles.number.value?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):void 0!=i.tmp.img_obj?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame))},i.fn.vendors.checkBeforeDraw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type&&void 0==i.tmp.source_svg?i.tmp.checkAnimFrame=requestAnimFrame(check):(cancelRequestAnimFrame(i.tmp.checkAnimFrame),i.tmp.img_error||(i.fn.vendors.init(),i.fn.vendors.draw())):(i.fn.vendors.init(),i.fn.vendors.draw())},i.fn.vendors.init=function(){i.fn.retinaInit(),i.fn.canvasInit(),i.fn.canvasSize(),i.fn.canvasPaint(),i.fn.particlesCreate(),i.fn.vendors.densityAutoParticles(),i.particles.line_linked.color_rgb_line=hexToRgb(i.particles.line_linked.color)},i.fn.vendors.start=function(){isInArray("image",i.particles.shape.type)?(i.tmp.img_type=i.particles.shape.image.src.substr(i.particles.shape.image.src.length-3),i.fn.vendors.loadImg(i.tmp.img_type)):i.fn.vendors.checkBeforeDraw()},i.fn.vendors.eventsListeners(),i.fn.vendors.start()};Object.deepExtend=function(e,a){for(var t in a)a[t]&&a[t].constructor&&a[t].constructor===Object?(e[t]=e[t]||{},arguments.callee(e[t],a[t])):e[t]=a[t];return e},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),window.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}(),window.pJSDom=[],window.particlesJS=function(e,a){"string"!=typeof e&&(a=e,e="particles-js"),e||(e="particles-js");var t=document.getElementById(e),i="particles-js-canvas-el",s=t.getElementsByClassName(i);if(s.length)for(;s.length>0;)t.removeChild(s[0]);var n=document.createElement("canvas");n.className=i,n.style.width="100%",n.style.height="100%";var r=document.getElementById(e).appendChild(n);null!=r&&pJSDom.push(new pJS(e,a))},window.particlesJS.load=function(e,a,t){var i=new XMLHttpRequest;i.open("GET",a),i.onreadystatechange=function(a){if(4==i.readyState)if(200==i.status){var s=JSON.parse(a.currentTarget.response);window.particlesJS(e,s),t&&t()}else console.log("Error pJS - XMLHttpRequest status: "+i.status),console.log("Error pJS - File config not found")},i.send()}; -------------------------------------------------------------------------------- /source/js/fancybox/jquery.fancybox.min.js: -------------------------------------------------------------------------------- 1 | // ================================================== 2 | // fancyBox v3.0.47 3 | // 4 | // Licensed GPLv3 for open source use 5 | // or fancyBox Commercial License for commercial use 6 | // 7 | // http://fancyapps.com/fancybox/ 8 | // Copyright 2017 fancyApps 9 | // 10 | // ================================================== 11 | !function(t,e,n,o){"use strict";function s(t){var e=t.currentTarget,o=t.data?t.data.options:{},s=t.data?t.data.items:[],i="",a=0;t.preventDefault(),t.stopPropagation(),n(e).attr("data-fancybox")&&(i=n(e).data("fancybox")),i?(s=s.length?s.filter('[data-fancybox="'+i+'"]'):n("[data-fancybox="+i+"]"),a=s.index(e)):s=[e],n.fancybox.open(s,o,a)}if(!n)return o;var i={speed:330,loop:!0,opacity:"auto",margin:[44,0],gutter:30,infobar:!0,buttons:!0,slideShow:!0,fullScreen:!0,thumbs:!0,closeBtn:!0,smallBtn:"auto",image:{preload:"auto",protect:!1},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'',preload:!0,scrolling:"no",css:{}},baseClass:"",slideClass:"",baseTpl:'',spinnerTpl:'
',errorTpl:'

The requested content cannot be loaded.
Please try again later.

',closeTpl:'',parentEl:"body",touch:!0,keyboard:!0,focus:!0,closeClickOutside:!0,beforeLoad:n.noop,afterLoad:n.noop,beforeMove:n.noop,afterMove:n.noop,onComplete:n.noop,onInit:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop},a=n(t),r=n(e),c=0,l=function(t){return t&&t.hasOwnProperty&&t instanceof n},u=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(e){t.setTimeout(e,1e3/60)}}(),d=function(o){var s;return"function"==typeof n&&o instanceof n&&(o=o[0]),s=o.getBoundingClientRect(),s.bottom>0&&s.right>0&&s.left<(t.innerWidth||e.documentElement.clientWidth)&&s.top<(t.innerHeight||e.documentElement.clientHeight)},p=function(t,o,s){var a=this;a.opts=n.extend(!0,{index:s},i,o||{}),a.id=a.opts.id||++c,a.group=[],a.currIndex=parseInt(a.opts.index,10)||0,a.prevIndex=null,a.prevPos=null,a.currPos=0,a.firstRun=null,a.createGroup(t),a.group.length&&(a.$lastFocus=n(e.activeElement).blur(),a.slides={},a.init(t))};n.extend(p.prototype,{init:function(){var t,e,o=this,s=!1;o.scrollTop=r.scrollTop(),o.scrollLeft=r.scrollLeft(),n.fancybox.getInstance()||(t=n("body").width(),n("html").addClass("fancybox-enabled"),n.fancybox.isTouch?(n.each(o.group,function(t,e){if("image"!==e.type&&"iframe"!==e.type)return s=!0,!1}),s&&n("body").css({position:"fixed",width:t,top:o.scrollTop*-1})):(t=n("body").width()-t,t>1&&n('