mmenu-js
Version:
The best javascript plugin for app look-alike on- and off-canvas menus with sliding submenus for your website and webapp.
87 lines (86 loc) • 3.7 kB
JavaScript
import Mmenu from '../../core/oncanvas/mmenu.oncanvas';
import options from './_options';
import { extendShorthandOptions } from './_options';
import * as DOM from '../../_modules/dom';
import { extend } from '../../_modules/helpers';
// Add the options.
Mmenu.options.lazySubmenus = options;
export default function () {
var _this = this;
var options = extendShorthandOptions(this.opts.lazySubmenus);
this.opts.lazySubmenus = extend(options, Mmenu.options.lazySubmenus);
if (options.load) {
// Prevent all sub panels from being initialized.
this.bind('initPanels:before', function () {
var panels = [];
// Find all potential subpanels.
DOM.find(_this.node.pnls, 'li').forEach(function (listitem) {
panels.push.apply(panels, DOM.children(listitem, _this.conf.panelNodetype.join(', ')));
});
// Filter out all non-panels and add the lazyload classes
panels
.filter(function (panel) { return !panel.matches('.mm-listview_inset'); })
.filter(function (panel) { return !panel.matches('.mm-nolistview'); })
.filter(function (panel) { return !panel.matches('.mm-nopanel'); })
.forEach(function (panel) {
var classnames = [
'mm-panel_lazysubmenu',
'mm-nolistview',
'mm-nopanel',
];
// IE11:
classnames.forEach(function (classname) {
panel.classList.add(classname);
});
// Better browsers:
// panel.classList.add(...classnames);
});
});
// re-enable the default opened panel to be initialized.
this.bind('initPanels:before', function () {
var panels = [];
DOM.find(_this.node.pnls, '.' + _this.conf.classNames.selected).forEach(function (listitem) {
panels.push.apply(panels, DOM.parents(listitem, '.mm-panel_lazysubmenu'));
});
if (panels.length) {
panels.forEach(function (panel) {
console.log(panel);
var classnames = [
'mm-panel_lazysubmenu',
'mm-nolistview',
'mm-nopanel',
];
// IE11:
classnames.forEach(function (classname) {
panel.classList.remove(classname);
});
// Better browsers:
// panel.classList.remove(...classnames);
});
}
});
// initPanel for current- and sub panels before openPanel
this.bind('openPanel:before', function (panel) {
var panels = DOM.find(panel, '.mm-panel_lazysubmenu').filter(function (panel) {
return !panel.matches('.mm-panel_lazysubmenu .mm-panel_lazysubmenu');
});
if (panel.matches('.mm-panel_lazysubmenu')) {
panels.unshift(panel);
}
panels.forEach(function (panel) {
var classnames = [
'mm-panel_lazysubmenu',
'mm-nolistview',
'mm-nopanel',
];
// IE11:
classnames.forEach(function (classname) {
panel.classList.remove(classname);
});
// Better browsers:
// child.classList.remove(...classnames);
_this.initPanel(panel);
});
});
}
}