PageSourceSearch

https://www.bizzabo.com/wp-content/plugins/oxyextras/components/assets/megamenu-init.js?ver=1.5.4

js bizzabo.com collected 2026-09-24 07:35:18 UTC 15,155 bytes, 354 lines download raw bytes

1jQuery(document).ready(oxygen_init_megamenu);
2function oxygen_init_megamenu($) {
3
4    var touchEvent = 'ontouchstart' in window ? 'click' : 'click';
5
6    var url = window.location;
7    var pathname = window.location.pathname;
8
9    let extrasMegaMenu = function(container) {
10
11    $(container).find(".oxy-mega-dropdown_link").filter(function() {
12        return (this.href == url || this.href + '/' == url || this.href == pathname || this.href + '/' == pathname );
13    }).addClass('oxy-mega-dropdown_link-current');
14
15    $(container).find('.oxy-mega-dropdown_flyout').has('.current-menu-item').siblings('.oxy-mega-dropdown_link').addClass('oxy-mega-dropdown_link-current-ancestor');
16
17    $(container).find(".oxy-mega-menu").each(function(i, oxyMegaMenu){
18
19        var $oxyMegaMenu = $( oxyMegaMenu ),
20            inner = $oxyMegaMenu.children('.oxy-mega-menu_inner'),
21            oxyMegaMenuID = $( oxyMegaMenu ).attr('id'),
22            clicktrigger = inner.data('trigger'),
23            oDelay = inner.data('odelay'),
24            cDelay = inner.data('cdelay'),
25            flyMenu = inner.find('.oxy-mega-dropdown_flyout-click-area').parent('.oxy-mega-dropdown_link'),
26            slideDuration = inner.data('duration'),
27            mouseoverReveal = inner.data('mouseover'),
28            preventScroll = inner.data('prevent-scroll'),
29            hashlinkClose = inner.data('hash-close'),
30            slide_trigger_selector = clicktrigger,
31            slideClickArea = $oxyMegaMenu.find('.oxy-mega-dropdown_icon'),
32            auto_aria = inner.data('auto-aria');
33
34            inner.find('.oxy-mega-dropdown_link').css("cursor","pointer");
35
36              
37            function ariaExpandToggle($state) {
38                if ( true === auto_aria ) {
39                    $(container).find(slide_trigger_selector).each(function(i,trigger) {
40                        if ( $(trigger).hasClass('oxy-burger-trigger') && $(trigger).children('.hamburger').length ) {
41                            $(trigger).children('.hamburger').attr('aria-expanded', $state);
42                        } else {
43                            $(trigger).attr('aria-expanded', $state);
44                            $(trigger).attr('role','button');
45                        }
46                    });
47                }
48            }
49
50              if ( true === auto_aria ) {
51
52                $(container).find(slide_trigger_selector).each(function(i,trigger) {
53
54                    if ( $(trigger).hasClass('oxy-burger-trigger') && $(trigger).children('.hamburger').length ) {
55                        $(trigger).children('.hamburger').attr('aria-controls', oxyMegaMenuID);
56                    } else {
57                        $(trigger).attr('aria-controls', oxyMegaMenuID);
58                    }
59                });
60
61                ariaExpandToggle('false');
62             }
63
64              $(container).find(slide_trigger_selector).on( touchEvent, function(e) { 
65
66                 e.stopPropagation();
67                 e.preventDefault();  
68                 $oxyMegaMenu.slideToggle(slideDuration);
69
70                 if ( true === auto_aria ) {
71
72                    if ( 'true' === $(container).find(slide_trigger_selector).attr('aria-expanded') || 'true' === $(container).find(slide_trigger_selector).children('.hamburger').attr('aria-expanded') ) {
73                        ariaExpandToggle('false');
74                    } else {
75                        ariaExpandToggle('true');
76                    }
77
78                 }
79
80                 $oxyMegaMenu.children('.oxy-mega-menu_inner').toggleClass('oxy-mega-menu_mobile');
81                  
82                 if (true === preventScroll) {
83                    $('body,html').toggleClass( 'oxy-nav-menu-prevent-overflow' );
84                 }  
85              } );
86
87        
88        var megaStatus = false;
89        var mobileStatus = false;
90        var megaInitialised = false;
91        
92        // --> Trigger accessible menu just 1x...
93            var triggerMegaMenu = function() {
94
95              if (!megaStatus) {
96
97                megaStatus = true; // so only fires 1x
98
99                if (!megaInitialised) {
100
101                      $(oxyMegaMenu).accessibleMegaMenu({
102                        uuidPrefix: oxyMegaMenuID,
103                        menuClass: "oxy-mega-menu_inner",
104                        topNavItemClass: "oxy-mega-dropdown",
105                        panelClass: "oxy-mega-dropdown_inner",
106                        panelGroupClass: "mega-column",
107                        hoverClass: "oxy-mega-dropdown_inner-hover",
108                        focusClass: "oxy-mega-dropdown_inner-focus",
109                        openClass: "oxy-mega-dropdown_inner-open",
110                        toggleButtonClass: "oxy-burger-trigger",
111                        openDelay: oDelay,
112                        closeDelay: cDelay,
113                        openOnMouseover: mouseoverReveal
114                    });
115
116                    megaInitialised = true;
117
118                } else {
119                    $(oxyMegaMenu).data('plugin_accessibleMegaMenu').init();
120                }
121                  
122                $('.oxy-mega-dropdown_just-link').off( "click" ); 
123                  
124                if (true === inner.data('hovertabs')) {
125
126                    $oxyMegaMenu.find('.oxy-tab').attr('tabindex','0');
127
128                    $oxyMegaMenu.find('.oxy-tab').on('mouseenter focus', function() { 
129                        $(this).click(); 
130                    }); 
131                    
132                }
133
134              }
135
136            }
137
138       // Only fire the megamenu function is menu is visible (meaning we're not on mobile)
139        var checkMegaDisplay = function() {
140                
141            // Desktop
142            if ( 'hidden' === $( oxyMegaMenu ).css("backface-visibility") ) {
143                $(oxyMegaMenu).removeAttr("style");
144                $(oxyMegaMenu).find('.oxy-mega-dropdown_inner').removeAttr("style");
145                triggerMegaMenu();
146                $( oxyMegaMenu ).off( touchEvent );
147                mobileStatus = false;
148                $('body,html').removeClass( 'oxy-nav-menu-prevent-overflow' );
149                $(oxyMegaMenu).find('.oxy-mega-menu_inner').removeClass('oxy-mega-menu_mobile');
150              } 
151            // Mobile
152            else {
153
154                  // if MegaMenu already init, let's remove it
155                  if (megaStatus) {  
156                        $( oxyMegaMenu).find('.oxy-mega-dropdown_link').removeClass('oxy-mega-dropdown_inner-open');  
157                        $( oxyMegaMenu ).data('plugin_accessibleMegaMenu').destroy();
158                        $oxyMegaMenu.find('.oxy-tab').off('mouseenter focus');
159                        megaStatus = false; 
160                  }
161                
162                  if (!mobileStatus) {
163                      
164                      mobileStatus = true; // so only fires 1x
165
166                    if ($(container).find(slide_trigger_selector).hasClass('oxy-burger-trigger')) {
167                        $(container).find(slide_trigger_selector).children('.hamburger').removeClass('is-active');
168                    }
169                      
170                      $( oxyMegaMenu).find('.oxy-mega-dropdown_link[data-expanded=enable]').addClass('oxy-mega-dropdown_inner-open');
171                      
172                      $( oxyMegaMenu ).off( touchEvent );
173                      $( oxyMegaMenu ).on( touchEvent, '.oxy-mega-menu_mobile li > a', function(e) {
174
175
176                          if ($(e.target).closest('.oxy-mega-dropdown_flyout-click-area').length > 0) { 
177                                
178                                e.preventDefault();
179                                e.stopPropagation();
180                                oxy_subMenu_toggle(this, slideDuration);
181                            }
182                          
183                            else if ($(e.target).attr("href") === "#" && $(e.target).parent().hasClass('menu-item-has-children')) {
184                               
185                                var subflyoutButton = $(e.target).find('.oxy-mega-dropdown_flyout-click-area');
186                                e.preventDefault();
187                                e.stopPropagation();
188                                oxy_subMenu_toggle(subflyoutButton, slideDuration);
189                                
190                            } else if ($(e.target).closest('.oxy-mega-dropdown_link:not(.oxy-mega-dropdown_just-link) .oxy-mega-dropdown_icon').length > 0) {
191                          
192                                e.stopPropagation();
193                                e.preventDefault();
194                                oxy_megaMenu_toggle(this, slideDuration);
195
196                            } else if ($(e.target).closest('.oxy-mega-dropdown_link').is('a[href^="#"]') && $(e.target).closest('.oxy-mega-dropdown_link').parent().hasClass('oxy-mega-dropdown') && !$(e.target).closest('.oxy-mega-dropdown_link').hasClass('oxy-mega-dropdown_just-link') ) {
197                                
198                                e.stopPropagation();
199                                e.preventDefault();
200                                oxy_megaMenu_toggle(this, slideDuration);
201                                
202                            } else if ($(e.target).closest('.oxy-mega-dropdown_link').data('disable-link') === 'enable') {
203                                
204                                e.stopPropagation();
205                                e.preventDefault();
206                                oxy_megaMenu_toggle(this, slideDuration);
207                                
208                            } else if ( $(e.target).closest('.oxy-mega-dropdown_link').hasClass('oxy-mega-dropdown_just-link') && $(e.target).closest('.oxy-mega-dropdown_link').is('a[href^="#"]') ) {
209
210                                e.stopPropagation();
211                               setTimeout(function() {
212                                    $(container).find(slide_trigger_selector).trigger('click')
213                                }, 0);
214
215                            }
216                              
217                          });
218                      
219                  }
220                      
221                
222            }
223
224        }
225
226        
227        checkMegaDisplay();
228        $(window).on("load resize orientationchange",function(e){
229          checkMegaDisplay();
230        });
231
232        if (true === hashlinkClose) {
233
234            inner.on('click', '.oxy-mega-dropdown_inner a[href*="#"]:not(.menu-item-has-children > a), a.oxy-mega-dropdown_just-link[href*="#"]', function() {
235
236                if ('hidden' === $oxyMegaMenu.css("backface-visibility")) { // If desktop
237        
238                    $oxyMegaMenu.find('.oxy-mega-dropdown_inner-open').removeClass('oxy-mega-dropdown_inner-open');
239        
240                } else {
241
242                    if ( $(this).closest('.oxy-mega-dropdown_inner').siblings('.oxy-mega-dropdown_inner-open').length ) {
243                        $(this).closest('.oxy-mega-dropdown_inner').siblings('.oxy-mega-dropdown_inner-open').trigger('click');
244                    }
245
246                    $(container).find(slide_trigger_selector).trigger('click');
247
248                }
249        
250            });
251            
252
253        }
254
255
256    });  // each
257
258
259    
260    function oxy_subMenu_toggle(trigger, durationData) {
261        $(trigger).closest('.menu-item-has-children').children('.sub-menu').slideToggle( durationData );
262        $(trigger).closest('.menu-item-has-children').siblings('.menu-item-has-children').children('.sub-menu').slideUp( durationData );
263        $(trigger).children('.oxy-mega-dropdown_flyout-click-area').attr('aria-expanded', function (i, attr) {
264            return attr == 'true' ? 'false' : 'true'
265        });
266
267        $(trigger).children('.oxy-mega-dropdown_flyout-click-area').attr('aria-pressed', function (i, attr) {
268            return attr == 'true' ? 'false' : 'true'
269        });
270    }
271
272    function oxy_megaMenu_toggle(trigger, durationData) {
273
274            var othermenus = $(trigger).parent('.oxy-mega-dropdown').siblings('.oxy-mega-dropdown');
275                             othermenus.find( '.oxy-mega-dropdown_inner' ).slide
275Up( durationData );
276                             othermenus.find( '.oxy-mega-dropdown_link' ).removeClass( 'oxy-mega-dropdown_inner-open' );
277
278            $(trigger).next('.oxy-mega-dropdown_inner').slideToggle( durationData );
279            $(trigger).toggleClass( 'oxy-mega-dropdown_inner-open' );
280
281            $(trigger).attr('aria-expanded', function (i, attr) {
282                return attr == 'true' ? 'false' : 'true'
283            });
284
285            $(trigger).attr('aria-pressed', function (i, attr) {
286                return attr == 'true' ? 'false' : 'true'
287            });
288
289            $(trigger).next('oxy-slide-menu_open');
290        
291            
292         // Resize carousel as opened if found
293            if ($(trigger).next('.oxy-mega-dropdown_inner').has('.flickity-enabled')) {
294                setTimeout(function() {
295                    var carousel = $(trigger).next('.oxy-mega-dropdown_inner').find('.flickity-enabled');
296                    if (carousel.length) {
297                    var flkty = Flickity.data( carousel[0] );
298                        flkty.resize();
299                    }
300                }, 100);
301
302            }
303            
304
305        }  
306
307
308    $('.oxy-mega-dropdown_just-link').parent('.oxy-mega-dropdown').addClass('oxy-mega-dropdown_no-dropdown')
309
310
311    var options = {
312          attributes: true,
313          attributeFilter: ['class'], 
314          subtree: true
315        },
316        observer = new MutationObserver(mCallback);
317
318        function mCallback (mutations) {
319          for (var mutation of mutations) {
320
321              if (mutation.type === 'attributes') {
322
323                        if (($(mutation.target).closest('.oxy-mega-menu_inner').has( ".oxy-mega-dropdown_inner-open" ).length) && !($(mutation.target).closest('.oxy-mega-menu_inner').has( ".oxy-mega-dropdown_inner-open.oxy-mega-dropdown_just-link" ).length) ) {
324                            $(mutation.target).closest('.oxy-mega-menu_inner').addClass('oxy-mega-menu_active');
325                        } else {
326                            $(mutation.target).closest('.oxy-mega-menu_inner').removeClass('oxy-mega-menu_active');
327                        }
328
329                    }
330              }
331        }
332
333        var MegaMenus = $(container).find('.oxy-mega-menu_inner[data-type=container]');
334        MegaMenus.each(function(i, MegaMenu) {
335            observer.observe(MegaMenu, options);
336        });
337
338
339     $(container).find(".oxy-mega-dropdown_flyout").each(function(i, oxyDropdown){
340
341        var icon = $(oxyDropdown).data('icon');
342
343        $(oxyDropdown).find('.menu-item-has-children > a').append('<button tabindex="-1" aria-expanded=\"false\" aria-pressed=\"false\" class=\"oxy-mega-dropdown_flyout-click-area\"><svg class=\"oxy-mega-dropdown_flyout-icon\"><use xlink:href=\"#'+ icon + '\"></use></svg><span class=\"screen-reader-text\">Submenu</span></button>');
344
345    });
346
347    }
348
349    extrasMegaMenu('body');
350
351    // Expose function
352    window.doExtrasMegaMenu = extrasMegaMenu;
353
354}

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.