frdh-mmenu-js/dist/addons/counters/mmenu.counters.js
2022-11-18 21:38:41 +01:00

66 lines
2.4 KiB
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.counters = options;
// Add the classnames.
Mmenu.configs.classNames.counters = {
counter: 'Counter'
};
export default function () {
var _this = this;
var options = extendShorthandOptions(this.opts.counters);
this.opts.counters = extend(options, Mmenu.options.counters);
// Refactor counter class
this.bind('initListview:after', function (listview) {
var cntrclss = _this.conf.classNames.counters.counter, counters = DOM.find(listview, '.' + cntrclss);
counters.forEach(function (counter) {
DOM.reClass(counter, cntrclss, 'mm-counter');
});
});
// Add the counters after a listview is initiated.
if (options.add) {
this.bind('initListview:after', function (listview) {
if (!listview.matches(options.addTo)) {
return;
}
var parent = listview.closest('.mm-panel')['mmParent'];
if (parent) {
// Check if no counter already excists.
if (!DOM.find(parent, '.mm-counter').length) {
var btn = DOM.children(parent, '.mm-btn')[0];
if (btn) {
btn.prepend(DOM.create('span.mm-counter'));
}
}
}
});
}
if (options.count) {
var count = function (listview) {
var panels = listview
? [listview.closest('.mm-panel')]
: DOM.children(_this.node.pnls, '.mm-panel');
panels.forEach(function (panel) {
var parent = panel['mmParent'];
if (!parent) {
return;
}
var counter = DOM.find(parent, '.mm-counter')[0];
if (!counter) {
return;
}
var listitems = [];
DOM.children(panel, '.mm-listview').forEach(function (listview) {
listitems.push.apply(listitems, DOM.children(listview));
});
counter.innerHTML = DOM.filterLI(listitems).length.toString();
});
};
this.bind('initListview:after', count);
this.bind('updateListview', count);
}
}