Revision control

++ var vOffset_init = 65;
++ var vOffset = vOffset_init;
++ var c = 'collapsed';
++
++ function toggleList(toggle, content, maxItems) {
++ if (toggle.css('display') == 'none') {
++ vOffset = vOffset_init;
++ toggle.removeClass(c);
++ content.show();
++ return;
++ } else
++ vOffset = 8;
++
++ if (maxItems > content.children().length)
++ return;
++ content.hide();
++ toggle.addClass(c);
++ }
++
++ $(function () {
++ $('a[href*=#]:not([href=#])').on('click', function (e) {
++ if (e.which == 2 || e.metaKey || e.ctrlKey || e.shiftKey)
++ return true;
++ var target = $(this.hash.replace(/(\.)/g, "\\$1"));
++ target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
++ if (target.length) {
++ setTimeout(function () {
++ $('html, body').animate({scrollTop: target.offset().top - vOffset}, 50);}, 50);
++ }
++ });
++ });
++
++ $(window).load(function () {
++ var hashChanged = function() {
++ var h = window.location.hash;
++ var re = /[^a-z0-9_\.\#\-]/i
++ if (h.length > 1 && !re.test(h)) {
++ setTimeout(function () {
++ var tgt = $(h.replace(/(\.)/g, "\\$1"));
++ tgt = tgt.length ? tgt : $('[name=' + h.slice(1) + ']');
++ $(window).scrollTop(tgt.offset().top - vOffset);
++ }, 0);
++ }
++ }
++ $(window).bind('hashchange', hashChanged);
++ hashChanged.call();
++
++ if (!$('.sidebar toc').is(':empty')) {
++ $('<div id="toc-toggle"></div>').prependTo('.sidebar .toc');
++ var toc = $('.sidebar .toc ul');
++ var tocToggle = $('#toc-toggle');
++ var tocCallback = function() { toggleList(tocToggle, toc, 4); };
++
++ $('#toc-toggle').on('click', function(e) {
++ e.stopPropagation();
++ toc.toggle();
++ tocToggle.toggleClass(c);
++ });
++
++ tocCallback.call();
++ $(window).resize(tocCallback);
++ }
++
++ if (!$('#sidebar-content').is(':empty')) {
++ $('#sidebar-content h2').first().clone().prependTo('#sidebar-content');
++ $('<div id="sidebar-toggle"></div>').prependTo('#sidebar-content');
++ var sb = $('#sidebar-content .sectionlist');
++ var sbToggle = $('#sidebar-toggle');
++ var sbCallback = function() { toggleList(sbToggle, sb, 0); };
++
++ $('#sidebar-toggle').on('click', function(e) {
++ e.stopPropagation();
++ sb.toggle();
++ sbToggle.toggleClass(c);
++ });
++
++ sbCallback.call();
++ $(window).resize(sbCallback);
++ }
++ });