metismenu
Version:
A collapsible jQuery menu plugin
9 lines • 4.55 kB
JavaScript
/*!
* metismenu https://github.com/onokumus/metismenu#readme
* A collapsible jQuery menu plugin
* @version 3.1.0
* @author Osman Nuri Okumus <onokumus@gmail.com> (https://github.com/onokumus)
* @license: MIT
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).metisMenu={},e.$)}(this,function(e,t){"use strict";const n=(e=>{const t="transitionend",n={TRANSITION_END:"mmTransitionEnd",triggerTransitionEnd(n){e(n).trigger(t)},supportsTransitionEnd:()=>Boolean(t)};function i(t){let i=!1;return e(this).one(n.TRANSITION_END,()=>{i=!0}),setTimeout(()=>{i||n.triggerTransitionEnd(this)},t),this}return e.fn.mmEmulateTransitionEnd=i,e.event.special[n.TRANSITION_END]={bindType:t,delegateType:t,handle(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}},n})(t),i="metisMenu",s="metisMenu",r=`.${s}`,a=t.fn[i],o={toggle:!0,preventDefault:!0,triggerElement:"a",parentTrigger:"li",subMenu:"ul"},g={SHOW:`show${r}`,SHOWN:`shown${r}`,HIDE:`hide${r}`,HIDDEN:`hidden${r}`,CLICK_DATA_API:`click${r}.data-api`},h="metismenu",l="mm-active",d="mm-show",f="mm-collapse",c="mm-collapsing";class u{constructor(e,t){this.element=e,this.config={...o,...t},this.transitioning=null,this.init()}init(){const e=this,n=this.config,i=t(this.element);i.addClass(h),i.find(`${n.parentTrigger}.${l}`).children(n.triggerElement).attr("aria-expanded","true"),i.find(`${n.parentTrigger}.${l}`).parents(n.parentTrigger).addClass(l),i.find(`${n.parentTrigger}.${l}`).parents(n.parentTrigger).children(n.triggerElement).attr("aria-expanded","true"),i.find(`${n.parentTrigger}.${l}`).has(n.subMenu).children(n.subMenu).addClass(`${f} ${d}`),i.find(n.parentTrigger).not(`.${l}`).has(n.subMenu).children(n.subMenu).addClass(f),i.find(n.parentTrigger).children(n.triggerElement).on(g.CLICK_DATA_API,function(i){const s=t(this);if("true"===s.attr("aria-disabled"))return;n.preventDefault&&"#"===s.attr("href")&&i.preventDefault();const r=s.parent(n.parentTrigger),a=r.siblings(n.parentTrigger),o=a.children(n.triggerElement);r.hasClass(l)?(s.attr("aria-expanded","false"),e.removeActive(r)):(s.attr("aria-expanded","true"),e.setActive(r),n.toggle&&(e.removeActive(a),o.attr("aria-expanded","false"))),n.onTransitionStart&&n.onTransitionStart(i)})}setActive(e){t(e).addClass(l);const n=t(e).children(this.config.subMenu);n.length>0&&!n.hasClass(d)&&this.show(n)}removeActive(e){t(e).removeClass(l);const n=t(e).children(`${this.config.subMenu}.${d}`);n.length>0&&this.hide(n)}show(e){if(this.transitioning||t(e).hasClass(c))return;const i=t(e),s=t.Event(g.SHOW);if(i.trigger(s),s.isDefaultPrevented())return;if(i.parent(this.config.parentTrigger).addClass(l),this.config.toggle){const e=i.parent(this.config.parentTrigger).siblings().children(`${this.config.subMenu}.${d}`);this.hide(e)}i.removeClass(f).addClass(c).height(0),this.setTransitioning(!0);i.height(e[0].scrollHeight).one(n.TRANSITION_END,()=>{this.config&&this.element&&(i.removeClass(c).addClass(`${f} ${d}`).height(""),this.setTransitioning(!1),i.trigger(g.SHOWN))}).mmEmulateTransitionEnd(350)}hide(e){if(this.transitioning||!t(e).hasClass(d))return;const i=t(e),s=t.Event(g.HIDE);if(i.trigger(s),s.isDefaultPrevented())return;i.parent(this.config.parentTrigger).removeClass(l),i.height(i.height())[0].offsetHeight,i.addClass(c).removeClass(f).removeClass(d),this.setTransitioning(!0);const r=()=>{this.config&&this.element&&(this.transitioning&&this.config.onTransitionEnd&&this.config.onTransitionEnd(),this.setTransitioning(!1),i.trigger(g.HIDDEN),i.removeClass(c).addClass(f))};0===i.height()||"none"===i.css("display")?r():i.height(0).one(n.TRANSITION_END,r).mmEmulateTransitionEnd(350)}setTransitioning(e){this.transitioning=e}dispose(){t.removeData(this.element,s),t(this.element).find(this.config.parentTrigger).children(this.config.triggerElement).off(g.CLICK_DATA_API),this.transitioning=null,this.config=null,this.element=null}static jQueryInterface(e){return this.each(function(){const n=t(this);let i=n.data(s);const r={...o,...n.data(),..."object"==typeof e&&e?e:{}};if(i||(i=new u(this,r),n.data(s,i)),"string"==typeof e){if(void 0===i[e])throw new Error(`No method named "${e}"`);i[e]()}})}}t.fn[i]=u.jQueryInterface,t.fn[i].Constructor=u,t.fn[i].noConflict=()=>(t.fn[i]=a,u.jQueryInterface),e.MetisMenu=u,e.default=u,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=metisMenu.min.js.map