PageSourceSearch

https://shinhan.co.id/wp-content/cache/speedycache/shinhan.co.id/assets/12479036a5b1203b-maxmegamenu.js

js shinhan.co.id collected 2026-10-01 12:07:21 UTC 29,232 bytes, 811 lines download raw bytes

1(function($){
2"use strict";
3let instanceCounter=0;
4$.maxmegamenu=function(menu, options){
5const plugin=this;
6const $menu=$(menu);
7const $wrap=$menu.parent();
8const $toggle_bar=$menu.siblings(".mega-menu-toggle");
9const menuId=$menu.attr("id");
10const instanceId=menuId + '-' + (++instanceCounter);
11const docEventNamespace='.megamenu-' + instanceId;
12const items_with_submenus=$([
13"li.mega-menu-megamenu.mega-menu-item-has-children",
14"li.mega-menu-flyout.mega-menu-item-has-children",
15"li.mega-menu-tabbed > ul.mega-sub-menu > li.mega-menu-item-has-children",
16"li.mega-menu-flyout li.mega-menu-item-has-children"
17].join(","), $menu);
18const collapse_children_parents=$("li.mega-menu-megamenu li.mega-menu-item-has-children.mega-collapse-children > a.mega-menu-link", $menu);
19const focusable_selector="a.mega-menu-link, button.mega-menu-link, .mega-search span[role=button]";
20const tab_key="Tab";
21const escape_key="Escape";
22const enter_key="Enter";
23const space_key=" ";
24const left_arrow_key="ArrowLeft";
25const up_arrow_key="ArrowUp";
26const right_arrow_key="ArrowRight";
27const down_arrow_key="ArrowDown";
28const defaults={
29event:                $menu.attr("data-event"),
30effect:               $menu.attr("data-effect"),
31effect_speed:         parseInt($menu.attr("data-effect-speed")),
32effect_mobile:        $menu.attr("data-effect-mobile"),
33effect_speed_mobile:  parseInt($menu.attr("data-effect-speed-mobile")),
34panel_width:          $menu.attr("data-panel-width"),
35panel_inner_width:    $menu.attr("data-panel-inner-width"),
36mobile_force_width:   $menu.attr("data-mobile-force-width"),
37mobile_overlay:       $menu.attr("data-mobile-overlay"),
38mobile_state:         $menu.attr("data-mobile-state"),
39mobile_direction:     $menu.attr("data-mobile-direction"),
40second_click:         $menu.attr("data-second-click"),
41vertical_behaviour:   $menu.attr("data-vertical-behaviour"),
42document_click:       $menu.attr("data-document-click"),
43breakpoint:           $menu.attr("data-breakpoint"),
44unbind_events:        $menu.attr("data-unbind"),
45hover_intent_timeout: $menu.attr("data-hover-intent-timeout") ?? 300,
46hover_intent_interval: $menu.attr("data-hover-intent-interval") ?? 100
47};
48plugin.settings={};
49let html_body_class_timeout;
50plugin.addAnimatingClass=function(element){
51if(plugin.settings.effect==="disabled"){
52return;
53}
54$(".mega-animating", $wrap).removeClass("mega-animating");
55const timeout=plugin.settings.effect_speed + parseInt(plugin.settings.hover_intent_timeout, 10);
56element.addClass("mega-animating");
57setTimeout(function(){
58element.removeClass("mega-animating");
59}, timeout);
60};
61plugin.hideAllPanels=function(){
62$(".mega-toggle-on > a.mega-menu-link", $menu).each(function(){
63plugin.hidePanel($(this), false);
64});
65};
66plugin.expandMobileSubMenus=function(){
67if(plugin.settings.mobile_direction!=='vertical'){
68return;
69}
70$(".mega-menu-item-has-children.mega-expand-on-mobile > a.mega-menu-link", $menu).each(function(){
71plugin.showPanel($(this), true);
72});
73if(plugin.settings.mobile_state==='expand_all'){
74$(".mega-menu-item-has-children:not(.mega-toggle-on) > a.mega-menu-link", $menu).each(function(){
75plugin.showPanel($(this), true);
76});
77}
78if(plugin.settings.mobile_state==='expand_active'){
79const activeItemSelectors=[
80"li.mega-current-menu-ancestor.mega-menu-item-has-children > a.mega-menu-link",
81"li.mega-current-menu-item.mega-menu-item-has-children > a.mega-menu-link",
82"li.mega-current-menu-parent.mega-menu-item-has-children > a.mega-menu-link",
83"li.mega-current_page_ancestor.mega-menu-item-has-children > a.mega-menu-link",
84"li.mega-current_page_item.mega-menu-item-has-children > a.mega-menu-link"
85];
86$menu.find(activeItemSelectors.join(', ')).each(function(){
87plugin.showPanel($(this), true);
88});
89}};
90plugin.hideSiblingPanels=function(anchor, immediate){
91anchor.parent().parent().find(".mega-toggle-on").children("a.mega-menu-link").each(function(){
92plugin.hidePanel($(this), immediate);
93});
94};
95plugin.isDesktopView=function(){
96const width=Math.max(document.documentElement.clientWidth||0, window.innerWidth||0);
97return width > plugin.settings.breakpoint;
98};
99plugin.isMobileView=function(){
100return !plugin.isDesktopView();
101};
102plugin.isHorizontalMobileSubmenuMode=function(){
103return plugin.isMobileView()&&plugin.isMobileOffCanvas()&&plugin.settings.mobile_direction==="horizontal";
104};
105const getBackLink=function($submenu){
106return $submenu.find("> li.mega-mobile-back:visible > button.mega-mobile-back-link").first();
107};
108const getDeepestOpenPanel=function(){
109return $("li.mega-toggle-on:not(.mega-collapse-children) > ul.mega-sub-menu", $menu).last();
110};
111plugin.getFocusableItemsInSubmenu=function($submenu){
112return $submenu
113.find(focusable_selector)
114.not(".mega-mobile-back-link")
115.filter(function(){
116return $(this).is(":visible")&&window.getComputedStyle(this).visibility!=='hidden';
117});
118};
119plugin.focusFirstItemInOpenedSubmenu=function($item){
120if(! plugin.isHorizontalMobileSubmenuMode()||! $wrap.hasClass("mega-keyboard-navigation")){
121return;
122}
123const $submenu=$item.children("ul.mega-sub-menu");
124if(!$submenu.length){
125return;
126}
127const $firstFocusable=$submenu
128.find(focusable_selector)
129.not(".mega-mobile-back-link")
130.filter(":visible")
131.first();
132if($firstFocusable.length){
133$firstFocusable.trigger("focus");
134}else{
135getBackLink($submenu).trigger("focus");
136}};
137plugin.deferFocusFirstItemInOpenedSubmenu=function($item){
138const delay=Math.min(120, parseInt(plugin.settings.effect_speed_mobile, 10)||0);
139setTimeout(function(){
140plugin.focusFirstItemInOpenedSubmenu($item);
141setTimeout(function(){
142const focusedInSubmenu=$item.find("ul.mega-sub-menu").has(document.activeElement).length!==0;
143if(!focusedInSubmenu){
144plugin.focusFirstItemInOpenedSubmenu($item);
145}}, 40);
146}, delay);
147};
148const resolveAnchor=function(anchor){
149if(typeof anchor==='number'||(typeof anchor==='string'&&anchor.trim()!==''&&!isNaN(anchor))){
150return $("li.mega-menu-item-" + anchor, $menu).find("a.mega-menu-link").first();
151}
152if(anchor.is("li.mega-menu-item")){
153return anchor.find("a.mega-menu-link").first();
154}
155return anchor;
156};
157plugin.showPanel=function(anchor, immediate){
158anchor=resolveAnchor(anchor);
159const $item=anchor.parent();
160const isDesktop=plugin.isDesktopView();
161const isMobile = !isDesktop;
162$item.triggerHandler("before_open_panel");
163$item.find("[aria-expanded]").first().attr("aria-expanded", "true");
164$(".mega-animating", $wrap).removeClass("mega-animating");
165if(isMobile&&$item.hasClass("mega-hide-sub-menu-on-mobile")){
166return;
167}
168if(isDesktop&&($menu.hasClass("mega-menu-horizontal")||$menu.hasClass("mega-menu-vertical"))&&!$item.hasClass("mega-collapse-children")){
169plugin.hideSiblingPanels(anchor, true);
170}
171if((isMobile&&$wrap.hasClass("mega-keyboard-navigation"))||plugin.settings.vertical_behaviour==="accordion"){
172plugin.hideSiblingPanels(anchor, false);
173}
174plugin.calculateDynamicSubmenuWidths(anchor);
175if(plugin.shouldUseSlideAnimation(anchor, immediate)){
176const speed=isMobile ? plugin.settings.effect_speed_mobile:plugin.settings.effect_speed;
177anchor.siblings(".mega-sub-menu").css("display", "none").animate({"height":"show", "paddingTop":"show", "paddingBottom":"show", "minHeight":"show"}, speed, function(){
178$(this).css("display", "");
179});
180}
181$item.addClass("mega-toggle-on").triggerHandler("open_panel");
182plugin.deferFocusFirstItemInOpenedSubmenu($item);
183};
184plugin.shouldUseSlideAnimation=function(anchor, immediate){
185if(immediate===true){
186return false;
187}
188if(anchor.parent().hasClass("mega-collapse-children")){
189return true;
190}
191const isDesktop=plugin.isDesktopView();
192if(isDesktop&&plugin.settings.effect==="slide"){
193return true;
194}
195if(!isDesktop){
196if(plugin.settings.effect_mobile==="slide"){
197return true;
198}
199if(plugin.isMobileOffCanvas()){
200return plugin.settings.mobile_direction!=="horizontal";
201}}
202return false;
203};
204plugin.hidePanel=function(anchor, immediate){
205anchor=resolveAnchor(anchor);
206const $item=anchor.parent();
207const $submenu=anchor.siblings(".mega-sub-menu");
208const isMobile=plugin.isMobileView();
209$item.triggerHandler("before_close_panel");
210$item.find("[aria-expanded]").first().attr("aria-expanded", "false");
211if(plugin.shouldUseSlideAnimation(anchor)){
212const speed=isMobile ? plugin.settings.effect_speed_mobile:plugin.settings.effect_speed;
213$submenu.animate({"height":"hide", "paddingTop":"hide", "paddingBottom":"hide", "minHeight":"hide"}, speed, function(){
214$submenu.css("display", "");
215$item.removeClass("mega-toggle-on").triggerHandler("close_panel");
216});
217return;
218}
219if(immediate){
220$submenu.css("display", "none").delay(plugin.settings.effect_speed).queue(function(){
221$(this).css("display", "").dequeue();
222});
223}
224$submenu.find(".widget_media_video video").each(function(){
225if(this.player){
226this.player.pause();
227}});
228$item.removeClass("mega-toggle-on").triggerHandler("close_panel");
229plugin.addAnimatingClass($item);
230};
231const resolveWidthEl=function(val){
232return val==='$menu' ? $menu:val==='$wrap' ? $wrap:$(val);
233};
234plugin.calculateDynamicSubmenuWidths=function(anchor){
235const $item=anchor.parent();
236const $submenu=anchor.siblings(".mega-sub-menu");
237const isDesktop=plugin.isDesktopView();
238const isTopLevelMegamenu=$item.hasClass("mega-menu-megamenu")&&$item.parent().hasClass("max-mega-menu");
239if(isTopLevelMegamenu&&plugin.settings.panel_width){
240if(isDesktop){
241const submenu_offset=$menu.offset();
242if(plugin.settings.panel_width==='100vw'){
243const target_offset=$('body').offset();
244$submenu.css({
245left: (target_offset.left - submenu_offset.left) + "px"
246});
247}else{
248const $panel_width_el=resolveWidthEl(plugin.settings.panel_width);
249if($panel_width_el.length > 0){
250$submenu.css({
251width: $panel_width_el.outerWidth(),
252left: ($panel_width_el.offset().left - submenu_offset.left) + "px"
253});
254}}
255}else{
256$submenu.css({
257width: "",
258left: ""
259});
260}}
261if(isTopLevelMegamenu&&plugin.settings.panel_inner_width){
262const $panel_inner_width_el=resolveWidthEl(plugin.settings.panel_inner_width);
263if($panel_inner_width_el.length > 0){
264const target_width=parseInt($panel_inner_width_el.width(), 10);
265$submenu.css({
266"paddingLeft": "",
267"paddingRight": ""
268});
269const submenu_width=parseInt($submenu.innerWidth(), 10);
270if(isDesktop&&target_width > 0&&target_width < submenu_width){
271$submenu.css({
272"paddingLeft": (submenu_width - target_width) / 2 + "px",
273"paddingRight": (submenu_width - target_width) / 2 + "px"
274});
275}}
276}};
277const recalculateSubmenuWidths=function(){
278plugin.calculateDynamicSubmenuWidths($("> li.mega-menu-megamenu > a.mega-menu-link", $menu));
279};
280plugin.bindClickEvents=function(){
281plugin.unbindClickEvents();
282let dragging=false;
283$(document).on({
284["touchmove" + docEventNamespace]: function(){ dragging=true; },
285["touchstart" + docEventNamespace]: function(){ dragging=false; }});
286$(document).on("click" + docEventNamespace + " touchend" + docEventNamespace, function(e){
287if(!dragging&&plugin.settings.document_click==="collapse"&&! $(e.target).closest(".mega-menu-wrap").length){
288plugin.hideAllPanels();
289plugin.hideMobileMenu();
290}
291dragging=false;
292});
293collapse_children_parents.off("click.megamenu touchend.megamenu");
294const clickable_parents=$("> a.mega-menu-link", items_with_submenus).add(collapse_children_parents);
295clickable_parents.on("touchend.megamenu", function(e){
296if(plugin.settings.event==="hover_intent"){
297plugin.unbindHoverIntentEvents();
298}
299if(plugin.settings.event==="hover"){
300plugin.unbindHoverEvents();
301}});
302clickable_parents.on("click.megamenu", function(e){
303if($(e.target).hasClass('mega-indicator')){
304return;
305}
306if(plugin.isDesktopView()&&$(this).parent().hasClass("mega-toggle-on")&&$(this).closest("ul.mega-sub-menu").parent().hasClass("mega-menu-tabbed")){
307if(plugin.settings.second_click==="go"){
308return;
309}else{
310e.preventDefault();
311return;
312}}
313if(dragging){
314return;
315}
316if(plugin.isMobileView()&&$(this).parent().hasClass("mega-hide-sub-menu-on-mobile")){
317return;
318}
319if((plugin.settings.second_click==="go"||$(this).parent().hasClass("mega-click-click-go"))&&$(this).attr("href")!==undefined){
320if(!$(this).parent().hasClass("mega-toggle-on")){
321e.preventDefault();
322plugin.showPanel($(this));
323}}else{
324e.preventDefault();
325if($(this).parent().hasClass("mega-toggle-on")){
326plugin.hidePanel($(this), false);
327}else{
328plugin.showPanel($(this));
329}}
330});
331if(plugin.settings.second_click==="disabled"){
332clickable_parents.off("click.megamenu");
333}
334$(".mega-close-after-click:not(.mega-menu-item-has-children) > a.mega-menu-link", $menu).on("click.megamenu", function(){
335plugin.hideAllPanels();
336plugin.hideMobileMenu();
337});
338$("button.mega-close", $wrap).on("click.megamenu", function(e){
339plugin.hideMobileMenu();
340});
341};
342plugin.bindHoverEvents=function(){
343items_with_submenus.on({
344"mouseenter.megamenu":function(){
345plugin.unbindClickEvents();
346if(! $(this).hasClass("mega-toggle-on")){
347plugin.showPanel($(this).children("a.mega-menu-link"));
348}},
349"mouseleave.megamenu":function(){
350if($(this).hasClass("mega-toggle-on")&&! $(this).hasClass("mega-disable-collapse")&&! $(this).parent().parent().hasClass("mega-menu-tabbed")){
351plugin.hidePanel($(this).children("a.mega-menu-link"), false);
352}}
353});
354};
355plugin.bindHoverIntentEvents=function(){
356items_with_submenus.hoverIntent({
357over: function (){
358plugin.unbindClickEvents();
359if(! $(this).hasClass("mega-toggle-on")){
360plugin.showPanel($(this).children("a.mega-menu-link"));
361}},
362out: function (){
363if($(this).hasClass("mega-toggle-on")&&! $(this).hasClass("mega-disable-collapse")&&! $(this).parent().parent().hasClass("mega-menu-tabbed")){
364plugin.hidePanel($(this).children("a.mega-menu-link"), false);
365}},
366timeout: plugin.settings.hover_intent_timeout,
367interval: plugin.settings.hover_intent_interval
368});
369};
370plugin.isMobileOffCanvas=function(){
371return plugin.settings.effect_mobile==='slide_left'||plugin.settings.effect_mobile==='slide_right';
372};
373plugin.shouldGoToNextTopLevelItem=function(key){
374return(( key===right_arrow_key&&plugin.isDesktopView())||(key===down_arrow_key&&plugin.isMobileView()))&&$menu.hasClass("mega-menu-horizontal");
375};
376plugin.shouldGoToPreviousTopLevelItem=function(key){
377return(( key===left_arrow_key&&plugin.isDesktopView())||(key===up_arrow_key&&plugin.isMobileView()))&&$menu.hasClass("mega-menu-horizontal");
378};
379plugin.bindKeyboardEvents=function(){
380const $firstFocusable=$menu.find("a.mega-menu-link").first();
381const $lastFocusable=$wrap.find("button.mega-close").first();
382const focusableLinkSelector=focusable_selector.split(", ").map(s=> "> " + s).join(", ");
383const togglePanelForAnchor=function(anchor){
384if(!anchor||!anchor.length) return;
385if(anchor.parent().hasClass("mega-toggle-on")&&!anchor.closest("ul.mega-sub-menu").parent().hasClass("mega-menu-tabbed")){
386plugin.hidePanel(anchor);
387}else{
388plugin.showPanel(anchor);
389}};
390const closeNearestOpenPanelAndRefocus=function(){
391const $focused=$menu[0].contains(document.activeElement) ? $(document.activeElement):$();
392const $parentAnchor=$("> a.mega-menu-link", $focused.closest(".mega-toggle-on"));
393if($parentAnchor.length){
394plugin.hidePanel($parentAnchor);
395$parentAnchor.trigger("focus");
396return true;
397}
398return false;
399};
400const handleTabKey=function(e, $active, isOffCanvasHorizontal, isMobileOffCanvas){
401if($active.is($lastFocusable)&&isMobileOffCanvas){
402if(!e.shiftKey){
403e.preventDefault();
404const $backLink=isOffCanvasHorizontal ? getBackLink(getDeepestOpenPanel()):$();
405($backLink.length ? $backLink:$firstFocusable).trigger('focus');
406}else if(isOffCanvasHorizontal){
407const $last=plugin.getFocusableItemsInSubmenu(getDeepestOpenPanel()).last();
408if($last.length){ e.preventDefault(); $last.trigger('focus'); }}
409return;
410}
411if(isMobileOffCanvas&&e.shiftKey&&$active.is($firstFocusable)){
412e.preventDefault();
413$lastFocusable.trigger('focus');
414return;
415}
416if(isOffCanvasHorizontal){
417const $deepestPanel=getDeepestOpenPanel();
418if($deepestPanel.length&&!$deepestPanel.has($active).length){
419e.preventDefault();
420if(!e.shiftKey){
421const $backLink=getBackLink($deepestPanel);
422($backLink.length ? $backLink:plugin.getFocusableItemsInSubmenu($deepestPanel).first()).trigger('focus');
423}else{
424$lastFocusable.trigger('focus');
425}
426return;
427}
428const $submenu=$active.parentsUntil($menu, "ul.mega-sub-menu")
429.filter(function(){
430const $p=$(this).parent();
431return $p.hasClass("mega-toggle-on")&&!$p.hasClass("mega-collapse-children");
432})
433.first();
434if($submenu.length){
435if(!e.shiftKey){
436const $items=plugin.getFocusableItemsInSubmenu($submenu);
437if($items.length&&$active.is($items.last())){
438e.preventDefault();
439$lastFocusable.trigger('focus');
440}}else if($active.hasClass("mega-mobile-back-link")){
441e.preventDefault();
442$lastFocusable.trigger('focus');
443}else{
444const $items=plugin.getFocusableItemsInSubmenu($submenu);
445const $backLink=getBackLink($submenu);
446if($items.length&&$backLink.length&&$active.is($items.first())){
447e.preventDefault();
448$backLink.trigger('focus');
449}}
450}}
451};
452const handleToggleBarTrigger=function(e){
453e.preventDefault();
454if($toggle_bar.hasClass("mega-menu-open")){
455plugin.hideMobileMenu();
456}else{
457plugin.showMobileMenu();
458html_body_class_timeout=setTimeout(function(){
459$menu.find("a.mega-menu-link").first().trigger('focus');
460}, plugin.settings.effect_speed_mobile);
461}};
462const handleSpaceKey=function(e, $active){
463if($active.is("a.mega-menu-link")){
464e.preventDefault();
465if($active.parent().is(items_with_submenus)) togglePanelForAnchor($active);
466}else if($active.is(".mega-indicator")){
467e.preventDefault();
468togglePanelForAnchor($active.parent());
469}};
470const handleEscapeKey=function(){
471const submenu_open=$(".mega-toggle-on", $menu).length!==0;
472if(submenu_open&&closeNearestOpenPanelAndRefocus()) return;
473if(plugin.isMobileView()&&!submenu_open) plugin.hideMobileMenu();
474};
475const handleEnterKey=function(e, $active){
476if($active.is(".mega-indicator")){
477togglePanelForAnchor($active.parent());
478return;
479}
480if($active.parent().is(items_with_submenus)){
481if(plugin.isMobileView()&&$active.parent().is(".mega-hide-sub-menu-on-mobile")) return;
482if(!$active.is("[href]")){ togglePanelForAnchor($active); return; }
483if($active.parent().hasClass("mega-toggle-on")&&!$active.closest("ul.mega-sub-menu").parent().hasClass("mega-menu-tabbed")) return;
484e.preventDefault();
485plugin.showPanel($active);
486}};
487const handleArrowUpDown=function(e, goingDown){
488e.preventDefault();
489const $activeSubmenu=getDeepestOpenPanel();
490if($activeSubmenu.length){
491const $backLink=getBackLink($activeSubmenu);
492const $items=plugin.getFocusableItemsInSubmenu($activeSubmenu);
493const focusOrder=[];
494if($backLink.length) focusOrder.push($backLink[0]);
495$items.each(function(){ focusOrder.push(this); });
496if($lastFocusable.length) focusOrder.push($lastFocusable[0]);
497const idx=focusOrder.indexOf(document.activeElement);
498const nextIdx=(idx < 0)
499? (goingDown ? 0:focusOrder.length - 1)
500: (idx + (goingDown ? 1:-1) + focusOrder.length) % focusOrder.length;
501$(focusOrder[nextIdx]).trigger('focus');
502}else{
503const $topLinks=$menu.children("li.mega-menu-item:visible").find(focusableLinkSelector);
504const idx=$topLinks.index(document.activeElement);
505if(idx >=0){
506const nextIdx=(idx + (goingDown ? 1:-1) + $topLinks.length) % $topLinks.length;
507$topLinks.eq(nextIdx).trigger('focus');
508}}
509};
510const handleArrowLeftRight=function(e, goingToNext){
511e.preventDefault();
512const $topLinks=$menu.children("li.mega-menu-item:visible").find(focusableLinkSelector);
513const $topLink=$(document.activeElement)
514.closest($menu.children("li.mega-menu-item"))
515.find(focusableLinkSelector).first();
516const idx=$topLinks.index($topLink);
517const nextIdx=goingToNext ? idx + 1:idx - 1;
518if(idx >=0&&nextIdx >=0){
519plugin.hideAllPanels();
520$topLinks.eq(nextIdx).trigger('focus');
521}};
522$wrap.on("keyup.megamenu", ".max-mega-menu, .mega-menu-toggle", function(e){
523if(e.key!==tab_key) return;
524$wrap.addClass("mega-keyboard-navigation");
525plugin.bindClickEvents();
526const $target=$(e.target);
527if(plugin.isDesktopView()&&$target.is(".mega-menu-link")&&$target.parent().parent().hasClass('max-mega-menu')){
528plugin.hideAllPanels();
529}});
530$wrap.on("keydown.megamenu", "a.mega-menu-link, button.mega-menu-link, button.mega-mobile-back-link, .mega-indicator, .mega-menu-toggle-block, .mega-menu-toggle-animated-block button, button.mega-close", function(e){
531if(!$wrap.hasClass("mega-keyboard-navigation")) return;
532const key=e.key;
533const $active=$(e.target);
534const isOffCanvasHorizontal=plugin.isHorizontalMobileSubmenuMode();
535const isMobileOffCanvas=plugin.isMobileView()&&plugin.isMobileOffCanvas();
536switch (key){
537case tab_key:
538handleTabKey(e, $active, isOffCanvasHorizontal, isMobileOffCanvas);
539break;
540case space_key:
541if($active.is(".mega-menu-toggle-block button, .mega-menu-toggle-animated-block button")){
542handleToggleBarTrigger(e);
543}else{
544handleSpaceKey(e, $active);
545}
546break;
547case enter_key:
548if($active.is(".mega-menu-toggle-block button, .mega-menu-toggle-animated-block button")){
549handleToggleBarTrigger(e);
550}else{
551handleEnterKey(e, $active);
552}
553break;
554case escape_key:
555handleEscapeKey();
556break;
557case up_arrow_key:
558case down_arrow_key:
559if(isOffCanvasHorizontal){
560handleArrowUpDown(e, key===down_arrow_key);
561}
562break;
563case left_arrow_key:
564case right_arrow_key:
565const goingToNext=plugin.shouldGoToNextTopLevelItem(key);
566const goingToPrev=plugin.shouldGoToPreviousTopLevelItem(key);
567if(goingToNext||goingToPrev){
568handleArrowLeftRight(e, goingToNext);
569}
570break;
571}});
572$wrap.on("focusout.megamenu", function(e){
573if($wrap.hasClass("mega-keyboard-navigation")){
574setTimeout(function(){
575if(!$wrap[0].contains(document.activeElement)){
576$wrap.removeClass("mega-keyboard-navigation");
577plugin.hideAllPanels();
578plugin.hideMobileMenu();
579}}, 10);
580}});
581};
582plugin.unbindAllEvents=function(){
583$(document).off(docEventNamespace);
584$("ul.mega-sub-menu, li.mega-menu-item, li.mega-menu-row, li.mega-menu-column, a.mega-menu-link, .mega-indicator", $menu).off();
585};
586plugin.unbindClickEvents=function(){
587if($wrap.hasClass('mega-keyboard-navigation')){
588return;
589}
590$(document).off(docEventNamespace);
591$("> a.mega-menu-link", items_with_submenus).not(collapse_children_parents).off("click.megamenu touchend.megamenu");
592};
593plugin.unbindHoverEvents=function(){
594items_with_submenus.off("mouseenter.megamenu mouseleave.megamenu");
595};
596plugin.unbindHoverIntentEvents=function(){
597items_with_submenus.off("mouseenter mouseleave").removeProp("hoverIntent_t").removeProp("hoverIntent_s");
598};
599plugin.unbindKeyboardEvents=function(){
600$wrap.off("keyup.megamenu keydown.megamenu focusout.megamenu");
601};
602plugin.unbindMegaMenuEvents=function(){
603if(plugin.settings.event==="hover_intent"){
604plugin.unbindHoverIntentEvents();
605}
606if(plugin.settings.event==="hover"){
607plugin.unbindHoverEvents();
608}
609plugin.unbindClickEvents();
610plugin.unbindKeyboardEvents();
611};
612plugin.bindMegaMenuEvents=function(){
613plugin.unbindMegaMenuEvents();
614const isDesktop=plugin.isDesktopView();
615if(isDesktop&&plugin.settings.event==="hover_intent"){
616plugin.bindHoverIntentEvents();
617}
618if(isDesktop&&plugin.settings.event==="hover"){
619plugin.bindHoverEvents();
620}
621plugin.bindClickEvents();
622plugin.bindKeyboardEvents();
623};
624plugin.checkWidth=function(){
625if(plugin.isMobileView()&&$menu.data("view")==="desktop"){
626plugin.switchToMobile();
627}
628if(plugin.isDesktopView()&&$menu.data("view")==="mobile"){
629plugin.switchToDesktop();
630}
631recalculateSubmenuWidths();
632};
633plugin.reverseRightAlignedItems=function(){
634if(! $("body").hasClass("rtl")&&$menu.hasClass("mega-menu-horizontal")&&$menu.css("display")!=='flex'){
635$menu.append($menu.children("li.mega-item-align-right").get().reverse());
636}};
637plugin.addClearClassesToMobileItems=function(){
638$(".mega-menu-row", $menu).each(function(){
639$("> .mega-sub-menu > .mega-menu-column:not(.mega-hide-on-mobile)", $(this)).filter(":even").addClass("mega-menu-clear");
640});
641};
642plugin.initDesktop=function(){
643$menu.data("view", "desktop");
644plugin.bindMegaMenuEvents();
645plugin.initIndicators();
646$menu.trigger("mmm:switchToDesktop");
647};
648plugin.initMobile=function(){
649plugin.switchToMobile();
650};
651plugin.switchToDesktop=function(){
652$menu.data("view", "desktop");
653plugin.bindMegaMenuEvents();
654plugin.reverseRightAlignedItems();
655plugin.hideAllPanels();
656plugin.hideMobileMenu(true);
657$menu.removeAttr('role');
658$menu.removeAttr('aria-modal');
659$menu.removeAttr('aria-hidden');
660$menu.trigger("mmm:switchToDesktop");
661};
662plugin.switchToMobile=function(){
663$menu.data("view", "mobile");
664if(plugin.isMobileOffCanvas()&&$toggle_bar.is(":visible")){
665$menu.attr('role', 'dialog');
666$menu.attr('aria-modal', 'true');
667$menu.attr('aria-hidden', 'true');
668}
669plugin.bindMegaMenuEvents();
670plugin.initIndicators();
671plugin.reverseRightAlignedItems();
672plugin.addClearClassesToMobileItems();
673plugin.hideAllPanels();
674plugin.expandMobileSubMenus();
675$menu.trigger("mmm:switchToMobile");
676};
677plugin.initToggleBar=function(){
678$toggle_bar.on("click", function(e){
679const isToggleTrigger=$(e.target).closest(".mega-menu-toggle-block, button.mega-toggle-animated, .mega-menu-toggle-custom-block", this).length;
680if(isToggleTrigger){
681e.preventDefault();
682if($(this).hasClass("mega-menu-open")){
683plugin.hideMobileMenu();
684}else{
685plugin.showMobileMenu();
686}}else if(e.target===this&&plugin.isMobileOffCanvas()){
687plugin.hideMobileMenu();
688}});
689};
690plugin.initIndicators=function(){
691$menu.off('click.megamenu', '.mega-indicator');
692$menu.on('click.megamenu', '.mega-indicator', function(e){
693e.preventDefault();
694e.stopPropagation();
695if($(this).closest(".mega-menu-item").hasClass("mega-toggle-on")){
696if(! $(this).closest("ul.mega-sub-menu").parent().hasClass("mega-menu-tabbed")||plugin.isMobileView()){
697plugin.hidePanel($(this).parent(), false);
698}}else{
699plugin.showPanel($(this).parent(), false);
700}});
701};
702plugin.hideMobileMenu=function(force=false){
703if(! $toggle_bar.is(":visible")&&! force){
704return;
705}
706$menu.attr("aria-hidden", "true");
707clearTimeout(html_body_class_timeout);
708html_body_class_timeout=setTimeout(function(){
709$("body").removeClass(menuId + "-mobile-open");
710$("html").removeClass(menuId + "-off-canvas-open");
711}, plugin.settings.effect_speed_mobile);
712if($wrap.hasClass("mega-keyboard-navigation")){
713$(".mega-menu-toggle-block button, button.mega-toggle-animated", $toggle_bar).first().trigger('focus');
714}
715$(".mega-toggle-label, .mega-toggle-animated", $toggle_bar).attr("aria-expanded", "false");
716const resetMenuStyles=function(){
717$menu.css({
718width: "",
719left: "",
720display: ""
721});
722$toggle_bar.removeClass("mega-menu-open");
723};
724if(plugin.settings.effect_mobile==="slide"&&! force){
725$menu.animate({"height":"hide"}, plugin.settings.effect_speed_mobile, resetMenuStyles);
726}else{
727resetMenuStyles();
728}
729$menu.triggerHandler("mmm:hideMobileMenu");
730};
731plugin.showMobileMenu=function(){
732if(! $toggle_bar.is(":visible")){
733return;
734}
735clearTimeout(html_body_class_timeout);
736$("body").addClass(menuId + "-mobile-open");
737plugin.expandMobileSubMenus();
738if(plugin.isMobileOffCanvas()){
739$("html").addClass(menuId + "-off-canvas-open");
740}
741if(plugin.settings.effect_mobile==="slide"){
742$menu.animate({"height":"show"}, plugin.settings.effect_speed_mobile, function(){
743$(this).css("display", "");
744});
745}
746$(".mega-toggle-label, .mega-toggle-animated", $toggle_bar).attr("aria-expanded", "true");
747$toggle_bar.addClass("mega-menu-open");
748plugin.toggleBarForceWidth();
749$menu.attr("aria-hidden", "false");
750$menu.triggerHandler("mmm:showMobileMenu");
751};
752plugin.toggleBarForceWidth=function(){
753const $force_width_el=$(plugin.settings.mobile_force_width);
754if($force_width_el.length&&(plugin.settings.effect_mobile==="slide"||plugin.settings.effect_mobile==="disabled")){
755const submenu_offset=$toggle_bar.offset();
756const target_offset=$force_width_el.offset();
757$menu.css({
758width: $force_width_el.outerWidth(),
759left: (target_offset.left - submenu_offset.left) + "px"
760});
761}};
762plugin.doConsoleChecks=function(){
763if(plugin.settings.mobile_force_width!=="false"&&! $(plugin.settings.mobile_force_width).length&&(plugin.settings.effect_mobile==="slide"||plugin.settings.effect_mobile==="disabled")){
764console.warn('Max Mega Menu #' + $wrap.attr('id') + ': Mobile Force Width element (' + plugin.settings.mobile_force_width + ') not found');
765}
766const cssWidthRegex=/^((\d+(\.\d+)?(px|%|em|rem|vw|vh|ch|ex|cm|mm|in|pt|pc))|auto)$/i;
767if(plugin.settings.panel_width!==undefined&&! cssWidthRegex.test(plugin.settings.panel_width)&&! resolveWidthEl(plugin.settings.panel_width).length){
768console.warn('Max Mega Menu #' + $wrap.attr('id') + ': Panel Width (Outer) element (' + plugin.settings.panel_width + ') not found');
769}
770if(plugin.settings.panel_inner_width!==undefined&&! cssWidthRegex.test(plugin.settings.panel_inner_width)&&! resolveWidthEl(plugin.settings.panel_inner_width).length){
771console.warn('Max Mega Menu #' + $wrap.attr('id') + ': Panel Width (Inner) element (' + plugin.settings.panel_inner_width + ') not found');
772}};
773plugin.init=function(){
774$menu.triggerHandler("before_mega_menu_init");
775plugin.settings=$.extend({}, defaults, options);
776if(window.console){
777plugin.doConsoleChecks();
778}
779$menu.removeClass("mega-no-js");
780plugin.initToggleBar();
781if(plugin.settings.unbind_events==="true"){
782plugin.unbindAllEvents();
783}
784if(document.readyState==='complete'){
785recalculateSubmenuWidths();
786}else{
787$(window).on("load", recalculateSubmenuWidths);
788}
789if(plugin.isDesktopView()){
790plugin.initDesktop();
791}else{
792plugin.initMobile();
793}
794$(window).on("resize", function(){
795plugin.checkWidth();
796});
797$menu.triggerHandler("after_mega_menu_init");
798};
799plugin.init();
800};
801$.fn.maxmegamenu=function(options){
802return this.each(function(){
803if(undefined===$(this).data("maxmegamenu")){
804const plugin=new $.maxmegamenu(this, options);
805$(this).data("maxmegamenu", plugin);
806}});
807};
808$(function(){
809$(".max-mega-menu").maxmegamenu();
810});
811}(jQuery));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.