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

67 lines
2.5 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.setSelected = options;
export default function () {
var _this = this;
var options = extendShorthandOptions(this.opts.setSelected);
this.opts.setSelected = extend(options, Mmenu.options.setSelected);
// Find current by URL
if (options.current == 'detect') {
var findCurrent_1 = function (url) {
url = url.split('?')[0].split('#')[0];
var anchor = _this.node.menu.querySelector('a[href="' + url + '"], a[href="' + url + '/"]');
if (anchor) {
_this.setSelected(anchor.parentElement);
}
else {
var arr = url.split('/').slice(0, -1);
if (arr.length) {
findCurrent_1(arr.join('/'));
}
}
};
this.bind('initMenu:after', function () {
findCurrent_1.call(_this, window.location.href);
});
// Remove current selected item
}
else if (!options.current) {
this.bind('initListview:after', function (listview) {
DOM.children(listview, '.mm-listitem_selected').forEach(function (listitem) {
listitem.classList.remove('mm-listitem_selected');
});
});
}
// Add :hover effect on items
if (options.hover) {
this.bind('initMenu:after', function () {
_this.node.menu.classList.add('mm-menu_selected-hover');
});
}
// Set parent item selected for submenus
if (options.parent) {
this.bind('openPanel:finish', function (panel) {
// Remove all
DOM.find(_this.node.pnls, '.mm-listitem_selected-parent').forEach(function (listitem) {
listitem.classList.remove('mm-listitem_selected-parent');
});
// Move up the DOM tree
var parent = panel['mmParent'];
while (parent) {
if (!parent.matches('.mm-listitem_vertical')) {
parent.classList.add('mm-listitem_selected-parent');
}
parent = parent.closest('.mm-panel');
parent = parent['mmParent'];
}
});
this.bind('initMenu:after', function () {
_this.node.menu.classList.add('mm-menu_selected-parent');
});
}
}