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

47 lines
1.8 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.dividers = options;
// Add the classnames.
Mmenu.configs.classNames.divider = 'Divider';
export default function () {
var _this = this;
var options = extendShorthandOptions(this.opts.dividers);
this.opts.dividers = extend(options, Mmenu.options.dividers);
// Refactor divider classname
this.bind('initListview:after', function (listview) {
DOM.children(listview).forEach(function (listitem) {
DOM.reClass(listitem, _this.conf.classNames.divider, 'mm-divider');
if (listitem.matches('.mm-divider')) {
listitem.classList.remove('mm-listitem');
}
});
});
// Add dividers
if (options.add) {
this.bind('initListview:after', function (listview) {
if (!listview.matches(options.addTo)) {
return;
}
DOM.find(listview, '.mm-divider').forEach(function (divider) {
divider.remove();
});
var lastletter = '', listitems = DOM.children(listview);
DOM.filterLI(listitems).forEach(function (listitem) {
var letter = DOM.children(listitem, '.mm-listitem__text')[0]
.textContent.trim()
.toLowerCase()[0];
if (letter.length && letter != lastletter) {
lastletter = letter;
var divider = DOM.create('li.mm-divider');
divider.textContent = letter;
listview.insertBefore(divider, listitem);
}
});
});
}
}