massive update of website architecture, style modified
This commit is contained in:
BIN
styles/bigblow/js/ZeroClipboard.swf
Normal file
BIN
styles/bigblow/js/ZeroClipboard.swf
Normal file
Binary file not shown.
529
styles/bigblow/js/bigblow.js
Normal file
529
styles/bigblow/js/bigblow.js
Normal file
@@ -0,0 +1,529 @@
|
||||
// bigblow.js --- BigBlow JS file
|
||||
//
|
||||
// Copyright (C) 2011-2016 All Right Reserved, Fabrice Niessen
|
||||
//
|
||||
// This file is free software: you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// This file is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// Author: Fabrice Niessen <(concat "fniessen" at-sign "pirilampo.org")>
|
||||
// URL: https://github.com/fniessen/org-html-themes/
|
||||
// Version: 20140515.1841
|
||||
|
||||
$(function() {
|
||||
$('p').
|
||||
html(function(index, old) {
|
||||
return old.replace('FIXME',
|
||||
'<span class="fixme">FIXME</span>');
|
||||
});
|
||||
$('p').
|
||||
html(function(index, old) {
|
||||
return old.replace('XXX',
|
||||
'<span class="fixme">XXX</span>');
|
||||
});
|
||||
});
|
||||
|
||||
// Remove leading section number
|
||||
$(function() {
|
||||
$('.section-number-2').text("");
|
||||
for (var i = 3; i <= 5; i++) {
|
||||
$('.section-number-' + i).each(function() {
|
||||
$(this).text($(this).text().replace(/^[0-9]+\./g, ""));
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('<div id="minitoc" class="dontprint"></div>').prependTo('body');
|
||||
});
|
||||
|
||||
// generate contents of minitoc
|
||||
function generateMiniToc(divId) {
|
||||
$('#minitoc').empty().append('<h2>In this section</h2>');
|
||||
$('#' + divId).find('h3').each(function(i) {
|
||||
$("#minitoc").append("<a href='#" + $(this).attr("id") + "'>"
|
||||
+ $(this).text() + "</a>");
|
||||
});
|
||||
// Ensure that the target is expanded (hideShow)
|
||||
$('#minitoc a[href^="#"]').click(function() {
|
||||
var href = $(this).attr('href');
|
||||
hsExpandAnchor(href);
|
||||
});
|
||||
}
|
||||
|
||||
// display tabs
|
||||
function tabifySections() {
|
||||
|
||||
// hide TOC (if present)
|
||||
$('#table-of-contents').hide();
|
||||
|
||||
// grab the list of `h2' from the page
|
||||
var allSections = [];
|
||||
$('h2')
|
||||
.each(function() {
|
||||
// Remove TODO keywords and tags (contained in spans)
|
||||
var tabText = $(this).clone().find('span').remove().end()
|
||||
.text().trim();
|
||||
var tabId = $(this).parent().attr('id');
|
||||
if (tabText) {
|
||||
// - remove heading number (all leading digits)
|
||||
// - remove progress logging (between square brackets)
|
||||
// - remove leading and trailing spaces
|
||||
tabText = tabText.replace(/^\d+\s+/, '').replace(/\[[\d/%]+\]/, '').trim();
|
||||
|
||||
allSections.push({
|
||||
text: tabText,
|
||||
id: tabId
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// create the tab links
|
||||
var tabs = $('<ul id="tabs"></ul>');
|
||||
for (i = 0; i < allSections.length; i++) {
|
||||
var item = allSections[i];
|
||||
html = $('<li><a href="#' + item.id + '">' + item.text + '</a></li>');
|
||||
tabs.append(html);
|
||||
}
|
||||
|
||||
// insert tabs menu after title (`h1'), or at the beginning of the content
|
||||
if($('.title').length !== 0) {
|
||||
$('.title').after(tabs);
|
||||
}
|
||||
else {
|
||||
$('#content').prepend(tabs);
|
||||
}
|
||||
}
|
||||
|
||||
function selectTabAndScroll(href) {
|
||||
// At this point we assume that href is local (starts with #)
|
||||
// alert(href);
|
||||
|
||||
// Find the tab to activate
|
||||
var targetTab = $(href).closest('.ui-tabs-panel');
|
||||
var targetTabId = targetTab.attr('id');
|
||||
var targetTabAriaLabel = targetTab.attr('aria-labelledby');
|
||||
|
||||
var targetTabIndex = $("#content ul li")
|
||||
.index($('[aria-labelledby="' + targetTabAriaLabel + '"]'));
|
||||
|
||||
// Activate target tab
|
||||
$('#content').tabs('option', 'active', targetTabIndex);
|
||||
|
||||
// Rebuild minitoc
|
||||
generateMiniToc(targetTabId);
|
||||
|
||||
// Set the location hash
|
||||
// document.location.hash = href;
|
||||
|
||||
// Scroll to top if href was a tab
|
||||
if (href == '#' + targetTabId) {
|
||||
// alert(targetTabId);
|
||||
$.scrollTo(0);
|
||||
}
|
||||
// Scroll to href if href was not a tab
|
||||
else {
|
||||
$.scrollTo(href);
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#preamble').remove();
|
||||
$('#table-of-contents').remove();
|
||||
|
||||
// Prepare for tabs
|
||||
tabifySections();
|
||||
|
||||
// Build the tabs from the #content div
|
||||
$('#content').tabs();
|
||||
|
||||
// Set default animation
|
||||
$('#content').tabs('option', 'show', true);
|
||||
|
||||
// Rebuild minitoc when a tab is activated
|
||||
$('#content').tabs({
|
||||
activate: function(event, ui) {
|
||||
var divId = ui.newTab.attr('aria-controls');
|
||||
generateMiniToc(divId);
|
||||
}
|
||||
});
|
||||
|
||||
// Required to get the link of the tab in URL
|
||||
$('#content ul').localScroll({
|
||||
target: '#content',
|
||||
duration: 0,
|
||||
hash: true
|
||||
});
|
||||
|
||||
// Handle hash in URL
|
||||
if ($('#content') && document.location.hash) {
|
||||
hsExpandAnchor(document.location.hash);
|
||||
selectTabAndScroll(document.location.hash);
|
||||
}
|
||||
// If no hash, build the minitoc anyway for selected tab
|
||||
else {
|
||||
var divId = $('#content div[aria-expanded=true]').attr('id');
|
||||
generateMiniToc(divId);
|
||||
}
|
||||
|
||||
// Handle click on internal links
|
||||
$('.ui-tabs-panel a[href^="#"]').click(function(e) {
|
||||
var href = $(this).attr('href');
|
||||
hsExpandAnchor(href);
|
||||
selectTabAndScroll(href);
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
// Initialize hideShow
|
||||
hsInit();
|
||||
|
||||
// add sticky headers to tables
|
||||
$('table').stickyTableHeaders();
|
||||
});
|
||||
|
||||
function copyToClipboard(text)
|
||||
{
|
||||
if (window.clipboardData && window.clipboardData.setData) { // Internet Explorer
|
||||
window.clipboardData.setData("Text", text);
|
||||
}
|
||||
else { // Fallback solution
|
||||
window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// Assuming that the ZeroClipboard swf file is in the same folder than bigblow,
|
||||
// get the path to it (it will be relative to the current page location).
|
||||
var bbScriptPath = $('script[src$="bigblow.js"]').attr('src'); // the js file path
|
||||
var bbPathToZeroClipboardSwf = bbScriptPath.replace('bigblow.js', 'ZeroClipboard.swf');
|
||||
|
||||
// Add copy to clipboard snippets
|
||||
$('.org-src-container').prepend('<div class="snippet-copy-to-clipboard"><span class="copy-to-clipboard-button">[copy]</span></div>');
|
||||
|
||||
// Display/hide snippets on source block mouseenter/mouseleave
|
||||
$(document).on('mouseenter', '.org-src-container', function () {
|
||||
$(this).find('.snippet-copy-to-clipboard').show();
|
||||
|
||||
// Need to call zclip here, once the button is visible.
|
||||
// Beacause when the button is not visible, zclip does nothing.
|
||||
if ((window.location.protocol != 'file:') && ($(this).find('.zclip').length == 0)) {
|
||||
$(this).find('.copy-to-clipboard-button').zclip({
|
||||
//path: 'http://www.steamdev.com/zclip/js/ZeroClipboard.swf',
|
||||
//path: 'styles/bigblow/js/ZeroClipboard.swf',
|
||||
path: bbPathToZeroClipboardSwf,
|
||||
copy: function() {
|
||||
return $(this).parent().parent().find('.src').text();
|
||||
}
|
||||
});
|
||||
}
|
||||
}).on('mouseleave', '.org-src-container', function () {
|
||||
$(this).find('.snippet-copy-to-clipboard').hide();
|
||||
});
|
||||
|
||||
// Handle copy to clipboard (here, for a local file only 'file://...'
|
||||
if (window.location.protocol == 'file:') { // if local file use browser-specific code
|
||||
$('.copy-to-clipboard-button').click(function() {
|
||||
// Get the text to be copied
|
||||
var text = $(this).parent().parent().find('.src').text();
|
||||
text = text.replace(/\n/g, "\r\n");
|
||||
// alert(text);
|
||||
copyToClipboard(text);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('li > code :contains("[X]")')
|
||||
.parent()
|
||||
.addClass('checked')
|
||||
.end()
|
||||
.remove();
|
||||
$('li > code :contains("[-]")')
|
||||
.parent()
|
||||
.addClass('halfchecked')
|
||||
.end()
|
||||
.remove();
|
||||
$('li > code :contains("[ ]")')
|
||||
.parent()
|
||||
.addClass('unchecked')
|
||||
.end()
|
||||
.remove();
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('i :contains("[#A]")')
|
||||
.replaceWith('<i><span style="color: #F67777;">[#A]</span></i>');
|
||||
$('i :contains("[#B]")')
|
||||
.replaceWith('<i><span style="color: #B6E864;">[#B]</span></i>');
|
||||
$('i :contains("[#C]")')
|
||||
.replaceWith('<i><span style="color: #C3DCFF;">[#C]</span></i>');
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('<div id="toTop" class="dontprint"><span>^ Back to Top</span></div>').appendTo('body');
|
||||
|
||||
$(window).scroll(function() {
|
||||
if ($(this).scrollTop() != 0) {
|
||||
$('#toTop').fadeIn();
|
||||
} else {
|
||||
$('#toTop').fadeOut();
|
||||
}
|
||||
});
|
||||
|
||||
$('#toTop').click(function(e) {
|
||||
$('html, body').animate({scrollTop: 0}, 800);
|
||||
e.preventDefault(); // Disable default browser behavior
|
||||
});
|
||||
});
|
||||
|
||||
function togglePanel(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$("#left-panel-contents").toggleClass('active').toggle(200);
|
||||
$("#right-panel-contents").toggleClass('active').toggle(200);
|
||||
|
||||
var slidePos =
|
||||
$("#left-panel-button").css("left") == "-23px"? '182px': '-23px';
|
||||
|
||||
$("#left-panel-button").
|
||||
animate({"left": slidePos, "opacity": 0.9}, {duration: "200" });
|
||||
|
||||
// if ($("#left-panel-contents").hasClass('active')) {
|
||||
// hsHideTodoKeyword('done');
|
||||
// } else {
|
||||
// hsShowTodoKeyword('done');
|
||||
// }
|
||||
|
||||
// return false;
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$('<div id="left-panel-wrapper" class="dontprint"><div id="left-panel-contents" style="opacity: 0.9"></div><div id="left-panel-button" class="dontprint"><a href="#">Dashboard</a></div></div>')
|
||||
.appendTo('body');
|
||||
|
||||
$('<div id="right-panel-wrapper" class="dontprint"><div id="right-panel-contents" style="opacity: 0.9"></div></div>')
|
||||
.appendTo('body');
|
||||
|
||||
$('#left-panel-button').click(togglePanel);
|
||||
});
|
||||
|
||||
$(function() {
|
||||
var ul = $('<ul id="listOfTodo"></ul>').appendTo('#left-panel-contents');
|
||||
var countOfTodo = {}, listOfTodo = [], totalOfTodo = 0;
|
||||
|
||||
// assign the counts (avoid double-counting elements from the ToC)
|
||||
$('span.todo').not($('#table-of-contents span.todo')).each(function() {
|
||||
var $thisTodo = $(this).text().trim();
|
||||
|
||||
if ($.inArray($thisTodo, listOfTodo) == -1) {
|
||||
countOfTodo[$thisTodo] = 1;
|
||||
listOfTodo.push($thisTodo);
|
||||
}
|
||||
else
|
||||
countOfTodo[$thisTodo] += 1;
|
||||
totalOfTodo += 1;
|
||||
});
|
||||
|
||||
function scoreTodo(t) {
|
||||
switch (t) {
|
||||
case 'NEW': return 1;
|
||||
case 'TODO': return 2;
|
||||
case 'STRT': return 3;
|
||||
case 'WAIT': return 4;
|
||||
case 'DLGT': return 5;
|
||||
case 'SDAY': return 6;
|
||||
case 'DFRD': return 7;
|
||||
case 'DONE': return 8;
|
||||
case 'CANX': return 9;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function compareTodo(a, b) {
|
||||
if (scoreTodo(a) < scoreTodo(b)) return -1;
|
||||
if (scoreTodo(a) > scoreTodo(b)) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
listOfTodo.sort(compareTodo);
|
||||
|
||||
// display
|
||||
for (i = 0; i < listOfTodo.length; i++) {
|
||||
var $thisTodo = listOfTodo[i];
|
||||
$(ul).append('<li><span class="todo ' + $thisTodo + '">'+ $thisTodo + '</span>'
|
||||
+ ' <small>(' + countOfTodo[$thisTodo] + ')</small></li>');
|
||||
}
|
||||
|
||||
$('#listOfTodo')
|
||||
.before('<b>Next Actions</b> <small>(' + totalOfTodo + ')</small>:<br>');
|
||||
});
|
||||
|
||||
$(function() {
|
||||
var ul = $('<ul id="listOfDone"></ul>').appendTo('#left-panel-contents');
|
||||
var countOfDone = {}, listOfDone = [], totalOfDone = 0;
|
||||
|
||||
// assign the counts (avoid double-counting elements from the ToC)
|
||||
$('span.done').not($('#table-of-contents span.done')).each(function() {
|
||||
var $thisDone = $(this).text().trim();
|
||||
|
||||
if ($.inArray($thisDone, listOfDone) == -1) {
|
||||
countOfDone[$thisDone] = 1;
|
||||
listOfDone.push($thisDone);
|
||||
}
|
||||
else
|
||||
countOfDone[$thisDone] += 1;
|
||||
totalOfDone += 1;
|
||||
});
|
||||
|
||||
// display
|
||||
for (i = 0; i < listOfDone.length; i++) {
|
||||
var $thisDone = listOfDone[i];
|
||||
$(ul).append('<li><span class="done ' + $thisDone + '">'+ $thisDone + '</span>'
|
||||
+ ' <small>(' + countOfDone[$thisDone] + ')</small></li>');
|
||||
}
|
||||
|
||||
$('#listOfDone')
|
||||
.before('<b>Done Actions</b> <small>(' + totalOfDone + '):</small><br>');
|
||||
});
|
||||
|
||||
$(function() {
|
||||
var ul = $('<ul id="listOfTags"></ul>').appendTo('#right-panel-contents');
|
||||
var countOfTags = {}, listOfTags = [], totalOfTags = 0;
|
||||
|
||||
// assign the counts (avoid double-counting elements from the ToC)
|
||||
$('span.tag').not($('#table-of-contents span.tag')).each(function() {
|
||||
var $thisTagGroup = $(this).text().trim().split(/\s/);
|
||||
// \s matches spaces, tabs, new lines, etc.
|
||||
|
||||
for (tag in $thisTagGroup) {
|
||||
if ($.inArray($thisTagGroup[tag], listOfTags) == -1) {
|
||||
countOfTags[$thisTagGroup[tag]] = 1;
|
||||
listOfTags.push($thisTagGroup[tag]);
|
||||
}
|
||||
else
|
||||
countOfTags[$thisTagGroup[tag]] += 1;
|
||||
totalOfTags += 1;
|
||||
}
|
||||
});
|
||||
|
||||
listOfTags.sort();
|
||||
|
||||
// display
|
||||
for (i = 0; i < listOfTags.length; i++) {
|
||||
var $thisTag = listOfTags[i];
|
||||
// $(ul).append('<li><span class="tag ' + $thisTag + '">'+
|
||||
// $thisTag + '</span> <small>(' + countOfTags[$thisTag] + ')</small></li>');
|
||||
$(ul).append('<li><span class="tag"><span class="' + $thisTag + '">' + $thisTag
|
||||
+ '</span></span>'
|
||||
+ ' <small>(' + countOfTags[$thisTag] + ')</small></li>');
|
||||
}
|
||||
|
||||
$('#listOfTags')
|
||||
.before('<b>Contexts</b> <small>(' + totalOfTags + '):</small><br>');
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('.done').parent(':header').parent().find(':header').addClass('DONEheader');
|
||||
$('.done').parent(':header').parent().css({color: '#999999'});
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('span.todo').click(function(e) {
|
||||
var orgKeyword = $(this).text().trim();
|
||||
$('.' + orgKeyword).toggleClass('selected');
|
||||
$('#content .' + orgKeyword).parent().parent()
|
||||
.toggleClass('match' + orgKeyword);
|
||||
$('#left-panel-wrapper .' + orgKeyword).parent()
|
||||
.toggleClass('match' + orgKeyword);
|
||||
e.preventDefault();
|
||||
})
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('.tag span').click(function(e) {
|
||||
var orgTag = $(this).text().trim();
|
||||
$('.' + orgTag).toggleClass('selected');
|
||||
$('#content .' + orgTag).parent().parent().parent()
|
||||
.toggleClass('matchtag');
|
||||
$('#right-panel-wrapper .' + orgTag).parent().parent()
|
||||
.toggleClass('matchtag');
|
||||
e.preventDefault();
|
||||
})
|
||||
});
|
||||
|
||||
function clickPreviousTab() {
|
||||
var active = $('#content').tabs('option', 'active');
|
||||
// Avoid going back to last tab
|
||||
if (active == 0) return;
|
||||
|
||||
$('#content').tabs('option', 'active', active - 1);
|
||||
|
||||
// Set the location href
|
||||
var href = $('#content div[aria-expanded=true]').attr('id');
|
||||
document.location.hash = href;
|
||||
$.scrollTo(0);
|
||||
}
|
||||
|
||||
function clickNextTab() {
|
||||
var active = $('#content').tabs('option', 'active');
|
||||
$('#content').tabs('option', 'active', active + 1);
|
||||
|
||||
// Set the location href
|
||||
var href = $('#content div[aria-expanded=true]').attr('id');
|
||||
document.location.hash = href;
|
||||
$.scrollTo(0);
|
||||
}
|
||||
|
||||
function orgDefkey(e) {
|
||||
if (!e)
|
||||
var e = window.event;
|
||||
var keycode = (e.keyCode) ? e.keyCode : e.which;
|
||||
var actualkey = String.fromCharCode(keycode);
|
||||
switch (actualkey) {
|
||||
case "?": // help (dashboard)
|
||||
case "h":
|
||||
togglePanel(e);
|
||||
break;
|
||||
case "n": // next
|
||||
clickNextTab();
|
||||
break;
|
||||
case "p": // previous
|
||||
clickPreviousTab();
|
||||
break;
|
||||
// case "b": // scroll down - should be mapped to Shift-SPC
|
||||
// $(window).scrollTop($(window).scrollTop()-$(window).height());
|
||||
// break;
|
||||
case "<": // scroll to top
|
||||
$(window).scrollTop(0);
|
||||
break;
|
||||
case ">": // scroll to bottom
|
||||
$(window).scrollTop($(document).height());
|
||||
break;
|
||||
case "-": // collapse all
|
||||
hsCollapseAll();
|
||||
break;
|
||||
case "+": // expand all
|
||||
hsExpandAll();
|
||||
break;
|
||||
case "r": // go to next task
|
||||
hsReviewTaskNext();
|
||||
break;
|
||||
case "R": // go to previous task
|
||||
hsReviewTaskPrev();
|
||||
break;
|
||||
case "q": // quit reviewing
|
||||
hsReviewTaskQuit();
|
||||
break;
|
||||
case "g": // refresh the page (from the server, rather than the cache)
|
||||
location.reload(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
document.onkeypress = orgDefkey;
|
||||
332
styles/bigblow/js/hideshow.js
Normal file
332
styles/bigblow/js/hideshow.js
Normal file
@@ -0,0 +1,332 @@
|
||||
// hideshow.js --- HideShow JS file
|
||||
//
|
||||
// Copyright (C) 2014 All Right Reserved, Fabrice Niessen
|
||||
//
|
||||
// This file is free software: you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// This file is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// Author: Fabrice Niessen <(concat "fniessen" at-sign "pirilampo.org")>
|
||||
// URL: https://github.com/fniessen/hide-show/
|
||||
// Version: 20140912.1722
|
||||
|
||||
// var HS_COLLAPSIBLE_HEADERS = $('h3, h4, h5'); // collapsible headers
|
||||
|
||||
if (typeof HS_STARTUP_FOLDED === 'undefined') {
|
||||
var HS_STARTUP_FOLDED = false; // Show just the overview, or show all.
|
||||
}
|
||||
|
||||
if (typeof HS_SHOW_ALL_TEXT === 'undefined') {
|
||||
var HS_SHOW_ALL_TEXT = '[Expand all]';
|
||||
}
|
||||
if (typeof HS_HIDE_ALL_TEXT === 'undefined') {
|
||||
var HS_HIDE_ALL_TEXT = '[Collapse all]';
|
||||
}
|
||||
|
||||
if (typeof HS_ALWAYS_DISPLAY_ICON === 'undefined') {
|
||||
var HS_ALWAYS_DISPLAY_ICON = false; // Display an icon for all states, or
|
||||
// just when closed.
|
||||
}
|
||||
|
||||
if (typeof HS_ICON_CLOSED === 'undefined') {
|
||||
var HS_ICON_CLOSED = '►'; // black right-pointing pointer
|
||||
}
|
||||
if (typeof HS_ICON_OPEN === 'undefined') {
|
||||
var HS_ICON_OPEN = '▼'; // black down-pointing triangle
|
||||
}
|
||||
if (typeof HS_ICON_EMPTY === 'undefined') {
|
||||
var HS_ICON_EMPTY = '■'; // black square
|
||||
}
|
||||
|
||||
if (typeof HS_SHOW_ALL_OPEN_DONE_TREES === 'undefined') {
|
||||
var HS_SHOW_ALL_OPEN_DONE_TREES = false; // Expand all will open DONE trees.
|
||||
}
|
||||
|
||||
if (typeof HS_CLASS === 'undefined') {
|
||||
var HS_CLASS = 'hsCollapsible';
|
||||
}
|
||||
|
||||
// Expand a header
|
||||
function hsExpand(header) {
|
||||
hsExpand2(header, true);
|
||||
}
|
||||
|
||||
// Expand a header
|
||||
function hsExpand2(header, expandDoneHeader) {
|
||||
// Ignore non collapsible entries
|
||||
if (!header.parent().hasClass(HS_CLASS)) return;
|
||||
|
||||
// Do not expand DONE node if not required
|
||||
if (hsIsDoneHeader(header) && !expandDoneHeader) return;
|
||||
|
||||
header.children('span[class="ellipsis"]').remove();
|
||||
if (HS_ALWAYS_DISPLAY_ICON == true) {
|
||||
header.append('<span class="ellipsis"> ' + HS_ICON_OPEN + '</span>');
|
||||
}
|
||||
header.parent().removeClass('hsCollapsed').addClass('hsExpanded');
|
||||
header.nextAll().show();
|
||||
}
|
||||
|
||||
// Expand a header and all its parents
|
||||
function hsExpandParents(header) {
|
||||
hsExpand(header);
|
||||
header.parents('.hsCollapsed').each(function() {
|
||||
hsExpand($(this).children(':header'));
|
||||
});
|
||||
}
|
||||
|
||||
// Collapse a header and all its parents
|
||||
function hsCollapseParents(header) {
|
||||
hsCollapse(header);
|
||||
header.parents('.hsExpanded').each(function() {
|
||||
hsCollapse($(this).children(':header'));
|
||||
});
|
||||
}
|
||||
|
||||
// Collapse a header
|
||||
function hsCollapse(header) {
|
||||
// Ignore non collapsible entries
|
||||
if (!header.parent().hasClass(HS_CLASS)) return;
|
||||
|
||||
header.children('span[class="ellipsis"]').remove();
|
||||
header.append('<span class="ellipsis"> ' + HS_ICON_CLOSED + '</span>');
|
||||
header.parent().removeClass('hsExpanded').addClass('hsCollapsed');
|
||||
// header.nextAll().hide('fast');
|
||||
header.nextAll().hide();
|
||||
}
|
||||
|
||||
// Toggle a header
|
||||
function hsToggleCollapsing(header) {
|
||||
if (header.parent().hasClass('hsCollapsed'))
|
||||
hsExpand(header);
|
||||
else if (header.parent().hasClass('hsExpanded'))
|
||||
hsCollapse(header);
|
||||
}
|
||||
|
||||
// Expand all headers
|
||||
function hsExpandAll() {
|
||||
$('#content .hsCollapsed').each(function() {
|
||||
hsExpand2($(this).children(':header'), HS_SHOW_ALL_OPEN_DONE_TREES);
|
||||
});
|
||||
}
|
||||
|
||||
// Collapse all headers
|
||||
function hsCollapseAll() {
|
||||
$('#content .hsExpanded').each(function() {
|
||||
hsCollapse($(this).children(':header'));
|
||||
});
|
||||
}
|
||||
|
||||
// Collapse all visible headers
|
||||
function hsCollapseAllVisible() {
|
||||
$('#content .hsExpanded:visible').each(function() {
|
||||
hsCollapse($(this).children(':header'));
|
||||
});
|
||||
}
|
||||
|
||||
// Add click events to H3/H4/H5 headers which have contents.
|
||||
function hsInit() {
|
||||
for (var i = 3; i <= 5; i++) {
|
||||
$('#content .outline-' + i).each(function() {
|
||||
var header = $(this).children(':header');
|
||||
if (header.siblings().length > 0) {
|
||||
$(this).addClass(HS_CLASS);
|
||||
header.css({cursor: 'pointer'});
|
||||
header.click(function() {
|
||||
hsToggleCollapsing($(this)); });
|
||||
|
||||
// Allow to override global Collapse/Expand default on an entry
|
||||
// basis (see property `:HTML_CONTAINER_CLASS:')
|
||||
if (header.parent().hasClass('hsCollapsed')) {
|
||||
hsCollapse(header);
|
||||
} else if (header.parent().hasClass('hsExpanded')) {
|
||||
hsExpand(header);
|
||||
} else {
|
||||
hsSetDefaultVisibility(header);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (HS_ALWAYS_DISPLAY_ICON == true) {
|
||||
header.append('<span class="ellipsis"> ' + HS_ICON_EMPTY
|
||||
+ '</span>');
|
||||
}
|
||||
$(this).addClass('hsEmpty');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Add buttons
|
||||
$('.title').after($('<div class="buttons dontprint"></div>'));
|
||||
$('.buttons').append($('<span>' + HS_SHOW_ALL_TEXT + '</span>')
|
||||
.addClass('hsButton')
|
||||
.click(hsExpandAll));
|
||||
$('.buttons').append($('<span>' + HS_HIDE_ALL_TEXT + '</span>')
|
||||
.addClass('hsButton')
|
||||
.click(hsCollapseAll));
|
||||
}
|
||||
|
||||
// Returns true if a header is a DONE header
|
||||
function hsIsDoneHeader(header) {
|
||||
return $('span.done', header).length;
|
||||
}
|
||||
|
||||
// Sets the default visibility state to a header
|
||||
function hsSetDefaultVisibility(header) {
|
||||
if (HS_STARTUP_FOLDED) {
|
||||
hsCollapse(header);
|
||||
}
|
||||
else {
|
||||
if (!hsIsDoneHeader(header) | HS_SHOW_ALL_OPEN_DONE_TREES) {
|
||||
hsExpand(header);
|
||||
}
|
||||
else {
|
||||
hsCollapse(header);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Expands an anchor, i.e. expand all parent headers
|
||||
function hsExpandAnchor(id) {
|
||||
// alert(id);
|
||||
if (id) {
|
||||
// alert($(id + '.hsNode').length);
|
||||
$(id).parents('.hsCollapsed').each(function() {
|
||||
hsExpand2($(this).children(':header'), true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Search for next task to review, starting from beginning of current tab.
|
||||
// If BACKWARD is true, search in the reverse direction.
|
||||
function hsReviewTaskNext(backward) {
|
||||
// If no tasks to review at all, do nothing.
|
||||
if ($('.outline-2 span.todo').length == 0) return;
|
||||
|
||||
if ($('.hsReviewing').length == 0) { // reviewing is starting
|
||||
$('body').addClass('hsReviewing');
|
||||
$('.hsReviewPanel').addClass('hsReviewing');
|
||||
$('body').prepend('<div id="hsOverlay"></div>');
|
||||
hsAddReviewingPanels();
|
||||
|
||||
hsCollapseAll();
|
||||
// Get first task to review on each tab and expand it
|
||||
$('.outline-2').each(function(){
|
||||
var firstTodo = $(this).find('span.todo:first').parent().parent();
|
||||
firstTodo.addClass('hsReview');
|
||||
hsExpandParents($(firstTodo).children(':header'));
|
||||
});
|
||||
}
|
||||
else {
|
||||
// Get all todos
|
||||
var todosElements = $('.outline-2:visible span.todo').parent().parent();
|
||||
// alert(todosElements.length);
|
||||
var todos = jQuery.makeArray(todosElements);
|
||||
if (backward) {
|
||||
todos = todos.reverse();
|
||||
}
|
||||
|
||||
// Find current review item and review the next one
|
||||
var foundReview = false;
|
||||
var index;
|
||||
for (index = 0; index < todos.length; ++index) {
|
||||
var todo = todos[index];
|
||||
if (foundReview) {
|
||||
$(todo).addClass('hsReview');
|
||||
hsExpandParents($(todo).children(':header'));
|
||||
break;
|
||||
}
|
||||
if ($(todo).hasClass('hsReview')) {
|
||||
foundReview = true;
|
||||
if (index < todos.length - 1) {
|
||||
$(todo).removeClass('hsReview');
|
||||
hsCollapseParents($(todo).children(':header'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update reviewing panel
|
||||
if (index < todos.length) {
|
||||
var reviewItem = index + 1;
|
||||
if (backward) {
|
||||
reviewItem = todos.length - index;
|
||||
}
|
||||
|
||||
$('.outline-2:visible .hsReviewingPanel .hsReviewItem').text(reviewItem);
|
||||
}
|
||||
}
|
||||
|
||||
// Scroll to the current review item
|
||||
$('html, body').animate({
|
||||
scrollTop: $(".hsReview:visible").offset().top
|
||||
}, 200);
|
||||
}
|
||||
|
||||
// go to previous task to review
|
||||
function hsReviewTaskPrev() {
|
||||
hsReviewTaskNext(true);
|
||||
}
|
||||
|
||||
// stop reviewing tasks
|
||||
function hsReviewTaskQuit() {
|
||||
$('body').removeClass('hsReviewing');
|
||||
$('.hsReviewPanel').removeClass('hsReviewing');
|
||||
$('.hsReview').removeClass('hsReview');
|
||||
$('#hsOverlay').remove();
|
||||
$('.hsReviewingPanel').remove();
|
||||
}
|
||||
|
||||
function hsHideTodoKeyword(kw) {
|
||||
$('span.' + kw).addClass('hsHidden').parent().parent().hide();
|
||||
}
|
||||
|
||||
function hsShowTodoKeyword(kw) {
|
||||
$('span.' + kw).removeClass('hsHidden').parent().parent().show();
|
||||
// XXX Show if parent is not collapsed!
|
||||
}
|
||||
|
||||
function hsAddReviewPanels() {
|
||||
$('.outline-2').each(function(e) {
|
||||
var nbItems = $(this).find('span.todo').length;
|
||||
if (nbItems > 0) {
|
||||
$(this).prepend('<div class="hsReviewPanel hsUnselectable" onclick="hsReviewTaskNext()">'
|
||||
+ 'Press r or click here<br>'
|
||||
+ 'to review ' + nbItems + ' tasks<br>'
|
||||
+ '(out of ' + nbReviewTotalTasks + ' tasks)</div>');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function hsAddReviewingPanels() {
|
||||
$('.outline-2').each(function(e) {
|
||||
var nbItems = $(this).find('span.todo').length;
|
||||
if (nbItems > 0) {
|
||||
$(this).prepend('<div class="hsReviewingPanel hsUnselectable">Reviewing task <span class="hsReviewItem">1</span> / ' + nbItems + '<br>'
|
||||
+ '(out of ' + nbReviewTotalTasks + ' tasks)<br>'
|
||||
+ 'Shortcuts: '
|
||||
+ '<span class="hsReviewButton" onclick="hsReviewTaskNext()">r (next)</span> - '
|
||||
+ '<span class="hsReviewButton" onclick="hsReviewTaskPrev()">R (previous)</span>'
|
||||
+ '</div>');
|
||||
}
|
||||
else {
|
||||
$(this).prepend('<div class="hsReviewingPanel hsUnselectable">No task to review<br>'
|
||||
+ '(out of ' + nbReviewTotalTasks + ' tasks)<br>'
|
||||
+ 'Shortcuts: '
|
||||
+ '<span class="hsReviewButton" onclick="hsReviewTaskNext()">r (next)</span> - '
|
||||
+ '<span class="hsReviewButton" onclick="hsReviewTaskPrev()">R (previous)</span>'
|
||||
+ '</div>');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var nbReviewTotalTasks;
|
||||
|
||||
$(document).ready(function() {
|
||||
nbReviewTotalTasks = $('.outline-2 span.todo').length;
|
||||
hsAddReviewPanels();
|
||||
});
|
||||
4
styles/bigblow/js/jquery-1.11.0.min.js
vendored
Normal file
4
styles/bigblow/js/jquery-1.11.0.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
styles/bigblow/js/jquery-1.9.1.min.js
vendored
Normal file
5
styles/bigblow/js/jquery-1.9.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
12
styles/bigblow/js/jquery-ui-1.10.2.min.js
vendored
Normal file
12
styles/bigblow/js/jquery-ui-1.10.2.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
9
styles/bigblow/js/jquery.localscroll-min.js
vendored
Normal file
9
styles/bigblow/js/jquery.localscroll-min.js
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* jQuery.LocalScroll - Animated scrolling navigation, using anchors.
|
||||
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
||||
* Dual licensed under MIT and GPL.
|
||||
* Date: 3/11/2009
|
||||
* @author Ariel Flesler
|
||||
* @version 1.2.7
|
||||
**/
|
||||
;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery);
|
||||
7
styles/bigblow/js/jquery.scrollTo-1.4.3.1-min.js
vendored
Normal file
7
styles/bigblow/js/jquery.scrollTo-1.4.3.1-min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* Copyright (c) 2007-2012 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
||||
* Dual licensed under MIT and GPL.
|
||||
* @author Ariel Flesler
|
||||
* @version 1.4.3.1
|
||||
*/
|
||||
;(function($){var h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return $(window)._scrollable()};$.fn._scrollable=function(){return this.map(function(){var a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return a;var b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof f=='object'){g=f;f=0}if(typeof g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return this._scrollable().each(function(){if(e==null)return;var d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete attr[key]}});animate(g.onAfter);function animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,e,g)})}}).end()};h.max=function(a,b){var c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return a[scroll]-$(a)[c.toLowerCase()]();var d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
|
||||
12
styles/bigblow/js/jquery.zclip.min.js
vendored
Normal file
12
styles/bigblow/js/jquery.zclip.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user