2013-06-12 00:28:29 +02:00
|
|
|
|
2015-07-21 22:36:46 +02:00
|
|
|
_ = {};
|
2013-07-31 00:46:27 +02:00
|
|
|
|
2015-07-21 22:36:46 +02:00
|
|
|
_.now = Date.now || function() {
|
|
|
|
return new Date().getTime();
|
|
|
|
};
|
|
|
|
|
|
|
|
_.debounce = function(func, wait, immediate) {
|
|
|
|
var timeout, args, context, timestamp, result;
|
|
|
|
|
|
|
|
var later = function() {
|
|
|
|
var last = _.now() - timestamp;
|
|
|
|
|
|
|
|
if (last < wait && last >= 0) {
|
|
|
|
timeout = setTimeout(later, wait - last);
|
|
|
|
} else {
|
|
|
|
timeout = null;
|
|
|
|
if (!immediate) {
|
|
|
|
result = func.apply(context, args);
|
|
|
|
if (!timeout) context = args = null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
return function() {
|
|
|
|
context = this;
|
|
|
|
args = arguments;
|
|
|
|
timestamp = _.now();
|
|
|
|
var callNow = immediate && !timeout;
|
|
|
|
if (!timeout) timeout = setTimeout(later, wait);
|
|
|
|
if (callNow) {
|
|
|
|
result = func.apply(context, args);
|
|
|
|
context = args = null;
|
|
|
|
}
|
2014-02-13 13:21:27 +01:00
|
|
|
|
2015-07-21 22:36:46 +02:00
|
|
|
return result;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
var codeBlocks, codeBlockView, toggleCodeBlockBtn, codeBlockState;
|
|
|
|
function toggleCodeBlocks() {
|
2015-08-13 23:03:19 +02:00
|
|
|
var hasFloat = $(document.body).hasClass("with-float")? 3 : 2;
|
|
|
|
codeBlockState = (codeBlockState + 1) % hasFloat;
|
2015-07-21 22:36:46 +02:00
|
|
|
localStorage.setItem("codeBlockState", codeBlockState);
|
|
|
|
setCodeBlockStyle(codeBlockState);
|
|
|
|
}
|
2014-02-13 14:40:54 +01:00
|
|
|
|
2014-11-20 09:55:11 +01:00
|
|
|
function setCodeBlockStyle(x) {
|
|
|
|
switch (x) {
|
|
|
|
default:
|
|
|
|
case 0:
|
2015-08-13 23:03:19 +02:00
|
|
|
toggleCodeBlockBtn.html("Show Code Blocks");
|
|
|
|
codeBlockView.removeClass('float-view');
|
|
|
|
codeBlocks.addClass('hidden');
|
2014-11-20 09:55:11 +01:00
|
|
|
break;
|
|
|
|
case 1:
|
2015-08-13 23:03:19 +02:00
|
|
|
toggleCodeBlockBtn.html("Hide Code Blocks");
|
2014-11-20 09:55:11 +01:00
|
|
|
codeBlockView.removeClass('float-view');
|
|
|
|
codeBlocks.removeClass('hidden');
|
|
|
|
break;
|
|
|
|
case 2:
|
2015-08-13 23:03:19 +02:00
|
|
|
toggleCodeBlockBtn.html("Show Code Blocks Inline");
|
|
|
|
codeBlockView.addClass('float-view');
|
|
|
|
codeBlocks.removeClass('hidden');
|
2014-11-20 09:55:11 +01:00
|
|
|
break;
|
2014-02-13 13:21:27 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-08-13 23:03:19 +02:00
|
|
|
//Initialize CodeBlock Visibility Settings
|
|
|
|
$(function () {
|
|
|
|
codeBlocks = $('.content-page article > pre');
|
|
|
|
toggleCodeBlockBtn = $('#toggleCodeBlockBtn');
|
|
|
|
|
|
|
|
// If there is no code block we hide the link
|
|
|
|
if (!codeBlocks.size()) {
|
|
|
|
toggleCodeBlockBtn.addClass('hidden');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
codeBlockView = $('.right-column');
|
|
|
|
if (!codeBlockView.size()) return;
|
|
|
|
|
|
|
|
codeBlockState = localStorage.getItem("codeBlockState");
|
|
|
|
if (!codeBlockState) {
|
|
|
|
codeBlockState = 2;
|
|
|
|
localStorage.setItem("codeBlockState", codeBlockState);
|
|
|
|
} else codeBlockState = parseInt(codeBlockState);
|
|
|
|
|
|
|
|
setCodeBlockStyle(codeBlockState);
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2014-11-20 09:55:11 +01:00
|
|
|
$(function () {
|
2015-07-21 22:36:46 +02:00
|
|
|
// Tree navigation
|
|
|
|
$('.aj-nav').click(function (e) {
|
|
|
|
e.preventDefault();
|
|
|
|
$(this).parent().siblings().find('ul').slideUp();
|
|
|
|
$(this).next().slideToggle();
|
|
|
|
});
|
|
|
|
|
2016-04-02 13:39:04 +02:00
|
|
|
// New Tree navigation
|
|
|
|
$("ul.nav.nav-list > li.has-children > a > .arrow").click(function() {
|
|
|
|
$(this).parent().parent().toggleClass('open');
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
2015-07-21 22:36:46 +02:00
|
|
|
// Responsive navigation
|
|
|
|
$('#menu-spinner-button').click(function () {
|
|
|
|
$('#sub-nav-collapse').slideToggle();
|
|
|
|
});
|
|
|
|
|
|
|
|
//Github ribbon placement
|
|
|
|
var ribbon = $('#github-ribbon');
|
|
|
|
function onResize() {
|
|
|
|
//Fix GitHub Ribbon overlapping Scrollbar
|
|
|
|
var a = $('article');
|
2016-01-08 11:04:35 +01:00
|
|
|
if (ribbon.length && a.length) {
|
2016-01-08 11:00:44 +01:00
|
|
|
if (a[0] && a[0].scrollHeight > $('.right-column').height()) {
|
|
|
|
ribbon[0].style.right = '16px';
|
|
|
|
} else {
|
|
|
|
ribbon[0].style.right = '';
|
|
|
|
}
|
2015-07-21 22:36:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
$(window).resize(_.debounce(onResize, 100));
|
|
|
|
onResize();
|
|
|
|
});
|
2015-08-13 23:03:19 +02:00
|
|
|
|