[init] initial commit
This commit is contained in:
6
js/anchor.min.js
vendored
Normal file
6
js/anchor.min.js
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* AnchorJS - v1.1.1 - 2015-05-23
|
||||
* https://github.com/bryanbraun/anchorjs
|
||||
* Copyright (c) 2015 Bryan Braun; Licensed MIT
|
||||
*/
|
||||
function AnchorJS(A){"use strict";this.options=A||{},this._applyRemainingDefaultOptions=function(A){this.options.icon=this.options.hasOwnProperty("icon")?A.icon:"",this.options.visible=this.options.hasOwnProperty("visible")?A.visible:"hover",this.options.placement=this.options.hasOwnProperty("placement")?A.placement:"right",this.options.class=this.options.hasOwnProperty("class")?A.class:""},this._applyRemainingDefaultOptions(A),this.add=function(A){var e,t,o,n,i,s,a,l,c,r,h,g,B,Q;if(this._applyRemainingDefaultOptions(this.options),A){if("string"!=typeof A)throw new Error("The selector provided to AnchorJS was invalid.")}else A="h1, h2, h3, h4, h5, h6";if(e=document.querySelectorAll(A),0===e.length)return!1;for(this._addBaselineStyles(),t=document.querySelectorAll("[id]"),o=[].map.call(t,function(A){return A.id}),i=0;i<e.length;i++){if(e[i].hasAttribute("id"))n=e[i].getAttribute("id");else{s=e[i].textContent,a=s.replace(/[^\w\s-]/gi,"").replace(/\s+/g,"-").replace(/-{2,}/g,"-").substring(0,64).replace(/^-+|-+$/gm,"").toLowerCase(),r=a,c=0;do void 0!==l&&(r=a+"-"+c),l=o.indexOf(r),c+=1;while(-1!==l);l=void 0,o.push(r),e[i].setAttribute("id",r),n=r}h=n.replace(/-/g," "),g='<a class="anchorjs-link '+this.options.class+'" href="#'+n+'" aria-label="Anchor link for: '+h+'" data-anchorjs-icon="'+this.options.icon+'"></a>',B=document.createElement("div"),B.innerHTML=g,Q=B.childNodes,"always"===this.options.visible&&(Q[0].style.opacity="1"),""===this.options.icon&&(Q[0].style.fontFamily="anchorjs-icons",Q[0].style.fontStyle="normal",Q[0].style.fontVariant="normal",Q[0].style.fontWeight="normal"),"left"===this.options.placement?(Q[0].style.position="absolute",Q[0].style.marginLeft="-1em",Q[0].style.paddingRight="0.5em",e[i].insertBefore(Q[0],e[i].firstChild)):(Q[0].style.paddingLeft="0.375em",e[i].appendChild(Q[0]))}return this},this.remove=function(A){for(var e,t=document.querySelectorAll(A),o=0;o<t.length;o++)e=t[o].querySelector(".anchorjs-link"),e&&t[o].removeChild(e);return this},this._addBaselineStyles=function(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style"),t=" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",o=" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",n=' @font-face { font-family: "anchorjs-icons"; font-style: normal; font-weight: normal; src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"); }',i=" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }";e.className="anchorjs",e.appendChild(document.createTextNode("")),A=document.head.querySelector('[rel="stylesheet"], style'),void 0===A?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(t,e.sheet.cssRules.length),e.sheet.insertRule(o,e.sheet.cssRules.length),e.sheet.insertRule(i,e.sheet.cssRules.length),e.sheet.insertRule(n,e.sheet.cssRules.length)}}}var anchors=new AnchorJS;
|
2
js/animatescroll.min.js
vendored
Normal file
2
js/animatescroll.min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/* Coded by Ramswaroop */
|
||||
(function(e){e.easing["jswing"]=e.easing["swing"];e.extend(e.easing,{def:"easeOutQuad",swing:function(t,n,r,i,s){return e.easing[e.easing.def](t,n,r,i,s)},easeInQuad:function(e,t,n,r,i){return r*(t/=i)*t+n},easeOutQuad:function(e,t,n,r,i){return-r*(t/=i)*(t-2)+n},easeInOutQuad:function(e,t,n,r,i){if((t/=i/2)<1)return r/2*t*t+n;return-r/2*(--t*(t-2)-1)+n},easeInCubic:function(e,t,n,r,i){return r*(t/=i)*t*t+n},easeOutCubic:function(e,t,n,r,i){return r*((t=t/i-1)*t*t+1)+n},easeInOutCubic:function(e,t,n,r,i){if((t/=i/2)<1)return r/2*t*t*t+n;return r/2*((t-=2)*t*t+2)+n},easeInQuart:function(e,t,n,r,i){return r*(t/=i)*t*t*t+n},easeOutQuart:function(e,t,n,r,i){return-r*((t=t/i-1)*t*t*t-1)+n},easeInOutQuart:function(e,t,n,r,i){if((t/=i/2)<1)return r/2*t*t*t*t+n;return-r/2*((t-=2)*t*t*t-2)+n},easeInQuint:function(e,t,n,r,i){return r*(t/=i)*t*t*t*t+n},easeOutQuint:function(e,t,n,r,i){return r*((t=t/i-1)*t*t*t*t+1)+n},easeInOutQuint:function(e,t,n,r,i){if((t/=i/2)<1)return r/2*t*t*t*t*t+n;return r/2*((t-=2)*t*t*t*t+2)+n},easeInSine:function(e,t,n,r,i){return-r*Math.cos(t/i*(Math.PI/2))+r+n},easeOutSine:function(e,t,n,r,i){return r*Math.sin(t/i*(Math.PI/2))+n},easeInOutSine:function(e,t,n,r,i){return-r/2*(Math.cos(Math.PI*t/i)-1)+n},easeInExpo:function(e,t,n,r,i){return t==0?n:r*Math.pow(2,10*(t/i-1))+n},easeOutExpo:function(e,t,n,r,i){return t==i?n+r:r*(-Math.pow(2,-10*t/i)+1)+n},easeInOutExpo:function(e,t,n,r,i){if(t==0)return n;if(t==i)return n+r;if((t/=i/2)<1)return r/2*Math.pow(2,10*(t-1))+n;return r/2*(-Math.pow(2,-10*--t)+2)+n},easeInCirc:function(e,t,n,r,i){return-r*(Math.sqrt(1-(t/=i)*t)-1)+n},easeOutCirc:function(e,t,n,r,i){return r*Math.sqrt(1-(t=t/i-1)*t)+n},easeInOutCirc:function(e,t,n,r,i){if((t/=i/2)<1)return-r/2*(Math.sqrt(1-t*t)-1)+n;return r/2*(Math.sqrt(1-(t-=2)*t)+1)+n},easeInElastic:function(e,t,n,r,i){var s=1.70158;var o=0;var u=r;if(t==0)return n;if((t/=i)==1)return n+r;if(!o)o=i*.3;if(u<Math.abs(r)){u=r;var s=o/4}else var s=o/(2*Math.PI)*Math.asin(r/u);return-(u*Math.pow(2,10*(t-=1))*Math.sin((t*i-s)*2*Math.PI/o))+n},easeOutElastic:function(e,t,n,r,i){var s=1.70158;var o=0;var u=r;if(t==0)return n;if((t/=i)==1)return n+r;if(!o)o=i*.3;if(u<Math.abs(r)){u=r;var s=o/4}else var s=o/(2*Math.PI)*Math.asin(r/u);return u*Math.pow(2,-10*t)*Math.sin((t*i-s)*2*Math.PI/o)+r+n},easeInOutElastic:function(e,t,n,r,i){var s=1.70158;var o=0;var u=r;if(t==0)return n;if((t/=i/2)==2)return n+r;if(!o)o=i*.3*1.5;if(u<Math.abs(r)){u=r;var s=o/4}else var s=o/(2*Math.PI)*Math.asin(r/u);if(t<1)return-.5*u*Math.pow(2,10*(t-=1))*Math.sin((t*i-s)*2*Math.PI/o)+n;return u*Math.pow(2,-10*(t-=1))*Math.sin((t*i-s)*2*Math.PI/o)*.5+r+n},easeInBack:function(e,t,n,r,i,s){if(s==undefined)s=1.70158;return r*(t/=i)*t*((s+1)*t-s)+n},easeOutBack:function(e,t,n,r,i,s){if(s==undefined)s=1.70158;return r*((t=t/i-1)*t*((s+1)*t+s)+1)+n},easeInOutBack:function(e,t,n,r,i,s){if(s==undefined)s=1.70158;if((t/=i/2)<1)return r/2*t*t*(((s*=1.525)+1)*t-s)+n;return r/2*((t-=2)*t*(((s*=1.525)+1)*t+s)+2)+n},easeInBounce:function(t,n,r,i,s){return i-e.easing.easeOutBounce(t,s-n,0,i,s)+r},easeOutBounce:function(e,t,n,r,i){if((t/=i)<1/2.75){return r*7.5625*t*t+n}else if(t<2/2.75){return r*(7.5625*(t-=1.5/2.75)*t+.75)+n}else if(t<2.5/2.75){return r*(7.5625*(t-=2.25/2.75)*t+.9375)+n}else{return r*(7.5625*(t-=2.625/2.75)*t+.984375)+n}},easeInOutBounce:function(t,n,r,i,s){if(n<s/2)return e.easing.easeInBounce(t,n*2,0,i,s)*.5+r;return e.easing.easeOutBounce(t,n*2-s,0,i,s)*.5+i*.5+r}});e.fn.animatescroll=function(t){var n=e.extend({},e.fn.animatescroll.defaults,t);if(typeof n.onScrollStart=="function"){n.onScrollStart.call(this)}if(n.element=="html,body"){var r=this.offset().top;e(n.element).stop().animate({scrollTop:r-n.padding},n.scrollSpeed,n.easing)}else{e(n.element).stop().animate({scrollTop:this.offset().top-this.parent().offset().top+this.parent().scrollTop()-n.padding},n.scrollSpeed,n.easing)}setTimeout(function(){if(typeof n.onScrollEnd=="function"){n.onScrollEnd.call(this)}},n.scrollSpeed)};e.fn.animatescroll.defaults={easing:"swing",scrollSpeed:800,padding:0,element:"html,body"}})(jQuery)
|
143
js/archive.js
Normal file
143
js/archive.js
Normal file
@ -0,0 +1,143 @@
|
||||
/*
|
||||
Credits: this script is shamelessly borrowed from
|
||||
https://github.com/kitian616/jekyll-TeXt-theme
|
||||
*/
|
||||
(function() {
|
||||
function queryString() {
|
||||
// This function is anonymous, is executed immediately and
|
||||
// the return value is assigned to QueryString!
|
||||
var i = 0, queryObj = {}, pair;
|
||||
var queryStr = window.location.search.substring(1);
|
||||
var queryArr = queryStr.split('&');
|
||||
for (i = 0; i < queryArr.length; i++) {
|
||||
pair = queryArr[i].split('=');
|
||||
// If first entry with this name
|
||||
if (typeof queryObj[pair[0]] === 'undefined') {
|
||||
queryObj[pair[0]] = pair[1];
|
||||
// If second entry with this name
|
||||
} else if (typeof queryObj[pair[0]] === 'string') {
|
||||
queryObj[pair[0]] = [queryObj[pair[0]], pair[1]];
|
||||
// If third or later entry with this name
|
||||
} else {
|
||||
queryObj[pair[0]].push(pair[1]);
|
||||
}
|
||||
}
|
||||
return queryObj;
|
||||
}
|
||||
|
||||
var setUrlQuery = (function() {
|
||||
var baseUrl = window.location.href.split('?')[0];
|
||||
return function(query) {
|
||||
if (typeof query === 'string') {
|
||||
window.history.replaceState(null, '', baseUrl + query);
|
||||
} else {
|
||||
window.history.replaceState(null, '', baseUrl);
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
$(document).ready(function() {
|
||||
var $tags = $('.js-tags');
|
||||
var $articleTags = $tags.find('.tag-button');
|
||||
var $tagShowAll = $tags.find('.tag-button--all');
|
||||
var $result = $('.js-result');
|
||||
var $sections = $result.find('section');
|
||||
var sectionArticles = []
|
||||
var $lastFocusButton = null;
|
||||
var sectionTopArticleIndex = [];
|
||||
var hasInit = false;
|
||||
|
||||
$sections.each(function() {
|
||||
sectionArticles.push($(this).find('.item'));
|
||||
});
|
||||
|
||||
function init() {
|
||||
var i, index = 0;
|
||||
for (i = 0; i < $sections.length; i++) {
|
||||
sectionTopArticleIndex.push(index);
|
||||
index += $sections.eq(i).find('.item').length;
|
||||
}
|
||||
sectionTopArticleIndex.push(index);
|
||||
}
|
||||
|
||||
function searchButtonsByTag(_tag/*raw tag*/) {
|
||||
if (!_tag) {
|
||||
return $tagShowAll;
|
||||
}
|
||||
var _buttons = $articleTags.filter('[data-encode="' + _tag + '"]');
|
||||
if (_buttons.length === 0) {
|
||||
return $tagShowAll;
|
||||
}
|
||||
return _buttons;
|
||||
}
|
||||
|
||||
function buttonFocus(target) {
|
||||
if (target) {
|
||||
target.addClass('focus');
|
||||
$lastFocusButton && !$lastFocusButton.is(target) && $lastFocusButton.removeClass('focus');
|
||||
$lastFocusButton = target;
|
||||
}
|
||||
}
|
||||
|
||||
function tagSelect (tag/*raw tag*/, target) {
|
||||
var result = {}, $articles;
|
||||
var i, j, k, _tag;
|
||||
|
||||
for (i = 0; i < sectionArticles.length; i++) {
|
||||
$articles = sectionArticles[i];
|
||||
for (j = 0; j < $articles.length; j++) {
|
||||
if (tag === '' || tag === undefined) {
|
||||
result[i] || (result[i] = {});
|
||||
result[i][j] = true;
|
||||
} else {
|
||||
var tags = $articles.eq(j).data('tags').split(',');
|
||||
for (k = 0; k < tags.length; k++) {
|
||||
if (tags[k] === tag) {
|
||||
result[i] || (result[i] = {});
|
||||
result[i][j] = true; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < sectionArticles.length; i++) {
|
||||
result[i] && $sections.eq(i).removeClass('d-none');
|
||||
result[i] || $sections.eq(i).addClass('d-none');
|
||||
for (j = 0; j < sectionArticles[i].length; j++) {
|
||||
if (result[i] && result[i][j]) {
|
||||
sectionArticles[i].eq(j).removeClass('d-none');
|
||||
} else {
|
||||
sectionArticles[i].eq(j).addClass('d-none');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hasInit || ($result.removeClass('d-none'), hasInit = true);
|
||||
|
||||
|
||||
if (target) {
|
||||
buttonFocus(target);
|
||||
_tag = target.attr('data-encode');
|
||||
if (_tag === '' || typeof _tag !== 'string') {
|
||||
setUrlQuery();
|
||||
} else {
|
||||
setUrlQuery('?tag=' + _tag);
|
||||
}
|
||||
} else {
|
||||
buttonFocus(searchButtonsByTag(tag));
|
||||
}
|
||||
}
|
||||
|
||||
var query = queryString(),
|
||||
_tag = query.tag;
|
||||
|
||||
init();
|
||||
tagSelect(_tag);
|
||||
|
||||
$tags.on('click', 'a', function() { /* only change */
|
||||
tagSelect($(this).data('encode'), $(this));
|
||||
});
|
||||
|
||||
});
|
||||
})();
|
2306
js/bootstrap.js
vendored
Normal file
2306
js/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7
js/bootstrap.min.js
vendored
Normal file
7
js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
js/fastclick.min.js
vendored
Normal file
1
js/fastclick.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
84
js/hux-blog.js
Normal file
84
js/hux-blog.js
Normal file
@ -0,0 +1,84 @@
|
||||
/*!
|
||||
* Clean Blog v1.0.0 (http://startbootstrap.com)
|
||||
* Copyright 2015 Start Bootstrap
|
||||
* Licensed under Apache 2.0 (https://github.com/IronSummitMedia/startbootstrap/blob/gh-pages/LICENSE)
|
||||
*/
|
||||
|
||||
/*!
|
||||
* Hux Blog v1.6.0 (http://startbootstrap.com)
|
||||
* Copyright 2016 @huxpro
|
||||
* Licensed under Apache 2.0
|
||||
*/
|
||||
|
||||
// Tooltip Init
|
||||
// Unuse by Hux since V1.6: Titles now display by default so there is no need for tooltip
|
||||
// $(function() {
|
||||
// $("[data-toggle='tooltip']").tooltip();
|
||||
// });
|
||||
|
||||
|
||||
// make all images responsive
|
||||
/*
|
||||
* Unuse by Hux
|
||||
* actually only Portfolio-Pages can't use it and only post-img need it.
|
||||
* so I modify the _layout/post and CSS to make post-img responsive!
|
||||
*/
|
||||
// $(function() {
|
||||
// $("img").addClass("img-responsive");
|
||||
// });
|
||||
|
||||
// responsive tables
|
||||
$(document).ready(function() {
|
||||
$("table").wrap("<div class='table-responsive'></div>");
|
||||
$("table").addClass("table");
|
||||
});
|
||||
|
||||
// responsive embed videos
|
||||
$(document).ready(function() {
|
||||
$('iframe[src*="youtube.com"]').wrap('<div class="embed-responsive embed-responsive-16by9"></div>');
|
||||
$('iframe[src*="youtube.com"]').addClass('embed-responsive-item');
|
||||
$('iframe[src*="vimeo.com"]').wrap('<div class="embed-responsive embed-responsive-16by9"></div>');
|
||||
$('iframe[src*="vimeo.com"]').addClass('embed-responsive-item');
|
||||
});
|
||||
|
||||
// Navigation Scripts to Show Header on Scroll-Up
|
||||
jQuery(document).ready(function($) {
|
||||
var MQL = 1170;
|
||||
|
||||
//primary navigation slide-in effect
|
||||
if ($(window).width() > MQL) {
|
||||
var headerHeight = $('.navbar-custom').height(),
|
||||
bannerHeight = $('.intro-header .container').height();
|
||||
$(window).on('scroll', {
|
||||
previousTop: 0
|
||||
},
|
||||
function() {
|
||||
var currentTop = $(window).scrollTop(),
|
||||
$catalog = $('.side-catalog');
|
||||
|
||||
//check if user is scrolling up by mouse or keyborad
|
||||
if (currentTop < this.previousTop) {
|
||||
//if scrolling up...
|
||||
if (currentTop > 0 && $('.navbar-custom').hasClass('is-fixed')) {
|
||||
$('.navbar-custom').addClass('is-visible');
|
||||
} else {
|
||||
$('.navbar-custom').removeClass('is-visible is-fixed');
|
||||
}
|
||||
} else {
|
||||
//if scrolling down...
|
||||
$('.navbar-custom').removeClass('is-visible');
|
||||
if (currentTop > headerHeight && !$('.navbar-custom').hasClass('is-fixed')) $('.navbar-custom').addClass('is-fixed');
|
||||
}
|
||||
this.previousTop = currentTop;
|
||||
|
||||
|
||||
//adjust the appearance of side-catalog
|
||||
$catalog.show()
|
||||
if (currentTop > (bannerHeight + 41)) {
|
||||
$catalog.addClass('fixed')
|
||||
} else {
|
||||
$catalog.removeClass('fixed')
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
1
js/hux-blog.min.js
vendored
Normal file
1
js/hux-blog.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
$(document).ready(function(){$("table").wrap("<div class='table-responsive'></div>"),$("table").addClass("table")}),$(document).ready(function(){$('iframe[src*="youtube.com"]').wrap('<div class="embed-responsive embed-responsive-16by9"></div>'),$('iframe[src*="youtube.com"]').addClass("embed-responsive-item"),$('iframe[src*="vimeo.com"]').wrap('<div class="embed-responsive embed-responsive-16by9"></div>'),$('iframe[src*="vimeo.com"]').addClass("embed-responsive-item")}),jQuery(document).ready(function(i){var a,o;1170<i(window).width()&&(a=i(".navbar-custom").height(),o=i(".intro-header .container").height(),i(window).on("scroll",{previousTop:0},function(){var s=i(window).scrollTop(),e=i(".side-catalog");s<this.previousTop?0<s&&i(".navbar-custom").hasClass("is-fixed")?i(".navbar-custom").addClass("is-visible"):i(".navbar-custom").removeClass("is-visible is-fixed"):(i(".navbar-custom").removeClass("is-visible"),a<s&&!i(".navbar-custom").hasClass("is-fixed")&&i(".navbar-custom").addClass("is-fixed")),this.previousTop=s,e.show(),o+41<s?e.addClass("fixed"):e.removeClass("fixed")}))});
|
9205
js/jquery.js
vendored
Normal file
9205
js/jquery.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
4
js/jquery.min.js
vendored
Normal file
4
js/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
224
js/jquery.nav.js
Normal file
224
js/jquery.nav.js
Normal file
@ -0,0 +1,224 @@
|
||||
/*
|
||||
* jQuery One Page Nav Plugin
|
||||
* http://github.com/davist11/jQuery-One-Page-Nav
|
||||
*
|
||||
* Copyright (c) 2010 Trevor Davis (http://trevordavis.net)
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
* Uses the same license as jQuery, see:
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* @version 3.0.0
|
||||
*
|
||||
* Example usage:
|
||||
* $('#nav').onePageNav({
|
||||
* currentClass: 'current',
|
||||
* changeHash: false,
|
||||
* scrollSpeed: 750
|
||||
* });
|
||||
*/
|
||||
|
||||
;(function($, window, document, undefined){
|
||||
|
||||
// our plugin constructor
|
||||
var OnePageNav = function(elem, options){
|
||||
this.elem = elem;
|
||||
this.$elem = $(elem);
|
||||
this.options = options;
|
||||
this.metadata = this.$elem.data('plugin-options');
|
||||
this.$win = $(window);
|
||||
this.sections = {};
|
||||
this.didScroll = false;
|
||||
this.$doc = $(document);
|
||||
this.docHeight = this.$doc.height();
|
||||
};
|
||||
|
||||
// the plugin prototype
|
||||
OnePageNav.prototype = {
|
||||
defaults: {
|
||||
navItems: 'a',
|
||||
currentClass: 'current',
|
||||
changeHash: false,
|
||||
easing: 'swing',
|
||||
filter: '',
|
||||
scrollSpeed: 750,
|
||||
scrollThreshold: 0.5,
|
||||
begin: false,
|
||||
end: false,
|
||||
scrollChange: false,
|
||||
padding: 0
|
||||
},
|
||||
|
||||
init: function() {
|
||||
// Introduce defaults that can be extended either
|
||||
// globally or using an object literal.
|
||||
this.config = $.extend({}, this.defaults, this.options, this.metadata);
|
||||
|
||||
this.$nav = this.$elem.find(this.config.navItems);
|
||||
|
||||
//Filter any links out of the nav
|
||||
if(this.config.filter !== '') {
|
||||
this.$nav = this.$nav.filter(this.config.filter);
|
||||
}
|
||||
|
||||
//Handle clicks on the nav
|
||||
this.$nav.on('click.onePageNav', $.proxy(this.handleClick, this));
|
||||
|
||||
//Get the section positions
|
||||
this.getPositions();
|
||||
|
||||
//Handle scroll changes
|
||||
this.bindInterval();
|
||||
|
||||
//Update the positions on resize too
|
||||
this.$win.on('resize.onePageNav', $.proxy(this.getPositions, this));
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
adjustNav: function(self, $parent) {
|
||||
self.$elem.find('.' + self.config.currentClass).removeClass(self.config.currentClass);
|
||||
$parent.addClass(self.config.currentClass);
|
||||
},
|
||||
|
||||
bindInterval: function() {
|
||||
var self = this;
|
||||
var docHeight;
|
||||
|
||||
self.$win.on('scroll.onePageNav', function() {
|
||||
self.didScroll = true;
|
||||
});
|
||||
|
||||
self.t = setInterval(function() {
|
||||
docHeight = self.$doc.height();
|
||||
|
||||
//If it was scrolled
|
||||
if(self.didScroll) {
|
||||
self.didScroll = false;
|
||||
self.scrollChange();
|
||||
}
|
||||
|
||||
//If the document height changes
|
||||
if(docHeight !== self.docHeight) {
|
||||
self.docHeight = docHeight;
|
||||
self.getPositions();
|
||||
}
|
||||
}, 250);
|
||||
},
|
||||
|
||||
getHash: function($link) {
|
||||
return $link.attr('href').split('#')[1];
|
||||
},
|
||||
|
||||
getPositions: function() {
|
||||
var self = this;
|
||||
var linkHref;
|
||||
var topPos;
|
||||
var $target;
|
||||
|
||||
self.$nav.each(function() {
|
||||
linkHref = self.getHash($(this));
|
||||
$target = $('#' + linkHref);
|
||||
|
||||
if($target.length) {
|
||||
topPos = $target.offset().top;
|
||||
self.sections[linkHref] = Math.round(topPos);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getSection: function(windowPos) {
|
||||
var returnValue = null;
|
||||
var windowHeight = Math.round(this.$win.height() * this.config.scrollThreshold);
|
||||
|
||||
for(var section in this.sections) {
|
||||
if((this.sections[section] - windowHeight) < windowPos) {
|
||||
returnValue = section;
|
||||
}
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
},
|
||||
|
||||
handleClick: function(e) {
|
||||
var self = this;
|
||||
var $link = $(e.currentTarget);
|
||||
var $parent = $link.parent();
|
||||
var newLoc = '#' + self.getHash($link);
|
||||
|
||||
if(!$parent.hasClass(self.config.currentClass)) {
|
||||
//Start callback
|
||||
if(self.config.begin) {
|
||||
self.config.begin();
|
||||
}
|
||||
|
||||
//Change the highlighted nav item
|
||||
self.adjustNav(self, $parent);
|
||||
|
||||
//Removing the auto-adjust on scroll
|
||||
self.unbindInterval();
|
||||
|
||||
//Scroll to the correct position
|
||||
self.scrollTo(newLoc, function() {
|
||||
//Do we need to change the hash?
|
||||
if(self.config.changeHash) {
|
||||
window.location.hash = newLoc;
|
||||
}
|
||||
|
||||
//Add the auto-adjust on scroll back in
|
||||
self.bindInterval();
|
||||
|
||||
//End callback
|
||||
if(self.config.end) {
|
||||
self.config.end();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
},
|
||||
|
||||
scrollChange: function() {
|
||||
var windowTop = this.$win.scrollTop();
|
||||
var position = this.getSection(windowTop);
|
||||
var $parent;
|
||||
|
||||
//If the position is set
|
||||
if(position !== null) {
|
||||
$parent = this.$elem.find('a[href$="#' + position + '"]').parent();
|
||||
|
||||
//If it's not already the current section
|
||||
if(!$parent.hasClass(this.config.currentClass)) {
|
||||
//Change the highlighted nav item
|
||||
this.adjustNav(this, $parent);
|
||||
|
||||
//If there is a scrollChange callback
|
||||
if(this.config.scrollChange) {
|
||||
this.config.scrollChange($parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
scrollTo: function(target, callback) {
|
||||
var offset = $(target).offset().top - this.config.padding;
|
||||
|
||||
$('html, body').animate({
|
||||
scrollTop: offset
|
||||
}, this.config.scrollSpeed, this.config.easing, callback);
|
||||
},
|
||||
|
||||
unbindInterval: function() {
|
||||
clearInterval(this.t);
|
||||
this.$win.unbind('scroll.onePageNav');
|
||||
}
|
||||
};
|
||||
|
||||
OnePageNav.defaults = OnePageNav.prototype.defaults;
|
||||
|
||||
$.fn.onePageNav = function(options) {
|
||||
return this.each(function() {
|
||||
new OnePageNav(this, options).init();
|
||||
});
|
||||
};
|
||||
|
||||
})( jQuery, window , document );
|
81
js/jquery.tagcloud.js
Normal file
81
js/jquery.tagcloud.js
Normal file
@ -0,0 +1,81 @@
|
||||
(function($) {
|
||||
|
||||
$.fn.tagcloud = function(options) {
|
||||
var opts = $.extend({}, $.fn.tagcloud.defaults, options);
|
||||
tagWeights = this.map(function(){
|
||||
return $(this).attr("rel");
|
||||
});
|
||||
tagWeights = jQuery.makeArray(tagWeights).sort(compareWeights);
|
||||
lowest = tagWeights[0];
|
||||
highest = tagWeights.pop();
|
||||
range = highest - lowest;
|
||||
if(range === 0) {range = 1;}
|
||||
// Sizes
|
||||
if (opts.size) {
|
||||
fontIncr = (opts.size.end - opts.size.start)/range;
|
||||
}
|
||||
// Colors
|
||||
if (opts.color) {
|
||||
colorIncr = colorIncrement (opts.color, range);
|
||||
}
|
||||
return this.each(function() {
|
||||
weighting = $(this).attr("rel") - lowest;
|
||||
if (opts.size) {
|
||||
$(this).css({"font-size": opts.size.start + (weighting * fontIncr) + opts.size.unit});
|
||||
}
|
||||
if (opts.color) {
|
||||
// change color to background-color
|
||||
$(this).css({"backgroundColor": tagColor(opts.color, colorIncr, weighting)});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.tagcloud.defaults = {
|
||||
size: {start: 14, end: 18, unit: "pt"}
|
||||
};
|
||||
|
||||
// Converts hex to an RGB array
|
||||
function toRGB (code) {
|
||||
if (code.length == 4) {
|
||||
code = jQuery.map(/\w+/.exec(code), function(el) {return el + el; }).join("");
|
||||
}
|
||||
hex = /(\w{2})(\w{2})(\w{2})/.exec(code);
|
||||
return [parseInt(hex[1], 16), parseInt(hex[2], 16), parseInt(hex[3], 16)];
|
||||
}
|
||||
|
||||
// Converts an RGB array to hex
|
||||
function toHex (ary) {
|
||||
return "#" + jQuery.map(ary, function(i) {
|
||||
hex = i.toString(16);
|
||||
hex = (hex.length == 1) ? "0" + hex : hex;
|
||||
return hex;
|
||||
}).join("");
|
||||
}
|
||||
|
||||
function colorIncrement (color, range) {
|
||||
return jQuery.map(toRGB(color.end), function(n, i) {
|
||||
return (n - toRGB(color.start)[i])/range;
|
||||
});
|
||||
}
|
||||
|
||||
function tagColor (color, increment, weighting) {
|
||||
rgb = jQuery.map(toRGB(color.start), function(n, i) {
|
||||
ref = Math.round(n + (increment[i] * weighting));
|
||||
if (ref > 255) {
|
||||
ref = 255;
|
||||
} else {
|
||||
if (ref < 0) {
|
||||
ref = 0;
|
||||
}
|
||||
}
|
||||
return ref;
|
||||
});
|
||||
return toHex(rgb);
|
||||
}
|
||||
|
||||
function compareWeights(a, b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
})(jQuery);
|
6
js/simple-jekyll-search.min.js
vendored
Normal file
6
js/simple-jekyll-search.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
70
js/snackbar.js
Normal file
70
js/snackbar.js
Normal file
@ -0,0 +1,70 @@
|
||||
/**
|
||||
* SnackBar.js
|
||||
*
|
||||
* This small component is borrowed from
|
||||
* https://codepen.io/wibblymat/pen/avAjq
|
||||
*/
|
||||
|
||||
|
||||
var createSnackbar = (function() {
|
||||
// Any snackbar that is already shown
|
||||
var previous = null;
|
||||
|
||||
/*
|
||||
<div class="paper-snackbar">
|
||||
<button class="action">Dismiss</button>
|
||||
This is a longer message that won't fit on one line. It is, inevitably, quite a boring thing. Hopefully it is still useful.
|
||||
</div>
|
||||
*/
|
||||
|
||||
return function(config) {
|
||||
var message = config.message,
|
||||
actionText = config.actionText,
|
||||
action = config.action,
|
||||
duration = config.duration;
|
||||
|
||||
if (previous) {
|
||||
previous.dismiss();
|
||||
}
|
||||
var snackbar = document.createElement('div');
|
||||
snackbar.className = 'paper-snackbar';
|
||||
snackbar.dismiss = function() {
|
||||
this.style.opacity = 0;
|
||||
};
|
||||
var text = document.createTextNode(message);
|
||||
snackbar.appendChild(text);
|
||||
if (actionText) {
|
||||
if (!action) {
|
||||
action = snackbar.dismiss.bind(snackbar);
|
||||
}
|
||||
var actionButton = document.createElement('button');
|
||||
actionButton.className = 'action';
|
||||
actionButton.innerHTML = actionText;
|
||||
actionButton.addEventListener('click', action);
|
||||
snackbar.appendChild(actionButton);
|
||||
}
|
||||
setTimeout(function() {
|
||||
if (previous === this) {
|
||||
previous.dismiss();
|
||||
}
|
||||
}.bind(snackbar), duration || 5000);
|
||||
|
||||
snackbar.addEventListener('transitionend', function(event, elapsed) {
|
||||
if (event.propertyName === 'opacity' && this.style.opacity == 0) {
|
||||
this.parentElement.removeChild(this);
|
||||
if (previous === this) {
|
||||
previous = null;
|
||||
}
|
||||
}
|
||||
}.bind(snackbar));
|
||||
|
||||
|
||||
|
||||
previous = snackbar;
|
||||
document.body.appendChild(snackbar);
|
||||
// In order for the animations to trigger, I have to force the original style to be computed, and then change it.
|
||||
getComputedStyle(snackbar).bottom;
|
||||
snackbar.style.bottom = '0px';
|
||||
snackbar.style.opacity = 1;
|
||||
};
|
||||
})();
|
57
js/sw-registration.js
Normal file
57
js/sw-registration.js
Normal file
@ -0,0 +1,57 @@
|
||||
/* ===========================================================
|
||||
* sw-registration.js
|
||||
* ===========================================================
|
||||
* Copyright 2016 @huxpro
|
||||
* Licensed under Apache 2.0
|
||||
* Register service worker.
|
||||
* ========================================================== */
|
||||
|
||||
// SW Version Upgrade Ref: <https://youtu.be/Gb9uI67tqV0>
|
||||
|
||||
function handleRegistration(registration){
|
||||
console.log('Service Worker Registered. ', registration)
|
||||
/**
|
||||
* ServiceWorkerRegistration.onupdatefound
|
||||
* The service worker registration's installing worker changes.
|
||||
*/
|
||||
registration.onupdatefound = (e) => {
|
||||
const installingWorker = registration.installing;
|
||||
installingWorker.onstatechange = (e) => {
|
||||
if (installingWorker.state !== 'installed') return;
|
||||
if (navigator.serviceWorker.controller) {
|
||||
console.log('SW is updated');
|
||||
} else {
|
||||
console.log('A Visit without previous SW');
|
||||
createSnackbar({
|
||||
message: 'App ready for offline use.',
|
||||
duration: 3000
|
||||
})
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if(navigator.serviceWorker){
|
||||
// For security reasons, a service worker can only control the pages
|
||||
// that are in the same directory level or below it. That's why we put sw.js at ROOT level.
|
||||
navigator.serviceWorker
|
||||
.register('/sw.js')
|
||||
.then((registration) => handleRegistration(registration))
|
||||
.catch((error) => {console.log('ServiceWorker registration failed: ', error)})
|
||||
|
||||
// register message receiver
|
||||
// https://dbwriteups.wordpress.com/2015/11/16/service-workers-part-3-communication-between-sw-and-pages/
|
||||
navigator.serviceWorker.onmessage = (e) => {
|
||||
console.log('SW: SW Broadcasting:', event);
|
||||
const data = e.data
|
||||
|
||||
if(data.command == "UPDATE_FOUND"){
|
||||
console.log("UPDATE_FOUND_BY_SW", data);
|
||||
createSnackbar({
|
||||
message: "Content updated.",
|
||||
actionText:"refresh",
|
||||
action: function(e){location.reload()}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user