PageSourceSearch

https://easterndiocese.org/scripts/meganavigation/js/navigation.js?1781732248

js easterndiocese.org collected 2026-10-02 10:58:22 UTC 21,597 bytes, 527 lines download raw bytes

1 
2;(function ( $, window, document, undefined ){
3 
4    $.navigation = function(element, options){
5 
6        var defaults = {
7            responsive: true,
8            mobileBreakpoint: 767,
9            showDuration: 300,
10            hideDuration: 300,
11            showDelayDuration: 0,
12            hideDelayDuration: 0,
13            submenuTrigger: "hover",
14            effect: "fade",
15            submenuIndicator: true,
16			submenuIndicatorTrigger: false,
17            hideSubWhenGoOut: true,
18            visibleSubmenusOnMobile: false,
19            overlay: true,
20            overlayColor: "rgba(0, 0, 0, 0.7)",
21            hidden: false,
22			hiddenOnMobile: false,
23            offCanvasSide: "left",
24			offCanvasCloseButton: true,
25			animationOnShow: "",
26			animationOnHide: "",
27			hideScrollBar: true,
28            onInit: function() {},
29			onLandscape: function() {},
30			onPortrait: function() {},
31            onShowOffCanvas: function() {},
32            onHideOffCanvas: function() {}
33        };
34 
35        var plugin = this,
36            bigScreenFlag = Number.MAX_VALUE,
37            smallScreenFlag = 1,
38            clickTouchEvents = "click.nav touchstart.nav",
39            hoverShowEvents = "mouseenter focusin",
40            hoverHideEvents = "mouseleave focusout";
41        plugin.settings = {};
42        var $element = $(element), element = element;
43        
44        if($(element).find(".nav-search").length > 0){
45            $(element).find(".nav-search").find("form").prepend("<span class='nav-search-close-button' tabindex='0'>&#10005;</span>");
46        }
47 
48        plugin.init = function(){
49            plugin.settings = $.extend({}, defaults, options);
50			
51			if(plugin.settings.offCanvasCloseButton){
52				$(element).find(".nav-menus-wrapper").prepend("<span class='nav-menus-wrapper-close-button'>&#10005;</span>");
53			}
54            
55            if(plugin.settings.offCanvasSide == "right"){
56                $(element).find(".nav-menus-wrapper").addClass("nav-menus-wrapper-right");
57            }
58            
59            if(plugin.settings.hidden){
60                $(element).addClass("navigation-hidden");
61                plugin.settings.mobileBreakpoint = 99999;
62            }
63            
64            checkSubmenus();
65            
66            $(element).find(".nav-toggle").on("click touchstart", function(e){
67                e.stopPropagation(); 
68                e.preventDefault();
69                plugin.showOffcanvas();
70                if(options !== undefined){
71                    plugin.callback("onShowOffCanvas");
72                }
73            });
74            
75            $(element).find(".nav-menus-wrapper-close-button").on("click touchstart", function(){
76                plugin.hideOffcanvas();
77                if(options !== undefined){
78                    plugin.callback("onHideOffCanvas");
79                }
80            });         
81 
82            $(element).find(".nav-search-button, .nav-search-close-button").on("click touchstart keydown", function(e){
83                e.stopPropagation(); 
84                e.preventDefault();
85				var code = e.keyCode || e.which;
86				if(e.type === "click" || e.type === "touchstart" || (e.type === "keydown" && code == 13)){
87					plugin.toggleSearch();
88				}
89				else{
90					if(code == 9){
91						$(e.target).blur();
92					}
93				}
94            });
95            
96            $(window).resize(function(){
97                plugin.initNavigationMode(windowWidth());
98                fixSubmenuRightPosition();
99				if(plugin.settings.hiddenOnMobile){
100					hideNavbarPortrait();
101				}
102            });
103            
104            plugin.initNavigationMode(windowWidth());
105			
106			if(plugin.settings.hiddenOnMobile){
107				hideNavbarPortrait();
108			}
109			
110			if(plugin.settings.overlay){
111                $(element).append("<div class='nav-overlay-panel'></div>");
112			}
113			
114			if($(element).find(".megamenu-tabs").length > 0){
115                activateTabs();
116            }
117            
118            if(options !== undefined){
119                plugin.callback("onInit");
120            }
121        };
122		
123		// reset submenus
124		var resetSubmenus = function(){
125			$(element).find(".nav-submenu").hide(0);
126			$(element).find("li").removeClass("focus");
127		};
128        
129        // check the existence of submenus/add indicators to them
130        var checkSubmenus = function(){
131            $(element).find("li").each(function(){
132                if($(this).children(".nav-dropdown,.megamenu-panel").length > 0){
133                    $(this).children(".nav-dropdown,.megamenu-panel").addClass("nav-submenu");
134                    if(plugin.settings.submenuIndicator){
135                        $(this).children("a").append(
136                            "<span class='submenu-indicator'>" + 
137                                "<span class='submenu-indicator-chevron'></span>" +
138                            "</span>"
139                        );
140                    }
141                }
142            });
143        };
144		
145		//hide navbar on portrait mode
146		var hideNavbarPortrait = function(){
147			if($(element).hasClass("navigation-portrait")){
148				$(element).addClass("navigation-hidden");
149			}
150			else{
151				$(element).removeClass("navigation-hidden");
152			}
153		};
154        
155        // show a submenu
156        plugin.showSubmenu = function(parentItem, submenuEffect){
157            if(windowWidth() > plugin.settings.mobileBreakpoint){
158                $(element).find(".nav-search").find("form").fadeOut();
159            }
160            if(submenuEffect == "fade"){
161                $(parentItem).children(".nav-submenu")
162                    .stop(true, true)
163                    .delay(plugin.settings.showDelayDuration)
164                    .fadeIn(plugin.settings.showDuration)
165					.removeClass(plugin.settings.animationOnHide)
166					.addClass(plugin.settings.animationOnShow);
167            }
168            else{
169                $(parentItem).children(".nav-submenu")
170                    .stop(true, true)
171                    .delay(plugin.settings.showDelayDuration)
172                    .slideDown(plugin.settings.showDuration)
173					.removeClass(plugin.settings.animationOnHide)
174					.addClass(plugin.settings.animationOnShow);
175            }
176			$(parentItem).addClass("focus");
177			/*
178								console.log('resize + refresh '+$(parentItem).children('.megamenu-panel').css('display'));
179								$(parentItem).children('.megamenu-panel').css('display', 'block');  
180								$('.mediaBoxes').mediaBoxes( 'resize' ); 
181								$(window).trigger('resize');
182			*/			
183        };
184        
185        // hide a submenu
186        plugin.hideSubmenu = function(parentItem, submenuEffect){
187            if(submenuEffect == "fade"){
188                $(parentItem).find(".nav-submenu")
189                    .stop(true, true)
190                    .delay(plugin.settings.hideDelayDuration)
191                    .fadeOut(plugin.settings.hideDuration)
192					.removeClass(plugin.settings.animationOnShow)
193					.addClass(plugin.settings.animationOnHide);
194            }
195            else{
196                $(parentItem).find(".nav-submenu")
197                    .stop(true, true)
198                    .delay(plugin.settings.hideDelayDuration)
199                    .slideUp(plugin.settings.hideDuration)
200					.removeClass(plugin.settings.animationOnShow)
201					.addClass(plugin.settings.animationOnHide);
202            }
203			$(parentItem).removeClass("focus").find(".focus").removeClass("focus");
204        };
205        
206        // show the overlay panel
207        var showOverlay = function(){
208			if(plugin.settings.hideScrollBar){
209				$("body").addClass("no-scroll");
210			}
211            if(plugin.settings.overlay){
212                $(element).find(".nav-overlay-panel")
213                    .css("background-color", plugin.settings.overlayColor)
214                    .fadeIn(300)
215                    .on("click touchstart", function(){
216                        plugin.hideOffcanvas();
217                    });
218            }
219        };
220        
221        // hide the overlay panel
222        var hideOverlay = function(){
223			if(plugin.settings.hideScrollBar){
224				$("body").removeClass("no-scroll");
225			}
226            if(plugin.settings.overlay){
227                $(element).find(".nav-overlay-panel").fadeOut(400);
228            }
229        };
230 
231        // show offcanvas
232        plugin.showOffcanvas = function(){
233            showOverlay();
234            if(plugin.settings.offCanvasSide == "left"){
235                $(element).find(".nav-menus-wrapper").css("transition-property", "left").addClass("nav-menus-wrapper-open");
236            }
237            else{
238                $(element).find(".nav-menus-wrapper").css("transition-property", "right").addClass("nav-menus-wrapper-open");
239            }
240        };
241        
242        // hide offcanvas 
243        plugin.hideOffcanvas = function(){          
244            $(element).find(".nav-menus-wrapper").removeClass("nav-menus-wrapper-open")
245                .on("webkitTransitionEnd moztransitionend transitionend oTransitionEnd", function(){
246                    $(element).find(".nav-menus-wrapper")
247                        .css("transition-property", "none")
248                        .off();
249            });
250            hideOverlay();
251        };
252        
253        // toggle offcanvas
254        plugin.toggleOffcanvas = function(){
255            if(windowWidth() <= plugin.settings.mobileBreakpoint){
256                if($(element).find(".nav-menus-wrapper").hasClass("nav-menus-wrapper-open")){
257                    plugin.hideOffcanvas();
258                    if(options !== undefined){
259                        plugin.callback("onHideOffCanvas");
260                    }
261                }
262                else{
263                    plugin.showOffcanvas();
264                    if(options !== undefined){
265                        plugin.callback("onShowOffCanvas");
266                    }
267                }
268            }
269        };
270        
271        // show/hide the search form
272        plugin.toggleSearch = function(){
273            if($(element).find(".nav-search").find("form").css("display") == "none"){
274                $(element).find(".nav-search").find("form").fadeIn(200);
275				$(element).find(".nav-search").find("input").focus();
276            }
277            else{
278                $(element).find(".nav-search").find("form").fadeOut(200);
279				$(element).find(".nav-search").find("input").blur();
280            }
281        };
282        
283        // set the navigation mode and others configs
284        plugin.initNavigationMode = function(screenWidth){
285            if(plugin.settings.responsive){
286                if(screenWidth <= plugin.settings.mobileBreakpoint && bigScreenFlag > plugin.settings.mobileBreakpoint){
287                    $(element).addClass("navigation-portrait").removeClass("navigation-landscape");
288                    portraitMode();
289					if(options !== undefined){
290						plugin.callback("onPortrait");
291					}
292                }
293                if(screenWidth > plugin.settings.mobileBreakpoint && smallScreenFlag <= plugin.settings.mobileBreakpoint){
294                    $(element).addClass("navigation-landscape").removeClass("navigation-portrait");
295                    landscapeMode();
296                    hideOverlay();
297                    plugin.hideOffcanvas();
298					if(options !== undefined){
299						plugin.callback("onLandscape");
300					}
301                }
302                bigScreenFlag = screenWidth;
303                smallScreenFlag = screenWidth;
304            }
305            else{
306				$(element).addClass("navigation-landscape");
307                landscapeMode();
308				if(options !== undefined){
309					plugin.callback("onLandscape");
310				}
311            }
312        };
313        
314         // hide submenus/form when click/touch outside
315        var goOut = function(){
316            $("html").on("click.body touchstart.body", function(e){
317                if($(e.target).closest(".navigation").length === 0){
318					$(element).find(".nav-submenu").fadeOut();
319					$(element).find(".focus").removeClass("focus");
320                    $(element).find(".nav-search").find("form").fadeOut();
321                }
322            });
323        };
324        
325        // return the window's width
326        var windowWidth = function(){
327            return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
328        };
329        
330        // unbind events
331        var unbindEvents = function(mode){
332			if(mode == "landscape")
333				$(element).find(".nav-menu").find("li, a").off(clickTouchEvents)
334			else
335                $(element).find(".nav-menu").find("li, a").off(hoverShowEvents).off(hoverHideEvents);
336        };
337        
338        // fix submenu right position
339        var fixSubmenuRightPosition = function(){
340            if(windowWidth() > plugin.settings.mobileBreakpoint){
341                var navWidth = $(element).outerWidth();
342                $(element).find(".nav-menu").children("li").children(".nav-submenu").each(function(){
343                    if($(this).parent().position().left + $(this).outerWidth() > navWidth){
344                        $(this).css("right", 0);
345                    }
346                    else{
347                        $(this).css("right", "auto");
348                    }
349                });
350            }
351        };
352        
353        // activate the tabs
354        var activateTabs = function(){          
355            function initTabs(tabs){
356                var navs = $(tabs).children(".megamenu-tabs-nav").children("li");
357                var panes = $(tabs).children(".megamenu-tabs-pane");
358                $(navs).on("mouseenter.tabs click.tabs touchstart.tabs", function(e){
359                    e.stopPropagation(); 
360                    e.preventDefault();
361                    $(navs).removeClass("active");
362                    $(this).addClass("active");
363                    $(panes).hide(0).removeClass("active");
364                    $(panes[$(this).index()]).show(0).addClass("active");
365                });
366            }
367            
368            if($(element).find(".megamenu-tabs").length > 0){
369                var navigationTabs = $(element).find(".megamenu-tabs");
370                for(var i = 0; i < navigationTabs.length; i++){
371                    initTabs(navigationTabs[i]);
372                }
373            }
374        };
375        
376        // set the landscape mode
377        var landscapeMode = function(){
378            unbindEvents("landscape");
379            resetSubmenus();
380            if(navigator.userAgent.match(/Mobi/i) || navigator.maxTouchPoints > 0 || plugin.settings.submenuTrigger == "click"){
381                $(element).find(".nav-menu, .nav-dropdown").children("li").children("a").on(clickTouchEvents, function(e){
382                    plugin.hideSubmenu($(this).parent("li").siblings("li"), plugin.settings.effect);
383                    $(this).closest(".nav-menu").siblings(".nav-menu").find(".nav-submenu").fadeOut(plugin.settings.hideDuration);
384                    if($(this).siblings(".nav-submenu").length > 0){
385                        e.stopPropagation(); 
386                        e.preventDefault();
387                        if($(this).siblings(".nav-submenu").css("display") == "none"){
388                            plugin.showSubmenu($(this).parent("li"), plugin.settings.effect);
389                            fixSubmenuRightPosition();
390														if(windowWidth() > plugin.settings.mobileBreakpoint){                            
391							                //console.log('resize + refresh 390');
392							                $(this).parent("li").children('.megamenu-panel').css('display', 'block');
393							                $(this).parent("li").addClass("focus");                           
394							                $('.mediaBoxes').mediaBoxes( 'resize' ); 
395															$(window).trigger('resize');         
396														}                   
397														return false; 
398                        }
399                        else{
400                            plugin.hideSubmenu($(this).parent("li"), plugin.settings.effect);
401                        }
402                        if($(this).attr("target") === "_blank" || $(this).attr("target") === "blank"){
403                            window.open($(this).attr("href"));
404                        }
405                        else{
406							if($(this).attr("href") === "#" || $(this).attr("href") === "" || $(this).attr("href") === "javascript:void(0)"){
407								return false;
408							}
409							else{
410								window.location.href = $(this).attr("href");
411							}
412                        }
413                    }
414                });
415            }
416            else{
417                $(element).find(".nav-menu").find("li").on(hoverShowEvents, function(){
418                    plugin.showSubmenu(this,  plugin.settings.effect);
419						                $(this).children('.megamenu-panel').css('display', 'block');              
420						                $('.mediaBoxes').mediaBoxes( 'resize' ); 
421														$(window).trigger('resize');                    
422                    fixSubmenuRightPosition();
423                }).on(hoverHideEvents, function(){
424                    plugin.hideSubmenu(this, plugin.settings.effect);
425                });
426            }
427			if(plugin.settings.hideSubWhenGoOut){
428				goOut();
429			}
430        };
431        
432        // set the portrait mode
433        var portraitMode = function(){
434            unbindEvents("portrait");
435            resetSubmenus();
436            if(plugin.settings.visibleSubmenusOnMobile){
437                $(element).find(".nav-submenu").show(0);
438            }
439            else{
440                $(element).find(".submenu-indicator").removeClass("submenu-indicator-up");
441                if(plugin.settings.submenuIndicator && plugin.settings.submenuIndicatorTrigger){
442                    $(element).find(".submenu-indicator").on(clickTouchEvents, function(e){
443                        e.stopPropagation(); 
444                        e.preventDefault();
445                        plugin.hideSubmenu($(this).parent("a").parent("li").siblings("li"), "slide");
446												plugin.hideSubmenu($(this).closest(".nav-menu").siblings(".nav-menu").children("li"), "slide");
447                        if($(this).parent("a").siblings(".nav-submenu").css("display") == "none"){
448                            $(this).addClass("submenu-indicator-up");
449                            $(this).parent("a").parent("li").siblings("li").find(".submenu-indicator").removeClass("submenu-indicator-up");
450														$(this).closest(".nav-menu").siblings(".nav-menu").find(".submenu-indicator").removeClass("submenu-indicator-up");
451                            plugin.showSubmenu($(this).parent("a").parent("li"), "slide");
452						                //console.log('resize + refresh 442');
453						                $(this).parent("li").children('.megamenu-panel').css('display', 'block');              
454						                $('.mediaBoxes').mediaBoxes( 'resize' ); 
455														$(window).trigger('resize');
456                            return false; 
457                        }
458                        else{
459                            $(this).parent("a").parent("li").find(".submenu-indicator").removeClass("submenu-indicator-up");
460                            plugin.hideSubmenu($(this).parent("a").parent("li"), "slide");
461                        }
462                    });
463                }
464                else{
465					$(element).find(".nav-menu, .nav-dropdown").children("li").children("a").each(function(){
466						if($(this).siblings(".nav-submenu").length > 0){
467							$(this).on(clickTouchEvents, function(e){
468								//console.log('navigation.js');
469								e.stopPropagation(); 
470								e.preventDefault();
471								plugin.hideSubmenu($(this).parent("li").siblings("li"), plugin.settings.effect);
472								plugin.hideSubmenu($(this).closest(".nav-menu").siblings(".nav-menu").children("li"), "slide");
473								if($(this).siblings(".nav-submenu").css("display") == "none"){
474									$(this).children(".submenu-indicator").addClass("submenu-indicator-up");
475									$(this).parent("li").siblings("li").find(".submenu-indicator").removeClass("submenu-indicator-up");
476									$(this).closest(".nav-menu").siblings(".nav-menu").find(".submenu-indicator").removeClass("submenu-indicator-up");
477									plugin.showSubmenu($(this).parent("li"), "slide");
478										
479	                //console.log('resize + refresh 469');
480	                $(this).parent("li").children('.megamenu-panel').css('display', 'block');              
481	                $('.mediaBoxes').mediaBoxes( 'resize' ); 
482									$(window).trigger('resize');																	
483									
484									return false; 
485								}
486								else{
487									$(this).parent("li").find(".submenu-indicator").removeClass("submenu-indicator-up");
488									plugin.hideSubmenu($(this).parent("li"), "slide");
489								}
490								if($(this).attr("target") === "_blank" || $(this).attr("target") === "blank"){
491									window.open($(this).attr("href"));
492								}
493								else{
494									if($(this).attr("href") === "#" || $(this).attr("href") === "" || $(this).attr("href") === "javascript:void(0)"){
495										return false;
496									}
497									else{
498										window.location.href = $(this).attr("href");
499									}
500								}
501							});
502						}
503					});
504                }
505            }
506        };
507        
508        plugin.callback = function(func) {
509            if (options[func] !== undefined) {
510                options[func].call(element);
511            }
512        };
513 
514        plugin.init();
515 
516    };
517 
518    $.fn.navigation = function(options){
519        return this.each(function(){
520            if (undefined === $(this).data("navigation")){
521                var plugin = new $.navigation(this, options);
522                $(this).data("navigation", plugin);
523            }
524        });
525    };
526 
527})( jQuery, window, document );

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.