/*! * SmartMenus jQuery Plugin - v1.1.1 - July 23, 2020 * http://www.smartmenus.org/ * * Copyright Vasil Dinkov, Vadikom Web Ltd. * http://vadikom.com * * Licensed MIT */ (function(factory){if(typeof define==='function'&&define.amd){define(['jquery'],factory)}else if(typeof module==='object'&&typeof module.exports==='object'){module.exports=factory(require('jquery'))}else{factory(jQuery)}}(function($){var menuTrees=[],mouse=!1,touchEvents='ontouchstart' in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(callback){return setTimeout(callback,1000/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(id){clearTimeout(id)},canAnimate=!!$.fn.animate;function initMouseDetection(disable){var eNS='.smartmenus_mouse';if(!mouseDetectionEnabled&&!disable){var firstTime=!0,lastMove=null,events={'mousemove':function(e){var thisMove={x:e.pageX,y:e.pageY,timeStamp:new Date().getTime()};if(lastMove){var deltaX=Math.abs(lastMove.x-thisMove.x),deltaY=Math.abs(lastMove.y-thisMove.y);if((deltaX>0||deltaY>0)&&deltaX<=4&&deltaY<=4&&thisMove.timeStamp-lastMove.timeStamp<=300){mouse=!0;if(firstTime){var $a=$(e.target).closest('a');if($a.is('a')){$.each(menuTrees,function(){if($.contains(this.$root[0],$a[0])){this.itemEnter({currentTarget:$a[0]});return!1}})} firstTime=!1}}} lastMove=thisMove}};events[touchEvents?'touchstart':'pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut']=function(e){if(isTouchEvent(e.originalEvent)){mouse=!1}};$(document).on(getEventsNS(events,eNS));mouseDetectionEnabled=!0}else if(mouseDetectionEnabled&&disable){$(document).off(eNS);mouseDetectionEnabled=!1}} function isTouchEvent(e){return!/^(4|mouse)$/.test(e.pointerType)} function getEventsNS(events,eNS){if(!eNS){eNS=''} var eventsNS={};for(var i in events){eventsNS[i.split(' ').join(eNS+' ')+eNS]=events[i]} return eventsNS} $.SmartMenus=function(elm,options){this.$root=$(elm);this.opts=options;this.rootId='';this.accessIdPrefix='';this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=!1;this.focusActivated=!0;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=!1;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d='perspective' in elm.style||'webkitPerspective' in elm.style;this.wasCollapsible=!1;this.init()};$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){while(menuTrees.length){menuTrees[0].destroy()} initMouseDetection(!0)},prototype:{init:function(refresh){var self=this;if(!refresh){menuTrees.push(this);this.rootId=(new Date().getTime()+Math.random()+'').replace(/\D/g,'');this.accessIdPrefix='sm-'+this.rootId+'-';if(this.$root.hasClass('sm-rtl')){this.opts.rightToLeftSubMenus=!0} var eNS='.smartmenus';this.$root.data('smartmenus',this).attr('data-smartmenus-id',this.rootId).dataSM('level',1).on(getEventsNS({'mouseover focusin':$.proxy(this.rootOver,this),'mouseout focusout':$.proxy(this.rootOut,this),'keydown':$.proxy(this.rootKeyDown,this)},eNS)).on(getEventsNS({'mouseenter':$.proxy(this.itemEnter,this),'mouseleave':$.proxy(this.itemLeave,this),'mousedown':$.proxy(this.itemDown,this),'focus':$.proxy(this.itemFocus,this),'blur':$.proxy(this.itemBlur,this),'click':$.proxy(this.itemClick,this)},eNS),'a');eNS+=this.rootId;if(this.opts.hideOnClick){$(document).on(getEventsNS({'touchstart':$.proxy(this.docTouchStart,this),'touchmove':$.proxy(this.docTouchMove,this),'touchend':$.proxy(this.docTouchEnd,this),'click':$.proxy(this.docClick,this)},eNS))} $(window).on(getEventsNS({'resize orientationchange':$.proxy(this.winResize,this)},eNS));if(this.opts.subIndicators){this.$subArrow=$('').addClass('sub-arrow');if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}} initMouseDetection()} this.$firstSub=this.$root.find('ul').each(function(){self.menuInit($(this))}).eq(0);this.$firstLink=this.$root.find('a').eq(0);if(this.opts.markCurrentItem){var reDefaultDoc=/(index|default)\.[^#\?\/]*/i,reHash=/#.*/,locHref=window.location.href.replace(reDefaultDoc,''),locHrefNoHash=locHref.replace(reHash,'');this.$root.find('a:not(.mega-menu a)').each(function(){var href=this.href.replace(reDefaultDoc,''),$this=$(this);if(href==locHref||href==locHrefNoHash){$this.addClass('current');if(self.opts.markCurrentTree){$this.parentsUntil('[data-smartmenus-id]','ul').each(function(){$(this).dataSM('parent-a').addClass('current')})}}})} this.wasCollapsible=this.isCollapsible()},destroy:function(refresh){if(!refresh){var eNS='.smartmenus';this.$root.removeData('smartmenus').removeAttr('data-smartmenus-id').removeDataSM('level').off(eNS);eNS+=this.rootId;$(document).off(eNS);$(window).off(eNS);if(this.opts.subIndicators){this.$subArrow=null}} this.menuHideAll();var self=this;this.$root.find('ul').each(function(){var $this=$(this);if($this.dataSM('scroll-arrows')){$this.dataSM('scroll-arrows').remove()} if($this.dataSM('shown-before')){if(self.opts.subMenusMinWidth||self.opts.subMenusMaxWidth){$this.css({width:'',minWidth:'',maxWidth:''}).removeClass('sm-nowrap')} if($this.dataSM('scroll-arrows')){$this.dataSM('scroll-arrows').remove()} $this.css({zIndex:'',top:'',left:'',marginLeft:'',marginTop:'',display:''})} if(($this.attr('id')||'').indexOf(self.accessIdPrefix)==0){$this.removeAttr('id')}}).removeDataSM('in-mega').removeDataSM('shown-before').removeDataSM('scroll-arrows').removeDataSM('parent-a').removeDataSM('level').removeDataSM('beforefirstshowfired').removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby').removeAttr('aria-expanded');this.$root.find('a.has-submenu').each(function(){var $this=$(this);if($this.attr('id').indexOf(self.accessIdPrefix)==0){$this.removeAttr('id')}}).removeClass('has-submenu').removeDataSM('sub').removeAttr('aria-haspopup').removeAttr('aria-controls').removeAttr('aria-expanded').closest('li').removeDataSM('sub');if(this.opts.subIndicators){this.$root.find('span.sub-arrow').remove()} if(this.opts.markCurrentItem){this.$root.find('a.current').removeClass('current')} if(!refresh){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null} menuTrees.splice($.inArray(this,menuTrees),1)}},disable:function(noOverlay){if(!this.disabled){this.menuHideAll();if(!noOverlay&&!this.opts.isPopup&&this.$root.is(':visible')){var pos=this.$root.offset();this.$disableOverlay=$('
').css({position:'absolute',top:pos.top,left:pos.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)} this.disabled=!0}},docClick:function(e){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return} if(this.visibleSubMenus.length&&!$.contains(this.$root[0],e.target)||$(e.target).closest('a').length){this.menuHideAll()}},docTouchEnd:function(e){if(!this.lastTouch){return} if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!$.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0} var self=this;this.hideTimeout=setTimeout(function(){self.menuHideAll()},350)} this.lastTouch=null},docTouchMove:function(e){if(!this.lastTouch){return} var touchPoint=e.originalEvent.touches[0];this.lastTouch.x2=touchPoint.pageX;this.lastTouch.y2=touchPoint.pageY},docTouchStart:function(e){var touchPoint=e.originalEvent.touches[0];this.lastTouch={x1:touchPoint.pageX,y1:touchPoint.pageY,target:touchPoint.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null} this.disabled=!1}},getClosestMenu:function(elm){var $closestMenu=$(elm).closest('ul');while($closestMenu.dataSM('in-mega')){$closestMenu=$closestMenu.parent().closest('ul')} return $closestMenu[0]||null},getHeight:function($elm){return this.getOffset($elm,!0)},getOffset:function($elm,height){var old;if($elm.css('display')=='none'){old={position:$elm[0].style.position,visibility:$elm[0].style.visibility};$elm.css({position:'absolute',visibility:'hidden'}).show()} var box=$elm[0].getBoundingClientRect&&$elm[0].getBoundingClientRect(),val=box&&(height?box.height||box.bottom-box.top:box.width||box.right-box.left);if(!val&&val!==0){val=height?$elm[0].offsetHeight:$elm[0].offsetWidth} if(old){$elm.hide().css(old)} return val},getStartZIndex:function(root){var zIndex=parseInt(this[root?'$root':'$firstSub'].css('z-index'));if(!root&&isNaN(zIndex)){zIndex=parseInt(this.$root.css('z-index'))} return!isNaN(zIndex)?zIndex:1},getTouchPoint:function(e){return e.touches&&e.touches[0]||e.changedTouches&&e.changedTouches[0]||e},getViewport:function(height){var name=height?'Height':'Width',val=document.documentElement['client'+name],val2=window['inner'+name];if(val2){val=Math.min(val,val2)} return val},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function($elm){return this.getOffset($elm)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function($a){return this.handleEvents()&&!this.isLinkInMegaMenu($a)},isCollapsible:function(){return this.$firstSub.css('position')=='static'},isCSSOn:function(){return this.$firstLink.css('display')!='inline'},isFixed:function(){var isFixed=this.$root.css('position')=='fixed';if(!isFixed){this.$root.parentsUntil('body').each(function(){if($(this).css('position')=='fixed'){isFixed=!0;return!1}})} return isFixed},isLinkInMegaMenu:function($a){return $(this.getClosestMenu($a[0])).hasClass('mega-menu')},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function($a,hideDeeperSubs){var $ul=$a.closest('ul'),level=$ul.dataSM('level');if(level>1&&(!this.activatedItems[level-2]||this.activatedItems[level-2][0]!=$ul.dataSM('parent-a')[0])){var self=this;$($ul.parentsUntil('[data-smartmenus-id]','ul').get().reverse()).add($ul).each(function(){self.itemActivate($(this).dataSM('parent-a'))})} if(!this.isCollapsible()||hideDeeperSubs){this.menuHideSubMenus(!this.activatedItems[level-1]||this.activatedItems[level-1][0]!=$a[0]?level-1:level)} this.activatedItems[level-1]=$a;if(this.$root.triggerHandler('activate.smapi',$a[0])===!1){return} var $sub=$a.dataSM('sub');if($sub&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow($sub)}},itemBlur:function(e){var $a=$(e.currentTarget);if(!this.handleItemEvents($a)){return} this.$root.triggerHandler('blur.smapi',$a[0])},itemClick:function(e){var $a=$(e.currentTarget);if(!this.handleItemEvents($a)){return} if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==$a.closest('ul')[0]){this.$touchScrollingSub=null;e.stopPropagation();return!1} if(this.$root.triggerHandler('click.smapi',$a[0])===!1){return!1} var $sub=$a.dataSM('sub'),firstLevelSub=$sub?$sub.dataSM('level')==2:!1;if($sub){var subArrowClicked=$(e.target).is('.sub-arrow'),collapsible=this.isCollapsible(),behaviorToggle=/toggle$/.test(this.opts.collapsibleBehavior),behaviorLink=/link$/.test(this.opts.collapsibleBehavior),behaviorAccordion=/^accordion/.test(this.opts.collapsibleBehavior);if(!$sub.is(':visible')){if(!behaviorLink||!collapsible||subArrowClicked){if(!collapsible&&this.opts.showOnClick&&firstLevelSub){this.clickActivated=!0} this.itemActivate($a,behaviorAccordion);if($sub.is(':visible')){this.focusActivated=!0;return!1}}}else if(!collapsible&&this.opts.showOnClick&&firstLevelSub){this.menuHide($sub);this.clickActivated=!1;this.focusActivated=!1;return!1}else if(collapsible&&(behaviorToggle||subArrowClicked)){this.itemActivate($a,behaviorAccordion);this.menuHide($sub);return!1}} if(!collapsible&&this.opts.showOnClick&&firstLevelSub||$a.hasClass('disabled')||this.$root.triggerHandler('select.smapi',$a[0])===!1){return!1}},itemDown:function(e){var $a=$(e.currentTarget);if(!this.handleItemEvents($a)){return} $a.dataSM('mousedown',!0)},itemEnter:function(e){var $a=$(e.currentTarget);if(!this.handleItemEvents($a)){return} if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0} var self=this;this.showTimeout=setTimeout(function(){self.itemActivate($a)},this.opts.showOnClick&&$a.closest('ul').dataSM('level')==1?1:this.opts.showTimeout)} this.$root.triggerHandler('mouseenter.smapi',$a[0])},itemFocus:function(e){var $a=$(e.currentTarget);if(!this.handleItemEvents($a)){return} if(this.focusActivated&&(!this.isTouchMode()||!$a.dataSM('mousedown'))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=$a[0])){this.itemActivate($a,!0)} this.$root.triggerHandler('focus.smapi',$a[0])},itemLeave:function(e){var $a=$(e.currentTarget);if(!this.handleItemEvents($a)){return} if(!this.isTouchMode()){$a[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}} $a.removeDataSM('mousedown');this.$root.triggerHandler('mouseleave.smapi',$a[0])},menuHide:function($sub){if(this.$root.triggerHandler('beforehide.smapi',$sub[0])===!1){return} if(canAnimate){$sub.stop(!0,!0)} if($sub.css('display')!='none'){var complete=function(){$sub.css('z-index','')};if(this.isCollapsible()){if(canAnimate&&this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,$sub,complete)}else{$sub.hide(this.opts.collapsibleHideDuration,complete)}}else{if(canAnimate&&this.opts.hideFunction){this.opts.hideFunction.call(this,$sub,complete)}else{$sub.hide(this.opts.hideDuration,complete)}} if($sub.dataSM('scroll')){this.menuScrollStop($sub);$sub.css({'touch-action':'','-ms-touch-action':'','-webkit-transform':'',transform:''}).off('.smartmenus_scroll').removeDataSM('scroll').dataSM('scroll-arrows').hide()} $sub.dataSM('parent-a').removeClass('highlighted').attr('aria-expanded','false');$sub.attr({'aria-expanded':'false','aria-hidden':'true'});var level=$sub.dataSM('level');this.activatedItems.splice(level-1,1);this.visibleSubMenus.splice($.inArray($sub,this.visibleSubMenus),1);this.$root.triggerHandler('hide.smapi',$sub[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0} var level=this.opts.isPopup?1:0;for(var i=this.visibleSubMenus.length-1;i>=level;i--){this.menuHide(this.visibleSubMenus[i])} if(this.opts.isPopup){if(canAnimate){this.$root.stop(!0,!0)} if(this.$root.is(':visible')){if(canAnimate&&this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}}} this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=!1;this.focusActivated=!1;this.zIndexInc=0;this.$root.triggerHandler('hideAll.smapi')},menuHideSubMenus:function(level){for(var i=this.activatedItems.length-1;i>=level;i--){var $sub=this.activatedItems[i].dataSM('sub');if($sub){this.menuHide($sub)}}},menuInit:function($ul){if(!$ul.dataSM('in-mega')){if($ul.hasClass('mega-menu')){$ul.find('ul').dataSM('in-mega',!0)} var level=2,par=$ul[0];while((par=par.parentNode.parentNode)!=this.$root[0]){level++} var $a=$ul.prevAll('a').eq(-1);if(!$a.length){$a=$ul.prevAll().find('a').eq(-1)} $a.addClass('has-submenu').dataSM('sub',$ul);$ul.dataSM('parent-a',$a).dataSM('level',level).parent().dataSM('sub',$ul);var aId=$a.attr('id')||this.accessIdPrefix+(++this.idInc),ulId=$ul.attr('id')||this.accessIdPrefix+(++this.idInc);$a.attr({id:aId,'aria-haspopup':'true','aria-controls':ulId,'aria-expanded':'false'});$ul.attr({id:ulId,'role':'group','aria-hidden':'true','aria-labelledby':aId,'aria-expanded':'false'});if(this.opts.subIndicators){$a[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function($sub){var $a=$sub.dataSM('parent-a'),$li=$a.closest('li'),$ul=$li.parent(),level=$sub.dataSM('level'),subW=this.getWidth($sub),subH=this.getHeight($sub),itemOffset=$a.offset(),itemX=itemOffset.left,itemY=itemOffset.top,itemW=this.getWidth($a),itemH=this.getHeight($a),$win=$(window),winX=$win.scrollLeft(),winY=$win.scrollTop(),winW=this.getViewportWidth(),winH=this.getViewportHeight(),horizontalParent=$ul.parent().is('[data-sm-horizontal-sub]')||level==2&&!$ul.hasClass('sm-vertical'),rightToLeft=this.opts.rightToLeftSubMenus&&!$li.is('[data-sm-reverse]')||!this.opts.rightToLeftSubMenus&&$li.is('[data-sm-reverse]'),subOffsetX=level==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,subOffsetY=level==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,x,y;if(horizontalParent){x=rightToLeft?itemW-subW-subOffsetX:subOffsetX;y=this.opts.bottomToTopSubMenus?-subH-subOffsetY:itemH+subOffsetY}else{x=rightToLeft?subOffsetX-subW:itemW-subOffsetX;y=this.opts.bottomToTopSubMenus?itemH-subOffsetY-subH:subOffsetY} if(this.opts.keepInViewport){var absX=itemX+x,absY=itemY+y;if(rightToLeft&&absX