New sidebar JavaScript logic

This implements the JS logic as discussed in our meeting. A sidebar can
now contain virtually any wiki syntax. (currently hardcoded) H2 elements
will toggle all their following content which is wrapped in a wrapper
div.

This is currently implemented on top of the old JavaScript which should
be removed.

The toggle element should be made configurable.

We probably want to reuse some of the toggle logic for the user tools.
This commit is contained in:
Andreas Gohr 2017-02-13 15:17:18 +01:00
commit 9d8dba1489
2 changed files with 60 additions and 0 deletions

57
js/sidebar.js Normal file
View file

@ -0,0 +1,57 @@
/**
* 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 = 'h2'; // 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();
const $svg = jQuery('<img>');
$svg.attr('src', DOKU_BASE + 'lib/tpl/sprintdoc/svg.php?svg='+src+'&f=__link__');
$svg.on('load', function () {
$icon.html($svg);
});
}
// 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++) {
if ($sibs[i].tagName.toLowerCase() === ELEMENT) break;
const $sib = jQuery($sibs[i]);
$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');
});
});
});
});

View file

@ -33,3 +33,6 @@ var $_LANG = {};
/* DOKUWIKI:include js/sidebar-menu.js */
/* DOKUWIKI:include js/meta-box.js */
/* DOKUWIKI:include js/sidebar.js */