// 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', 'FIXME'); }); $('p'). html(function(index, old) { return old.replace('XXX', 'XXX'); }); }); // 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() { $('
').prependTo('body'); }); // generate contents of minitoc function generateMiniToc(divId) { $('#minitoc').empty().append('

In this section

'); $('#' + divId).find('h3').each(function(i) { $("#minitoc").append("" + $(this).text() + ""); }); // 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 = $(''); for (i = 0; i < allSections.length; i++) { var item = allSections[i]; html = $('
  • ' + item.text + '
  • '); 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('
    [copy]
    '); // 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('[#A]'); $('i :contains("[#B]")') .replaceWith('[#B]'); $('i :contains("[#C]")') .replaceWith('[#C]'); }); $(function() { $('
    ^ Back to Top
    ').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() { $('
    Dashboard
    ') .appendTo('body'); $('
    ') .appendTo('body'); $('#left-panel-button').click(togglePanel); }); $(function() { var 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('
  • '+ $thisTodo + '' + ' (' + countOfTodo[$thisTodo] + ')
  • '); } $('#listOfTodo') .before('Next Actions (' + totalOfTodo + '):
    '); }); $(function() { var 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('
  • '+ $thisDone + '' + ' (' + countOfDone[$thisDone] + ')
  • '); } $('#listOfDone') .before('Done Actions (' + totalOfDone + '):
    '); }); $(function() { var 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('
  • '+ // $thisTag + ' (' + countOfTags[$thisTag] + ')
  • '); $(ul).append('
  • ' + $thisTag + '' + ' (' + countOfTags[$thisTag] + ')
  • '); } $('#listOfTags') .before('Contexts (' + totalOfTags + '):
    '); }); $(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;