dokuwiki-template-sprintdoc.../js/sidebar.js
Andreas Gohr f293a16b9c use jQuery slector to define the elements
This makes it possible to use multiple. For now I just use all headlines
2017-02-14 11:59:08 +01:00

53 lines
1.7 KiB
JavaScript

/**
* Initialize the sidebar to have a toggleable menu system with icon support
*/
jQuery(function () {
const $nav = jQuery('#dokuwiki__aside').find('nav.nav-main');
if (!$nav.length) return;
const ELEMENT = 'h1,h2,h3,h4,h5'; // FIXME move to config
const $elements = $nav.find(ELEMENT);
$elements.each(function () {
const $me = jQuery(this);
// prepare text and the optional icon
const data = $me.text().split('@', 2);
const text = data[0].trim();
const $icon = jQuery('<span>')
.text(text.substr(0, 1).toUpperCase() + text.substr(1, 1).toLowerCase());
if (data[1]) {
const src = data[1].trim();
$icon.load(DOKU_BASE + 'lib/tpl/sprintdoc/svg.php?svg=' + src + '&e=1'); // directly embed
}
// make the new toggler
const $toggler = jQuery('<h6>')
.addClass('navi-toggle')
.text(text)
.prepend($icon)
;
// wrap all following sibling til the next element in a wrapper
const $wrap = jQuery('<div>').addClass('navi-pane');
const $sibs = $me.nextAll();
for (let i = 0; i < $sibs.length; i++) {
const $sib = jQuery($sibs[i]);
if($sib.is(ELEMENT)) break;
$sib.detach().appendTo($wrap);
}
$wrap.hide();
$wrap.insertAfter($me);
// replace element with toggler
$me.replaceWith($toggler);
// add toggling the wrapper
$toggler.click(function () {
$wrap.dw_toggle(undefined, function () {
$me.toggleClass('open');
});
});
});
});