J#lUOPJ;Vj#I(msyiw!_!8!*~r|1AXz-KMD5FGF_S0z}juE=ksK$FPr
z1&d6=n}oZS!R}eX;|zGLjbmV~Nw`Ru>4Ft5zJp65S7H)gs*T@)msa?=1Ab}a<$epu
zBxfErz6xQZxgsL>$C|!~n1s{XcrJ@W*eDc5Y04!0Oq{=!{~=r{wr|KJd{-N11u66*
z3cwbT>oo~?vuM~+6;iwzEYZded|?eIahvBNf7#%*3
zRS(z-F7h+W&)&suB^9-%Kl-?`PY%!G{OlE(5Vl((wXzQ`hO5n#ur4kQ_eA+8lfw2T
wk(|G@S?Y{yH0NDkLt#Wf;(f|Me07*qoM6N<$f@1()lK=n!
literal 0
HcmV?d00001
diff --git a/index.html b/index.html
index e69de29..076b6d3 100644
--- a/index.html
+++ b/index.html
@@ -0,0 +1,1343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pthoto个人博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/js/src/affix.js b/js/src/affix.js
new file mode 100644
index 0000000..11a3d39
--- /dev/null
+++ b/js/src/affix.js
@@ -0,0 +1,162 @@
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.5
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.5'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
diff --git a/js/src/algolia-search.js b/js/src/algolia-search.js
new file mode 100644
index 0000000..9787e2a
--- /dev/null
+++ b/js/src/algolia-search.js
@@ -0,0 +1,115 @@
+/* global instantsearch: true */
+/*jshint camelcase: false */
+
+$(document).ready(function () {
+ var algoliaSettings = CONFIG.algolia;
+ var isAlgoliaSettingsValid = algoliaSettings.applicationID &&
+ algoliaSettings.apiKey &&
+ algoliaSettings.indexName;
+
+ if (!isAlgoliaSettingsValid) {
+ window.console.error('Algolia Settings are invalid.');
+ return;
+ }
+
+ var search = instantsearch({
+ appId: algoliaSettings.applicationID,
+ apiKey: algoliaSettings.apiKey,
+ indexName: algoliaSettings.indexName,
+ searchFunction: function (helper) {
+ var searchInput = $('#algolia-search-input').find('input');
+
+ if (searchInput.val()) {
+ helper.search();
+ }
+ }
+ });
+
+ // Registering Widgets
+ [
+ instantsearch.widgets.searchBox({
+ container: '#algolia-search-input',
+ placeholder: algoliaSettings.labels.input_placeholder
+ }),
+
+ instantsearch.widgets.hits({
+ container: '#algolia-hits',
+ hitsPerPage: algoliaSettings.hits.per_page || 10,
+ templates: {
+ item: function (data) {
+ var link = data.permalink ? data.permalink : (CONFIG.root + data.path);
+ return (
+ '' +
+ data._highlightResult.title.value +
+ ''
+ );
+ },
+ empty: function (data) {
+ return (
+ ' ' +
+ algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query) +
+ ' '
+ );
+ }
+ },
+ cssClasses: {
+ item: 'algolia-hit-item'
+ }
+ }),
+
+ instantsearch.widgets.stats({
+ container: '#algolia-stats',
+ templates: {
+ body: function (data) {
+ var stats = algoliaSettings.labels.hits_stats
+ .replace(/\$\{hits}/, data.nbHits)
+ .replace(/\$\{time}/, data.processingTimeMS);
+ return (
+ stats +
+ '' +
+ ' ' +
+ '' +
+ ' '
+ );
+ }
+ }
+ }),
+
+ instantsearch.widgets.pagination({
+ container: '#algolia-pagination',
+ scrollTo: false,
+ showFirstLast: false,
+ labels: {
+ first: '',
+ last: '',
+ previous: '',
+ next: ''
+ },
+ cssClasses: {
+ root: 'pagination',
+ item: 'pagination-item',
+ link: 'page-number',
+ active: 'current',
+ disabled: 'disabled-item'
+ }
+ })
+ ].forEach(search.addWidget, search);
+
+ search.start();
+
+ $('.popup-trigger').on('click', function(e) {
+ e.stopPropagation();
+ $('body')
+ .append('')
+ .css('overflow', 'hidden');
+ $('.popup').toggle();
+ $('#algolia-search-input').find('input').focus();
+ });
+
+ $('.popup-btn-close').click(function(){
+ $('.popup').hide();
+ $('.algolia-pop-overlay').remove();
+ $('body').css('overflow', '');
+ });
+
+});
diff --git a/js/src/bootstrap.js b/js/src/bootstrap.js
new file mode 100644
index 0000000..d9c33ed
--- /dev/null
+++ b/js/src/bootstrap.js
@@ -0,0 +1,52 @@
+/* global NexT: true */
+
+$(document).ready(function () {
+
+ $(document).trigger('bootstrap:before');
+
+ NexT.utils.isMobile() && window.FastClick.attach(document.body);
+
+ NexT.utils.lazyLoadPostsImages();
+
+ NexT.utils.registerESCKeyEvent();
+
+ NexT.utils.registerBackToTop();
+
+ // Mobile top menu bar.
+ $('.site-nav-toggle button').on('click', function () {
+ var $siteNav = $('.site-nav');
+ var ON_CLASS_NAME = 'site-nav-on';
+ var isSiteNavOn = $siteNav.hasClass(ON_CLASS_NAME);
+ var animateAction = isSiteNavOn ? 'slideUp' : 'slideDown';
+ var animateCallback = isSiteNavOn ? 'removeClass' : 'addClass';
+
+ $siteNav.stop()[animateAction]('fast', function () {
+ $siteNav[animateCallback](ON_CLASS_NAME);
+ });
+ });
+
+ /**
+ * Register JS handlers by condition option.
+ * Need to add config option in Front-End at 'layout/_partials/head.swig' file.
+ */
+ CONFIG.fancybox && NexT.utils.wrapImageWithFancyBox();
+ CONFIG.tabs && NexT.utils.registerTabsTag();
+
+ NexT.utils.embeddedVideoTransformer();
+ NexT.utils.addActiveClassToMenuItem();
+
+
+ // Define Motion Sequence.
+ NexT.motion.integrator
+ .add(NexT.motion.middleWares.logo)
+ .add(NexT.motion.middleWares.menu)
+ .add(NexT.motion.middleWares.postList)
+ .add(NexT.motion.middleWares.sidebar);
+
+ $(document).trigger('motion:before');
+
+ // Bootstrap Motion.
+ CONFIG.motion.enable && NexT.motion.integrator.bootstrap();
+
+ $(document).trigger('bootstrap:after');
+});
diff --git a/js/src/exturl.js b/js/src/exturl.js
new file mode 100644
index 0000000..b85062a
--- /dev/null
+++ b/js/src/exturl.js
@@ -0,0 +1,15 @@
+/* global NexT: true */
+
+$(document).ready(function () {
+
+ // Create Base64 Object
+ var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}};
+
+ $('.exturl').on('click', function () {
+ var $exturl = $(this).attr('data-url');
+ var $decurl = Base64.decode($exturl);
+ window.open($decurl, '_blank');
+ return false;
+ });
+
+});
diff --git a/js/src/hook-duoshuo.js b/js/src/hook-duoshuo.js
new file mode 100644
index 0000000..ca64dbd
--- /dev/null
+++ b/js/src/hook-duoshuo.js
@@ -0,0 +1,115 @@
+/* global DUOSHUO: true */
+/* jshint camelcase: false */
+
+typeof DUOSHUO !== 'undefined' ?
+ hookTemplate() :
+ ($('#duoshuo-script')[0].onload = hookTemplate);
+
+
+function hookTemplate() {
+ var post = DUOSHUO.templates.post;
+
+ DUOSHUO.templates.post = function (e, t) {
+ var rs = post(e, t);
+ var agent = e.post.agent;
+ var userId = e.post.author.user_id;
+ var admin = '';
+
+ if (userId && (userId == CONFIG.duoshuo.userId)) {
+ admin = '' + CONFIG.duoshuo.author + '';
+ }
+
+ if (agent && /^Mozilla/.test(agent)) {
+ rs = rs.replace(/<\/div>/, admin + getAgentInfo(agent) + ' ');
+ }
+
+ return rs;
+ };
+}
+
+function getAgentInfo(string) {
+ $.ua.set(string);
+
+ var UNKNOWN = 'Unknown';
+ var sua = $.ua;
+ var separator = isMobile() ? '
' : '';
+ var osName = sua.os.name || UNKNOWN;
+ var osVersion = sua.os.version || UNKNOWN;
+ var browserName = sua.browser.name || UNKNOWN;
+ var browserVersion = sua.browser.version || UNKNOWN;
+ var iconMapping = {
+ os: {
+ android : 'android',
+ linux : 'linux',
+ windows : 'windows',
+ ios : 'apple',
+ 'mac os': 'apple',
+ unknown : 'desktop'
+ },
+ browser: {
+ chrome : 'chrome',
+ chromium : 'chrome',
+ firefox : 'firefox',
+ opera : 'opera',
+ safari : 'safari',
+ ie : 'internet-explorer',
+ wechat : 'wechat',
+ qq : 'qq',
+ unknown : 'globe'
+ }
+ };
+ var osIcon = iconMapping.os[osName.toLowerCase()];
+ var browserIcon = iconMapping.browser[getBrowserKey()];
+
+ return separator +
+ '' +
+ '' +
+ osName + ' ' + osVersion +
+ '' + separator +
+ '' +
+ '' +
+ browserName + ' ' + browserVersion +
+ '';
+
+ function getBrowserKey () {
+ var key = browserName.toLowerCase();
+
+ if (key.match(/WeChat/i)) {
+ return 'wechat';
+ }
+
+ if (key.match(/QQBrowser/i)) {
+ return 'qq';
+ }
+
+ return key;
+ }
+
+ function isMobile() {
+ var userAgent = window.navigator.userAgent;
+
+ var isiPad = userAgent.match(/iPad/i) !== null;
+ var mobileUA = [
+ 'iphone', 'android', 'phone', 'mobile',
+ 'wap', 'netfront', 'x11', 'java', 'opera mobi',
+ 'opera mini', 'ucweb', 'windows ce', 'symbian',
+ 'symbianos', 'series', 'webos', 'sony',
+ 'blackberry', 'dopod', 'nokia', 'samsung',
+ 'palmsource', 'xda', 'pieplus', 'meizu',
+ 'midp' ,'cldc' , 'motorola', 'foma',
+ 'docomo', 'up.browser', 'up.link', 'blazer',
+ 'helio', 'hosin', 'huawei', 'novarra',
+ 'coolpad', 'webos', 'techfaith', 'palmsource',
+ 'alcatel', 'amoi', 'ktouch', 'nexian',
+ 'ericsson', 'philips', 'sagem', 'wellcom',
+ 'bunjalloo', 'maui', 'smartphone', 'iemobile',
+ 'spice', 'bird', 'zte-', 'longcos',
+ 'pantech', 'gionee', 'portalmmm', 'jig browser',
+ 'hiptop', 'benq', 'haier', '^lct',
+ '320x320', '240x320', '176x220'
+ ];
+ var pattern = new RegExp(mobileUA.join('|'), 'i');
+
+ return !isiPad && userAgent.match(pattern);
+ }
+}
diff --git a/js/src/js.cookie.js b/js/src/js.cookie.js
new file mode 100644
index 0000000..c6c3975
--- /dev/null
+++ b/js/src/js.cookie.js
@@ -0,0 +1,165 @@
+/*!
+ * JavaScript Cookie v2.1.4
+ * https://github.com/js-cookie/js-cookie
+ *
+ * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
+ * Released under the MIT license
+ */
+;(function (factory) {
+ var registeredInModuleLoader = false;
+ if (typeof define === 'function' && define.amd) {
+ define(factory);
+ registeredInModuleLoader = true;
+ }
+ if (typeof exports === 'object') {
+ module.exports = factory();
+ registeredInModuleLoader = true;
+ }
+ if (!registeredInModuleLoader) {
+ var OldCookies = window.Cookies;
+ var api = window.Cookies = factory();
+ api.noConflict = function () {
+ window.Cookies = OldCookies;
+ return api;
+ };
+ }
+}(function () {
+ function extend () {
+ var i = 0;
+ var result = {};
+ for (; i < arguments.length; i++) {
+ var attributes = arguments[ i ];
+ for (var key in attributes) {
+ result[key] = attributes[key];
+ }
+ }
+ return result;
+ }
+
+ function init (converter) {
+ function api (key, value, attributes) {
+ var result;
+ if (typeof document === 'undefined') {
+ return;
+ }
+
+ // Write
+
+ if (arguments.length > 1) {
+ attributes = extend({
+ path: '/'
+ }, api.defaults, attributes);
+
+ if (typeof attributes.expires === 'number') {
+ var expires = new Date();
+ expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
+ attributes.expires = expires;
+ }
+
+ // We're using "expires" because "max-age" is not supported by IE
+ attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
+
+ try {
+ result = JSON.stringify(value);
+ if (/^[\{\[]/.test(result)) {
+ value = result;
+ }
+ } catch (e) {}
+
+ if (!converter.write) {
+ value = encodeURIComponent(String(value))
+ .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
+ } else {
+ value = converter.write(value, key);
+ }
+
+ key = encodeURIComponent(String(key));
+ key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
+ key = key.replace(/[\(\)]/g, escape);
+
+ var stringifiedAttributes = '';
+
+ for (var attributeName in attributes) {
+ if (!attributes[attributeName]) {
+ continue;
+ }
+ stringifiedAttributes += '; ' + attributeName;
+ if (attributes[attributeName] === true) {
+ continue;
+ }
+ stringifiedAttributes += '=' + attributes[attributeName];
+ }
+ return (document.cookie = key + '=' + value + stringifiedAttributes);
+ }
+
+ // Read
+
+ if (!key) {
+ result = {};
+ }
+
+ // To prevent the for loop in the first place assign an empty array
+ // in case there are no cookies at all. Also prevents odd result when
+ // calling "get()"
+ var cookies = document.cookie ? document.cookie.split('; ') : [];
+ var rdecode = /(%[0-9A-Z]{2})+/g;
+ var i = 0;
+
+ for (; i < cookies.length; i++) {
+ var parts = cookies[i].split('=');
+ var cookie = parts.slice(1).join('=');
+
+ if (cookie.charAt(0) === '"') {
+ cookie = cookie.slice(1, -1);
+ }
+
+ try {
+ var name = parts[0].replace(rdecode, decodeURIComponent);
+ cookie = converter.read ?
+ converter.read(cookie, name) : converter(cookie, name) ||
+ cookie.replace(rdecode, decodeURIComponent);
+
+ if (this.json) {
+ try {
+ cookie = JSON.parse(cookie);
+ } catch (e) {}
+ }
+
+ if (key === name) {
+ result = cookie;
+ break;
+ }
+
+ if (!key) {
+ result[name] = cookie;
+ }
+ } catch (e) {}
+ }
+
+ return result;
+ }
+
+ api.set = api;
+ api.get = function (key) {
+ return api.call(api, key);
+ };
+ api.getJSON = function () {
+ return api.apply({
+ json: true
+ }, [].slice.call(arguments));
+ };
+ api.defaults = {};
+
+ api.remove = function (key, attributes) {
+ api(key, '', extend(attributes, {
+ expires: -1
+ }));
+ };
+
+ api.withConverter = init;
+
+ return api;
+ }
+
+ return init(function () {});
+}));
diff --git a/js/src/motion.js b/js/src/motion.js
new file mode 100644
index 0000000..1129179
--- /dev/null
+++ b/js/src/motion.js
@@ -0,0 +1,352 @@
+/* global NexT: true */
+
+$(document).ready(function () {
+ NexT.motion = {};
+
+ var sidebarToggleLines = {
+ lines: [],
+ push: function (line) {
+ this.lines.push(line);
+ },
+ init: function () {
+ this.lines.forEach(function (line) {
+ line.init();
+ });
+ },
+ arrow: function () {
+ this.lines.forEach(function (line) {
+ line.arrow();
+ });
+ },
+ close: function () {
+ this.lines.forEach(function (line) {
+ line.close();
+ });
+ }
+ };
+
+ function SidebarToggleLine(settings) {
+ this.el = $(settings.el);
+ this.status = $.extend({}, {
+ init: {
+ width: '100%',
+ opacity: 1,
+ left: 0,
+ rotateZ: 0,
+ top: 0
+ }
+ }, settings.status);
+ }
+
+ SidebarToggleLine.prototype.init = function () {
+ this.transform('init');
+ };
+ SidebarToggleLine.prototype.arrow = function () {
+ this.transform('arrow');
+ };
+ SidebarToggleLine.prototype.close = function () {
+ this.transform('close');
+ };
+ SidebarToggleLine.prototype.transform = function (status) {
+ this.el.velocity('stop').velocity(this.status[status]);
+ };
+
+ var sidebarToggleLine1st = new SidebarToggleLine({
+ el: '.sidebar-toggle-line-first',
+ status: {
+ arrow: {width: '50%', rotateZ: '-45deg', top: '2px'},
+ close: {width: '100%', rotateZ: '-45deg', top: '5px'}
+ }
+ });
+ var sidebarToggleLine2nd = new SidebarToggleLine({
+ el: '.sidebar-toggle-line-middle',
+ status: {
+ arrow: {width: '90%'},
+ close: {opacity: 0}
+ }
+ });
+ var sidebarToggleLine3rd = new SidebarToggleLine({
+ el: '.sidebar-toggle-line-last',
+ status: {
+ arrow: {width: '50%', rotateZ: '45deg', top: '-2px'},
+ close: {width: '100%', rotateZ: '45deg', top: '-5px'}
+ }
+ });
+
+ sidebarToggleLines.push(sidebarToggleLine1st);
+ sidebarToggleLines.push(sidebarToggleLine2nd);
+ sidebarToggleLines.push(sidebarToggleLine3rd);
+
+ var SIDEBAR_WIDTH = '320px';
+ var SIDEBAR_DISPLAY_DURATION = 200;
+ var xPos, yPos;
+
+ var sidebarToggleMotion = {
+ toggleEl: $('.sidebar-toggle'),
+ dimmerEl: $('#sidebar-dimmer'),
+ sidebarEl: $('.sidebar'),
+ isSidebarVisible: false,
+ init: function () {
+ this.toggleEl.on('click', this.clickHandler.bind(this));
+ this.dimmerEl.on('click', this.clickHandler.bind(this));
+ this.toggleEl.on('mouseenter', this.mouseEnterHandler.bind(this));
+ this.toggleEl.on('mouseleave', this.mouseLeaveHandler.bind(this));
+ this.sidebarEl.on('touchstart', this.touchstartHandler.bind(this));
+ this.sidebarEl.on('touchend', this.touchendHandler.bind(this));
+ this.sidebarEl.on('touchmove', function(e){e.preventDefault();});
+
+ $(document)
+ .on('sidebar.isShowing', function () {
+ NexT.utils.isDesktop() && $('body').velocity('stop').velocity(
+ {paddingRight: SIDEBAR_WIDTH},
+ SIDEBAR_DISPLAY_DURATION
+ );
+ })
+ .on('sidebar.isHiding', function () {
+ });
+ },
+ clickHandler: function () {
+ this.isSidebarVisible ? this.hideSidebar() : this.showSidebar();
+ this.isSidebarVisible = !this.isSidebarVisible;
+ },
+ mouseEnterHandler: function () {
+ if (this.isSidebarVisible) {
+ return;
+ }
+ sidebarToggleLines.arrow();
+ },
+ mouseLeaveHandler: function () {
+ if (this.isSidebarVisible) {
+ return;
+ }
+ sidebarToggleLines.init();
+ },
+ touchstartHandler: function(e) {
+ xPos = e.originalEvent.touches[0].clientX;
+ yPos = e.originalEvent.touches[0].clientY;
+ },
+ touchendHandler: function(e) {
+ var _xPos = e.originalEvent.changedTouches[0].clientX;
+ var _yPos = e.originalEvent.changedTouches[0].clientY;
+ if (_xPos-xPos > 30 && Math.abs(_yPos-yPos) < 20) {
+ this.clickHandler();
+ }
+ },
+ showSidebar: function () {
+ var self = this;
+
+ sidebarToggleLines.close();
+
+ this.sidebarEl.velocity('stop').velocity({
+ width: SIDEBAR_WIDTH
+ }, {
+ display: 'block',
+ duration: SIDEBAR_DISPLAY_DURATION,
+ begin: function () {
+ $('.sidebar .motion-element').velocity(
+ 'transition.slideRightIn',
+ {
+ stagger: 50,
+ drag: true,
+ complete: function () {
+ self.sidebarEl.trigger('sidebar.motion.complete');
+ }
+ }
+ );
+ },
+ complete: function () {
+ self.sidebarEl.addClass('sidebar-active');
+ self.sidebarEl.trigger('sidebar.didShow');
+ }
+ }
+ );
+
+ this.sidebarEl.trigger('sidebar.isShowing');
+ },
+ hideSidebar: function () {
+ NexT.utils.isDesktop() && $('body').velocity('stop').velocity({paddingRight: 0});
+ this.sidebarEl.find('.motion-element').velocity('stop').css('display', 'none');
+ this.sidebarEl.velocity('stop').velocity({width: 0}, {display: 'none'});
+
+ sidebarToggleLines.init();
+
+ this.sidebarEl.removeClass('sidebar-active');
+ this.sidebarEl.trigger('sidebar.isHiding');
+
+ // Prevent adding TOC to Overview if Overview was selected when close & open sidebar.
+ if (!!$('.post-toc-wrap')) {
+ if ($('.site-overview-wrap').css('display') === 'block') {
+ $('.post-toc-wrap').removeClass('motion-element');
+ } else {
+ $('.post-toc-wrap').addClass('motion-element');
+ }
+ }
+ }
+ };
+ sidebarToggleMotion.init();
+
+ NexT.motion.integrator = {
+ queue: [],
+ cursor: -1,
+ add: function (fn) {
+ this.queue.push(fn);
+ return this;
+ },
+ next: function () {
+ this.cursor++;
+ var fn = this.queue[this.cursor];
+ $.isFunction(fn) && fn(NexT.motion.integrator);
+ },
+ bootstrap: function () {
+ this.next();
+ }
+ };
+
+ NexT.motion.middleWares = {
+ logo: function (integrator) {
+ var sequence = [];
+ var $brand = $('.brand');
+ var $title = $('.site-title');
+ var $subtitle = $('.site-subtitle');
+ var $logoLineTop = $('.logo-line-before i');
+ var $logoLineBottom = $('.logo-line-after i');
+
+ $brand.size() > 0 && sequence.push({
+ e: $brand,
+ p: {opacity: 1},
+ o: {duration: 200}
+ });
+
+ NexT.utils.isMist() && hasElement([$logoLineTop, $logoLineBottom]) &&
+ sequence.push(
+ getMistLineSettings($logoLineTop, '100%'),
+ getMistLineSettings($logoLineBottom, '-100%')
+ );
+
+ hasElement($title) && sequence.push({
+ e: $title,
+ p: {opacity: 1, top: 0},
+ o: { duration: 200 }
+ });
+
+ hasElement($subtitle) && sequence.push({
+ e: $subtitle,
+ p: {opacity: 1, top: 0},
+ o: {duration: 200}
+ });
+
+ if (CONFIG.motion.async) {
+ integrator.next();
+ }
+
+ if (sequence.length > 0) {
+ sequence[sequence.length - 1].o.complete = function () {
+ integrator.next();
+ };
+ $.Velocity.RunSequence(sequence);
+ } else {
+ integrator.next();
+ }
+
+
+ function getMistLineSettings (element, translateX) {
+ return {
+ e: $(element),
+ p: {translateX: translateX},
+ o: {
+ duration: 500,
+ sequenceQueue: false
+ }
+ };
+ }
+
+ /**
+ * Check if $elements exist.
+ * @param {jQuery|Array} $elements
+ * @returns {boolean}
+ */
+ function hasElement ($elements) {
+ $elements = Array.isArray($elements) ? $elements : [$elements];
+ return $elements.every(function ($element) {
+ return $.isFunction($element.size) && $element.size() > 0;
+ });
+ }
+ },
+
+ menu: function (integrator) {
+
+ if (CONFIG.motion.async) {
+ integrator.next();
+ }
+
+ $('.menu-item').velocity('transition.slideDownIn', {
+ display: null,
+ duration: 200,
+ complete: function () {
+ integrator.next();
+ }
+ });
+ },
+
+ postList: function (integrator) {
+ //var $post = $('.post');
+ var $postBlock = $('.post-block, .pagination, .comments');
+ var $postBlockTransition = CONFIG.motion.transition.post_block;
+ var $postHeader = $('.post-header');
+ var $postHeaderTransition = CONFIG.motion.transition.post_header;
+ var $postBody = $('.post-body');
+ var $postBodyTransition = CONFIG.motion.transition.post_body;
+ var $collHeader = $('.collection-title, .archive-year');
+ var $collHeaderTransition = CONFIG.motion.transition.coll_header;
+ var $sidebarAffix = $('.sidebar-inner');
+ var $sidebarAffixTransition = CONFIG.motion.transition.sidebar;
+ var hasPost = $postBlock.size() > 0;
+
+ hasPost ? postMotion() : integrator.next();
+
+ if (CONFIG.motion.async) {
+ integrator.next();
+ }
+
+ function postMotion () {
+ var postMotionOptions = window.postMotionOptions || {
+ stagger: 100,
+ drag: true
+ };
+ postMotionOptions.complete = function () {
+ // After motion complete need to remove transform from sidebar to let affix work on Pisces | Gemini.
+ if (CONFIG.motion.transition.sidebar && (NexT.utils.isPisces() || NexT.utils.isGemini())) {
+ $sidebarAffix.css({ 'transform': 'initial' });
+ }
+ integrator.next();
+ };
+
+ //$post.velocity('transition.slideDownIn', postMotionOptions);
+ if (CONFIG.motion.transition.post_block) {
+ $postBlock.velocity('transition.' + $postBlockTransition, postMotionOptions);
+ }
+ if (CONFIG.motion.transition.post_header) {
+ $postHeader.velocity('transition.' + $postHeaderTransition, postMotionOptions);
+ }
+ if (CONFIG.motion.transition.post_body) {
+ $postBody.velocity('transition.' + $postBodyTransition, postMotionOptions);
+ }
+ if (CONFIG.motion.transition.coll_header) {
+ $collHeader.velocity('transition.' + $collHeaderTransition, postMotionOptions);
+ }
+ // Only for Pisces | Gemini.
+ if (CONFIG.motion.transition.sidebar && (NexT.utils.isPisces() || NexT.utils.isGemini())) {
+ $sidebarAffix.velocity('transition.' + $sidebarAffixTransition, postMotionOptions);
+ }
+ }
+ },
+
+ sidebar: function (integrator) {
+ if (CONFIG.sidebar.display === 'always') {
+ NexT.utils.displaySidebar();
+ }
+ integrator.next();
+ }
+ };
+
+});
diff --git a/js/src/post-details.js b/js/src/post-details.js
new file mode 100644
index 0000000..a82bcc2
--- /dev/null
+++ b/js/src/post-details.js
@@ -0,0 +1,99 @@
+/* global NexT: true */
+
+$(document).ready(function () {
+
+ initScrollSpy();
+
+ function initScrollSpy () {
+ var tocSelector = '.post-toc';
+ var $tocElement = $(tocSelector);
+ var activeCurrentSelector = '.active-current';
+
+ $tocElement
+ .on('activate.bs.scrollspy', function () {
+ var $currentActiveElement = $(tocSelector + ' .active').last();
+
+ removeCurrentActiveClass();
+ $currentActiveElement.addClass('active-current');
+
+ // Scrolling to center active TOC element if TOC content is taller then viewport.
+ $tocElement.scrollTop($currentActiveElement.offset().top - $tocElement.offset().top + $tocElement.scrollTop() - ($tocElement.height() / 2));
+ })
+ .on('clear.bs.scrollspy', removeCurrentActiveClass);
+
+ $('body').scrollspy({ target: tocSelector });
+
+ function removeCurrentActiveClass () {
+ $(tocSelector + ' ' + activeCurrentSelector)
+ .removeClass(activeCurrentSelector.substring(1));
+ }
+ }
+
+});
+
+$(document).ready(function () {
+ var html = $('html');
+ var TAB_ANIMATE_DURATION = 200;
+ var hasVelocity = $.isFunction(html.velocity);
+
+ $('.sidebar-nav li').on('click', function () {
+ var item = $(this);
+ var activeTabClassName = 'sidebar-nav-active';
+ var activePanelClassName = 'sidebar-panel-active';
+ if (item.hasClass(activeTabClassName)) {
+ return;
+ }
+
+ var currentTarget = $('.' + activePanelClassName);
+ var target = $('.' + item.data('target'));
+
+ hasVelocity ?
+ currentTarget.velocity('transition.slideUpOut', TAB_ANIMATE_DURATION, function () {
+ target
+ .velocity('stop')
+ .velocity('transition.slideDownIn', TAB_ANIMATE_DURATION)
+ .addClass(activePanelClassName);
+ }) :
+ currentTarget.animate({ opacity: 0 }, TAB_ANIMATE_DURATION, function () {
+ currentTarget.hide();
+ target
+ .stop()
+ .css({'opacity': 0, 'display': 'block'})
+ .animate({ opacity: 1 }, TAB_ANIMATE_DURATION, function () {
+ currentTarget.removeClass(activePanelClassName);
+ target.addClass(activePanelClassName);
+ });
+ });
+
+ item.siblings().removeClass(activeTabClassName);
+ item.addClass(activeTabClassName);
+ });
+
+ // TOC item animation navigate & prevent #item selector in adress bar.
+ $('.post-toc a').on('click', function (e) {
+ e.preventDefault();
+ var targetSelector = NexT.utils.escapeSelector(this.getAttribute('href'));
+ var offset = $(targetSelector).offset().top;
+
+ hasVelocity ?
+ html.velocity('stop').velocity('scroll', {
+ offset: offset + 'px',
+ mobileHA: false
+ }) :
+ $('html, body').stop().animate({
+ scrollTop: offset
+ }, 500);
+ });
+
+ // Expand sidebar on post detail page by default, when post has a toc.
+ var $tocContent = $('.post-toc-content');
+ var isSidebarCouldDisplay = CONFIG.sidebar.display === 'post' ||
+ CONFIG.sidebar.display === 'always';
+ var hasTOC = $tocContent.length > 0 && $tocContent.html().trim().length > 0;
+ if (isSidebarCouldDisplay && hasTOC) {
+ CONFIG.motion.enable ?
+ (NexT.motion.middleWares.sidebar = function () {
+ NexT.utils.displaySidebar();
+ }) : NexT.utils.displaySidebar();
+ }
+});
diff --git a/js/src/schemes/pisces.js b/js/src/schemes/pisces.js
new file mode 100644
index 0000000..0e6e426
--- /dev/null
+++ b/js/src/schemes/pisces.js
@@ -0,0 +1,57 @@
+$(document).ready(function () {
+
+ var sidebarInner = $('.sidebar-inner');
+
+ initAffix();
+ resizeListener();
+
+ function initAffix () {
+ var headerOffset = getHeaderOffset(),
+ footerOffset = getFooterOffset(),
+ sidebarHeight = $('#sidebar').height() + NexT.utils.getSidebarb2tHeight(),
+ contentHeight = $('#content').height();
+
+ // Not affix if sidebar taller then content (to prevent bottom jumping).
+ if (headerOffset + sidebarHeight < contentHeight) {
+ sidebarInner.affix({
+ offset: {
+ top: headerOffset - CONFIG.sidebar.offset,
+ bottom: footerOffset
+ }
+ });
+ }
+
+ setSidebarMarginTop(headerOffset).css({ 'margin-left': 'initial' });
+ }
+
+ function resizeListener () {
+ var mql = window.matchMedia('(min-width: 991px)');
+ mql.addListener(function(e){
+ if(e.matches){
+ recalculateAffixPosition();
+ }
+ });
+ }
+
+ function getHeaderOffset () {
+ return $('.header-inner').height() + CONFIG.sidebar.offset;
+ }
+
+ function getFooterOffset () {
+ var footerInner = $('.footer-inner'),
+ footerMargin = footerInner.outerHeight(true) - footerInner.outerHeight(),
+ footerOffset = footerInner.outerHeight(true) + footerMargin;
+ return footerOffset;
+ }
+
+ function setSidebarMarginTop (headerOffset) {
+ return $('#sidebar').css({ 'margin-top': headerOffset });
+ }
+
+ function recalculateAffixPosition () {
+ $(window).off('.affix');
+ sidebarInner.removeData('bs.affix').removeClass('affix affix-top affix-bottom');
+ initAffix();
+ }
+
+});
diff --git a/js/src/scroll-cookie.js b/js/src/scroll-cookie.js
new file mode 100644
index 0000000..34ff200
--- /dev/null
+++ b/js/src/scroll-cookie.js
@@ -0,0 +1,23 @@
+$(document).ready(function() {
+
+ // Set relative link path (without domain)
+ var rpath = window.location.href.replace(window.location.origin, "");
+
+ // Write position in cookie
+ var timeout;
+ $(window).on("scroll", function() {
+ clearTimeout(timeout);
+ timeout = setTimeout(function () {
+ Cookies.set("scroll-cookie", ($(window).scrollTop() + "|" + rpath), { expires: 365, path: '' });
+ }, 250);
+ });
+
+ // Read position from cookie
+ if (Cookies.get("scroll-cookie") !== undefined) {
+ var cvalues = Cookies.get("scroll-cookie").split('|');
+ if (cvalues[1] == rpath) {
+ $(window).scrollTop(cvalues[0]);
+ }
+ }
+
+});
diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js
new file mode 100644
index 0000000..f5c5c6c
--- /dev/null
+++ b/js/src/scrollspy.js
@@ -0,0 +1,182 @@
+/* ========================================================================
+* Bootstrap: scrollspy.js v3.3.2
+* http://getbootstrap.com/javascript/#scrollspy
+* ========================================================================
+* Copyright 2011-2015 Twitter, Inc.
+* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+* ======================================================================== */
+
+/**
+ * Custom by iissnan
+ *
+ * - Add a `clear.bs.scrollspy` event.
+ * - Esacpe targets selector.
+ */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.2'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(NexT.utils.escapeSelector(href)) // Need to escape selector.
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+
+
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ $(this.selector).trigger('clear.bs.scrollspy') // Add a custom event.
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
diff --git a/js/src/utils.js b/js/src/utils.js
new file mode 100644
index 0000000..c1621ef
--- /dev/null
+++ b/js/src/utils.js
@@ -0,0 +1,339 @@
+/* global NexT: true */
+
+NexT.utils = NexT.$u = {
+ /**
+ * Wrap images with fancybox support.
+ */
+ wrapImageWithFancyBox: function () {
+ $('.content img')
+ .not('[hidden]')
+ .not('.group-picture img, .post-gallery img')
+ .each(function () {
+ var $image = $(this);
+ var imageTitle = $image.attr('title');
+ var $imageWrapLink = $image.parent('a');
+
+ if ($imageWrapLink.size() < 1) {
+ var imageLink = ($image.attr('data-original')) ? this.getAttribute('data-original') : this.getAttribute('src');
+ $imageWrapLink = $image.wrap('').parent('a');
+ }
+
+ $imageWrapLink.addClass('fancybox fancybox.image');
+ $imageWrapLink.attr('rel', 'group');
+
+ if (imageTitle) {
+ $imageWrapLink.append(' ' + imageTitle + ' ');
+
+ //make sure img title tag will show correctly in fancybox
+ $imageWrapLink.attr('title', imageTitle);
+ }
+ });
+
+ $('.fancybox').fancybox({
+ helpers: {
+ overlay: {
+ locked: false
+ }
+ }
+ });
+ },
+
+ lazyLoadPostsImages: function () {
+ $('#posts').find('img').lazyload({
+ //placeholder: '/images/loading.gif',
+ effect: 'fadeIn',
+ threshold : 0
+ });
+ },
+
+ /**
+ * Tabs tag listener (without twitter bootstrap).
+ */
+ registerTabsTag: function () {
+ var tNav = '.tabs ul.nav-tabs ';
+
+ // Binding `nav-tabs` & `tab-content` by real time permalink changing.
+ $(function() {
+ $(window).bind('hashchange', function() {
+ var tHash = location.hash;
+ if (tHash !== '') {
+ $(tNav + 'li:has(a[href="' + tHash + '"])').addClass('active').siblings().removeClass('active');
+ $(tHash).addClass('active').siblings().removeClass('active');
+ }
+ }).trigger('hashchange');
+ });
+
+ $(tNav + '.tab').on('click', function (href) {
+ href.preventDefault();
+ // Prevent selected tab to select again.
+ if(!$(this).hasClass('active')){
+
+ // Add & Remove active class on `nav-tabs` & `tab-content`.
+ $(this).addClass('active').siblings().removeClass('active');
+ var tActive = $(this).find('a').attr('href');
+ $(tActive).addClass('active').siblings().removeClass('active');
+
+ // Clear location hash in browser if #permalink exists.
+ if (location.hash !== '') {
+ history.pushState('', document.title, window.location.pathname + window.location.search);
+ }
+ }
+ });
+
+ },
+
+ registerESCKeyEvent: function () {
+ $(document).on('keyup', function (event) {
+ var shouldDismissSearchPopup = event.which === 27 &&
+ $('.search-popup').is(':visible');
+ if (shouldDismissSearchPopup) {
+ $('.search-popup').hide();
+ $('.search-popup-overlay').remove();
+ $('body').css('overflow', '');
+ }
+ });
+ },
+
+ registerBackToTop: function () {
+ var THRESHOLD = 50;
+ var $top = $('.back-to-top');
+
+ $(window).on('scroll', function () {
+ $top.toggleClass('back-to-top-on', window.pageYOffset > THRESHOLD);
+
+ var scrollTop = $(window).scrollTop();
+ var contentVisibilityHeight = NexT.utils.getContentVisibilityHeight();
+ var scrollPercent = (scrollTop) / (contentVisibilityHeight);
+ var scrollPercentRounded = Math.round(scrollPercent*100);
+ var scrollPercentMaxed = (scrollPercentRounded > 100) ? 100 : scrollPercentRounded;
+ $('#scrollpercent>span').html(scrollPercentMaxed);
+ });
+
+ $top.on('click', function () {
+ $('body').velocity('scroll');
+ });
+ },
+
+ /**
+ * Transform embedded video to support responsive layout.
+ * @see http://toddmotto.com/fluid-and-responsive-youtube-and-vimeo-videos-with-fluidvids-js/
+ */
+ embeddedVideoTransformer: function () {
+ var $iframes = $('iframe');
+
+ // Supported Players. Extend this if you need more players.
+ var SUPPORTED_PLAYERS = [
+ 'www.youtube.com',
+ 'player.vimeo.com',
+ 'player.youku.com',
+ 'music.163.com',
+ 'www.tudou.com'
+ ];
+ var pattern = new RegExp( SUPPORTED_PLAYERS.join('|') );
+
+ $iframes.each(function () {
+ var iframe = this;
+ var $iframe = $(this);
+ var oldDimension = getDimension($iframe);
+ var newDimension;
+
+ if (this.src.search(pattern) > 0) {
+
+ // Calculate the video ratio based on the iframe's w/h dimensions
+ var videoRatio = getAspectRadio(oldDimension.width, oldDimension.height);
+
+ // Replace the iframe's dimensions and position the iframe absolute
+ // This is the trick to emulate the video ratio
+ $iframe.width('100%').height('100%')
+ .css({
+ position: 'absolute',
+ top: '0',
+ left: '0'
+ });
+
+
+ // Wrap the iframe in a new which uses a dynamically fetched padding-top property
+ // based on the video's w/h dimensions
+ var wrap = document.createElement('div');
+ wrap.className = 'fluid-vids';
+ wrap.style.position = 'relative';
+ wrap.style.marginBottom = '20px';
+ wrap.style.width = '100%';
+ wrap.style.paddingTop = videoRatio + '%';
+ // Fix for appear inside tabs tag.
+ (wrap.style.paddingTop === '') && (wrap.style.paddingTop = '50%');
+
+ // Add the iframe inside our newly created
+ var iframeParent = iframe.parentNode;
+ iframeParent.insertBefore(wrap, iframe);
+ wrap.appendChild(iframe);
+
+ // Additional adjustments for 163 Music
+ if (this.src.search('music.163.com') > 0) {
+ newDimension = getDimension($iframe);
+ var shouldRecalculateAspect = newDimension.width > oldDimension.width ||
+ newDimension.height < oldDimension.height;
+
+ // 163 Music Player has a fixed height, so we need to reset the aspect radio
+ if (shouldRecalculateAspect) {
+ wrap.style.paddingTop = getAspectRadio(newDimension.width, oldDimension.height) + '%';
+ }
+ }
+ }
+ });
+
+ function getDimension($element) {
+ return {
+ width: $element.width(),
+ height: $element.height()
+ };
+ }
+
+ function getAspectRadio(width, height) {
+ return height / width * 100;
+ }
+ },
+
+ /**
+ * Add `menu-item-active` class name to menu item
+ * via comparing location.path with menu item's href.
+ */
+ addActiveClassToMenuItem: function () {
+ var path = window.location.pathname;
+ path = path === '/' ? path : path.substring(0, path.length - 1);
+ $('.menu-item a[href^="' + path + '"]:first').parent().addClass('menu-item-active');
+ },
+
+ hasMobileUA: function () {
+ var nav = window.navigator;
+ var ua = nav.userAgent;
+ var pa = /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g;
+
+ return pa.test(ua);
+ },
+
+ isTablet: function () {
+ return window.screen.width < 992 && window.screen.width > 767 && this.hasMobileUA();
+ },
+
+ isMobile: function () {
+ return window.screen.width < 767 && this.hasMobileUA();
+ },
+
+ isDesktop: function () {
+ return !this.isTablet() && !this.isMobile();
+ },
+
+ /**
+ * Escape meta symbols in jQuery selectors.
+ *
+ * @param selector
+ * @returns {string|void|XML|*}
+ */
+ escapeSelector: function (selector) {
+ return selector.replace(/[!"$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, '\\$&');
+ },
+
+ displaySidebar: function () {
+ if (!this.isDesktop() || this.isPisces() || this.isGemini()) {
+ return;
+ }
+ $('.sidebar-toggle').trigger('click');
+ },
+
+ isMist: function () {
+ return CONFIG.scheme === 'Mist';
+ },
+
+ isPisces: function () {
+ return CONFIG.scheme === 'Pisces';
+ },
+
+ isGemini: function () {
+ return CONFIG.scheme === 'Gemini';
+ },
+
+ getScrollbarWidth: function () {
+ var $div = $(' ').addClass('scrollbar-measure').prependTo('body');
+ var div = $div[0];
+ var scrollbarWidth = div.offsetWidth - div.clientWidth;
+
+ $div.remove();
+
+ return scrollbarWidth;
+ },
+
+ getContentVisibilityHeight: function () {
+ var docHeight = $('#content').height(),
+ winHeight = $(window).height(),
+ contentVisibilityHeight = (docHeight > winHeight) ? (docHeight - winHeight) : ($(document).height() - winHeight);
+ return contentVisibilityHeight;
+ },
+
+ getSidebarb2tHeight: function () {
+ //var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? document.getElementsByClassName('back-to-top')[0].clientHeight : 0;
+ var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? $('.back-to-top').height() : 0;
+ //var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? 24 : 0;
+ return sidebarb2tHeight;
+ },
+
+ getSidebarSchemePadding: function () {
+ var sidebarNavHeight = ($('.sidebar-nav').css('display') == 'block') ? $('.sidebar-nav').outerHeight(true) : 0,
+ sidebarInner = $('.sidebar-inner'),
+ sidebarPadding = sidebarInner.innerWidth() - sidebarInner.width(),
+ sidebarSchemePadding = this.isPisces() || this.isGemini() ?
+ ((sidebarPadding * 2) + sidebarNavHeight + (CONFIG.sidebar.offset * 2) + this.getSidebarb2tHeight()) :
+ ((sidebarPadding * 2) + (sidebarNavHeight / 2));
+ return sidebarSchemePadding;
+ }
+
+ /**
+ * Affix behaviour for Sidebar.
+ *
+ * @returns {Boolean}
+ */
+// needAffix: function () {
+// return this.isPisces() || this.isGemini();
+// }
+};
+
+$(document).ready(function () {
+
+ initSidebarDimension();
+
+ /**
+ * Init Sidebar & TOC inner dimensions on all pages and for all schemes.
+ * Need for Sidebar/TOC inner scrolling if content taller then viewport.
+ */
+ function initSidebarDimension () {
+ var updateSidebarHeightTimer;
+
+ $(window).on('resize', function () {
+ updateSidebarHeightTimer && clearTimeout(updateSidebarHeightTimer);
+
+ updateSidebarHeightTimer = setTimeout(function () {
+ var sidebarWrapperHeight = document.body.clientHeight - NexT.utils.getSidebarSchemePadding();
+
+ updateSidebarHeight(sidebarWrapperHeight);
+ }, 0);
+ });
+
+ // Initialize Sidebar & TOC Width.
+ var scrollbarWidth = NexT.utils.getScrollbarWidth();
+ if ($('.site-overview-wrap').height() > (document.body.clientHeight - NexT.utils.getSidebarSchemePadding())) {
+ $('.site-overview').css('width', 'calc(100% + ' + scrollbarWidth + 'px)');
+ }
+ if ($('.post-toc-wrap').height() > (document.body.clientHeight - NexT.utils.getSidebarSchemePadding())) {
+ $('.post-toc').css('width', 'calc(100% + ' + scrollbarWidth + 'px)');
+ }
+
+ // Initialize Sidebar & TOC Height.
+ updateSidebarHeight(document.body.clientHeight - NexT.utils.getSidebarSchemePadding());
+ }
+
+ function updateSidebarHeight (height) {
+ height = height || 'auto';
+ $('.site-overview, .post-toc').css('max-height', height);
+ }
+
+});
diff --git a/lib/Han/dist/font/han-space.otf b/lib/Han/dist/font/han-space.otf
new file mode 100644
index 0000000000000000000000000000000000000000..845b1bc2898c9924eff3e1b0bd92b6178b4908db
GIT binary patch
literal 1748
zcmZ`)OKclO82)G1kGN``&?+b(sD?I36;R_Oa+~0&hq!4Y hC@kkF92qeUb0|z9ojRX?nL_i=e6(>MK1@%-|TK4MP!_r`TlRd
z|1q;Wn{1(wr5L?VGWBH6o#SioKJ_9|*d}75+1Zx|D}OKE117YEa$RZA8!Sx}`VRK>
zs;X4z?)YuskI+w5L4+T$B=FDZ{nfgCwfhGkihP0LSY5f=pjb{2t{@GiuJ+u_Uq}1}
zBDvNun|9}88btmA*14A!sXx2-;Q7nlqxVS;fhPLCbz)Y`KNfHQBxbfL-NGc3BrG)e
z$U~hW+F+ZWx#@4fTl0r5BGeIsA+xX9OBALq=>tiFJ>}0#Lmj^gaaas~b`QLNSyT(=hq8Zj`HLVSa4td|q8#t|`_)BAFaWi&IH^^vQrPs#a5ntG}L`<&b&O
zs%e)^S3Jo-rHOEPb(R^QKz1MM}-YB33lhu(@q16}7HdOI)#SOD`>Z62r9hvf5107%9{w
zl`42@CK(tfz!>N&o^67eCLK(fs$dE<51%PIPkDGP(lXVcwP=76cnV3(X_})+sAhn6
z)hGX>FT&eGW?f=)x3raG!vLQJ92P)iMwOL&(P
zl=Av84Z#|L-&q=`BKj0%aT%t8W>Dw;mF5sjMRajW95t(mFKXw=Bu>Z1xrmhvtOi}f
zijH%sg6E!38EAW#8Z^GA?;~u(Q`+DaJO$O;iG{sz*fxG5UJ2*C8^wT^u*y(3u{-e%
z@Ov@19o}0Hu1FDj1#=9yOK3#fo_%Y-QKk^im8c6p|NC-?c&FpZebm*t-}ybr=SK-5
zcRs{P|4(BSl87-D$8E}(mgT>#f*Emp$UVl~IN=9TJ%*XD$?quU@>g;I6jT-Mi}yWBBPSG}IXU5mz@KjRNS
nk3U?Ae;Ieb5q~Z5YemEtoz3At5Wb}HA2{3-L=v8l=-cgIj2C6J
literal 0
HcmV?d00001
diff --git a/lib/Han/dist/font/han-space.woff b/lib/Han/dist/font/han-space.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6ccc84f8ea3543926a1a1e78b5c50a56c0dc8025
GIT binary patch
literal 1452
zcmZvbdown3C;
zDMTc#%d#solk4eV249gK88qL!g0HhnV>uu^1?sonu2P(`XL%%S6
zupex9^*BO;EE6(EC>!9L}GI4oum04OcU4ntX^Bzo645JKhv
zV|^$?!AcNMsG>Y4TLdyEXaiLJFq*HXsqm@c0_p8
zW!P^K^z4KpZrlN+*b=Y2$4(t?TIuqOySagFF9IA4^Go-XaQEbIb00KI(V`UGbsxct
zZpq5aAKLp%XGSX$G;F4mQ^Vh&yk%>X*4k%wnkx|lW=
zy+?{C&MsKZdHoq;Au@?dnCdw3!ur6PPq|^mIDwmjBrK|vFCf}W$uwCGHdAC{
zNhWF>s^3Qaoo~=0VD~)64CU8+rZ5|Pc}K5w^!bRxyrb_aiY4RCmA$<4(>`NeUq4~d
ztLyI3_)B$vwQ#$lg&{VSC5hAu0Vc}`OKm+W<)1QLuT$)*I2la}(eUw)7o`%U&`PJX
zRbn;Lz5a7yJb}%!E@hg`VrmCWi*v6rvzF3sTNYEqv<
z0Tx7d07HqgjmSnU;sI(I*lgz5>+-4&=`*R!N@VgqpD$CPSXNr#E$oyQ`0f#<(oW@k
zekA2d$6B)1kyK>Ed{SU~gDDmptc!b29wqmx0-biXPn&fZ40bX@7fnOs<`4^bS^O?E
zir9}3oMGtF(P)D(m&USe)eDn+^g
zFJqMZR(|yI&^{5D6UiA&`v&q~2DaBu(Fy%Klsxa11eLZtB0F!2J8wW)`O3}wdjwlOCr-N
zFMNnRJxJ+g8?^u0^2Xd!n6>=*)CRlx=>hJQaI;`Vo#>mm!WGF(es#JfD^V=TagK1V
z{AoG#*v+@`tksDqTINo%-`}nQ&iy3gy|+EC4)8K&TBfyn8V8DEa*IX-qocZ<4DMR|
z+u>Qv>&Dci7x`k^_0BZ;%}mu@7VJM8WAK~Pm|y)w3vgW<(faO<3-a1okkh;-;7vk#y
KIOv6tgZ}`kqe+wi
literal 0
HcmV?d00001
diff --git a/lib/Han/dist/font/han.otf b/lib/Han/dist/font/han.otf
new file mode 100644
index 0000000000000000000000000000000000000000..2ce2f46ca183a46f1b06517b1a2a8f96bcaab1b8
GIT binary patch
literal 26416
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
E2Tw{-o0zK2^O2nx$HD*Ub4
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 | |