PageSourceSearch

https://www.foyers-catholiques.org/wp-content/themes/directory2/design/js/menu.js?ver=6.0.16

js foyers-catholiques.org collected 2026-10-06 04:12:59 UTC 10,729 bytes, 333 lines download raw bytes

1"use strict";
2
3function desktopMenu(){
4	if(!isResponsive(641)){
5		// only run at 640px+
6		jQuery('.nav-menu-main').find('li').each(function(){
7			if(jQuery(this).find('ul.sub-menu').length){
8				// item has a submenu
9				jQuery(this).addClass('has-submenu');
10				var anchor = jQuery(this).children('a')[0];
11				if (anchor) {
12					var icon = document.createElement('span');
13					icon.className = 'icon-submenu';
14
15					anchor.append(icon);
16				}
17			}
18		});
19
20		popupDesktopMenu();
21
22		touchDesktopMenuFix();
23	}
24}
25
26var firstDesktopMenuRelocation = isResponsive(640);
27
28function relocateMenuTools() {
29	var regularPos = jQuery('.header-container .menu-container');
30	var relocatedPos = jQuery('.header-container .nav-menu-container');
31	var siteToolsSelector = '.menu-tools';
32	var $siteTools = jQuery(siteToolsSelector);
33
34	if(isResponsive(640)){
35		if(regularPos.find('> '+siteToolsSelector).length > 0) {
36			$siteTools.prependTo(relocatedPos);
37		}
38	} else {
39		if(relocatedPos.find('> '+siteToolsSelector).length > 0) {
40			$siteTools.appendTo(regularPos);
41		}
42
43		if (firstDesktopMenuRelocation) {
44			updateBurgerMenuSpace(burgerMenuData[0]);
45			firstDesktopMenuRelocation = false;
46		}
47	}
48}
49
50function responsiveMenu(){
51	if(isResponsive(640)){
52		// only run at 640px-
53		jQuery('.main-nav .menu-toggle').bind('touchstart MSPointerDown', function(){
54			if(jQuery('.main-nav .nav-menu-main').hasClass('menu-opened')){
55				jQuery('.main-nav .nav-menu-main').hide();
56			} else {
57				jQuery('.main-nav .nav-menu-main').show();
58			}
59			jQuery('.main-nav .nav-menu-main').toggleClass('menu-opened');
60
61			return false;
62		});
63	}
64}
65
66function touchDesktopMenuFix(){
67	if(isTouch() && (isAndroid() || isIpad() || isMobile())){
68		jQuery('.nav-menu-main').find('li').each(function(){
69			jQuery(this).bind('click', function(e){
70				e.stopPropagation();
71				if(jQuery(this).hasClass('has-submenu')){
72					var itemID = jQuery(this).attr('id');
73					if(jQuery(this).hasClass('clicked-once')){
74						// the second click on target
75					} else {
76						// if there was clicked on other item reset all except current
77						jQuery('.nav-menu-main').find('li').each(function(){
78							if(jQuery(this).attr('id') != itemID){
79								jQuery(this).removeClass('clicked-once');
80							}
81						});
82						// first click on target
83						e.preventDefault();
84						jQuery(this).addClass('clicked-once');
85					}
86				} else {
87					// normal flow
88				}
89			});
90		});
91	}
92}
93
94function popupDesktopMenu(){
95	if(jQuery('body').hasClass('sticky-menu-enabled')){
96		var clonedMenu = jQuery('header.site-header .nav-menu-main').clone();
97		if(typeof clonedMenu.find('ul.ait-megamenu').attr('id') != "undefined"){
98			clonedMenu.find('ul.ait-megamenu').attr({'id':clonedMenu.find('ul.ait-megamenu').attr('id')+'-clone'});
99		}
100		clonedMenu.find('ul.ait-megamenu').children('li').each(function(){
101			if(typeof jQuery(this).attr('id') != "undefined"){
102				jQuery(this).attr({'id': jQuery(this).attr('id')+"-clone"});
103			}
104		});
105		jQuery('div.sticky-menu .main-nav').append(clonedMenu);
106
107		var container = jQuery('#masthead');
108		var menu = {offset: container.offset(), height: container.outerHeight(true)};
109		var page = jQuery('body');
110		var scroll = (menu.offset.top + menu.height);
111		if(!isResponsive(641)){
112			var win = jQuery(window);
113
114
115			setInterval(function(){
116				if(win.scrollTop() > scroll){
117					page.addClass('header-scrolled');
118				} else {
119					page.removeClass('header-scrolled');
120				}
121			},200);
122		}
123	}
124}
125
126function menuOverlay() {
127	var menuContainer = jQuery(".site-header .menu-container");
128	jQuery(".ait-megamenu > li.has-submenu, .ait-megamenu > li.menu-item-wrapper").hover(function() {
129		menuContainer.toggleClass("hover");
130	});
131}
132
133/* new burger menu logic */
134function burgerMenus(menus){
135	jQuery.each(menus, function(index, menu){
136
137		jQuery(menu.selectors.join(', ')).each(function(){
138			var $container = jQuery(this);
139			var $navContainer = $container.find('nav');
140			var $menuContainer = $navContainer.find('.nav-menu-container').children('ul');
141
142			var testWidth = !isMobile() ? 623 : 640;
143
144			// update avalaible space
145			var widthNav = $navContainer.width();
146
147			$navContainer.attr('data-avalaibleSpace', widthNav);
148			// this is stupid xD
149			var widthAvalaible = widthNav - parseInt($navContainer.attr('data-reservedSpace'));
150			var avalaibleSpace = widthAvalaible;
151
152			if(!isResponsive(testWidth)){
153
154				if(parseInt($menuContainer.attr('data-liWidth')) > avalaibleSpace){
155					// the menu is bigger than the space
156					var fittingWidth = avalaibleSpace;
157					//var lastFittableLi = null;
158					$menuContainer.children('li:not(.menu-item-wrapper)').each(function(){
159						// for every li, get his width and try to fit it
160						var liWidth = parseInt(jQuery(this).attr('data-width')) == 0 ? jQuery(this).outerWidth(true) : parseInt(jQuery(this).attr('data-width'));
161						fittingWidth = parseInt(fittingWidth - liWidth);
162						var liID = jQuery(this).attr('id');
163						if(fittingWidth > 0){
164							// no problem .. li fits
165							// hide this in the wrapmenu
166							jQuery(this).show();
167							jQuery('#'+liID+'-wrapclone').hide();
168						} else {
169							// problem .. li doesnt fit
170							// show this in the wrapmenu
171							jQuery(this).hide();
172							jQuery('#'+liID+'-wrapclone').show();
173						}
174					});
175
176					$menuContainer.find('.menu-item-wrapper').css({'display': 'inline-block'});
177				} else {
178					var fittingWidth = avalaibleSpace;
179					$menuContainer.children('li:not(.menu-item-wrapper)').each(function(){
180						var liWidth = parseInt(jQuery(this).attr('data-width')) == 0 ? jQuery(this).width() : parseInt(jQuery(this).attr('data-width'));
181						fittingWidth = parseInt(fittingWidth - liWidth);
182						var liID = jQuery(this).attr('id');
183						if(fittingWidth > 0){
184							// no problem .. li fits
185							// hide this in the wrapmenu
186							jQuery(this).show();
187							jQuery('#'+liID+'-wrapclone').hide();
188						}
189					});
190					// hide wrapping menu
191					$menuContainer.find('.menu-item-wrapper').css({'display': 'none'});
192				}
193
194			} else {
195				$menuContainer.children('li:not(.menu-item-wrapper)').css({'display': 'inline-block'});
196				$menuContainer.find('.menu-item-wrapper').css({'display': 'none'});
197			}
198		});
199	});
200}
201
202function prepareBurgerMenus(menus, cb){
203	jQuery.each(menus, function(index, menu){
204
205		jQuery(menu.selectors.join(', ')).each(function(){
206
207			var $container = jQuery(this);
208			var $navContainer = $container.find('nav');
209
210			// before computing, display hidden menus .. no need this is default
211			//$navContainer.css({'display':'block', 'visibility':'hidden'});
212
213			// menu items widths
214			var $menuContainer = $navContainer.find('.nav-menu-container').children('ul');
215			var widthLiAll = 0;
216			$menuContainer.children('li').each(function(){
217				var widthLi = jQuery(this).outerWidth(true);
218				jQuery(this).attr('data-width', widthLi);
219				widthLiAll = widthLiAll + widthLi;
220			});
221			$menuContainer.attr('data-liWidth', widthLiAll);
222
223			// append burger li .. burger is always created
224			$menuContainer.append('<li class="menu-item-wrapper sub-menu-right-position"><a>&#8801;<i class="icon-burger"><span></span></i></a><ul class="menu-items-wrap"></ul></li>');
225			var $burgerMenuWrapper = $menuContainer.find('li.menu-item-wrapper');
226			var $burgerMenuContainer = $burgerMenuWrapper.find('.menu-items-wrap');
227
228			// fill up burger menu with data
229			var $menuContainerChildren = $menuContainer.children('li:not(.menu-item-wrapper)').clone(true);
230			$menuContainerChildren.appendTo($burgerMenuContainer);
231
232			$burgerMenuWrapper.find('li').each(function(){
233				// update id
234				var oldId = jQuery(this).attr('id');
235				if(typeof oldId !== "undefined"){
236					jQuery(this).attr('id', jQuery(this).attr('id')+'-wrapclone');
237				}
238				// update class
239				if(jQuery(this).hasClass('menu-item-has-columns')){
240					jQuery(this).removeAttr('class');
241					jQuery(this).addClass('menu-item-wrapped menu-item-has-columns');
242				} else {
243					jQuery(this).removeAttr('class');
244					jQuery(this).addClass('menu-item-wrapped');
245				}
246			});
247
248			// clear up all megamenu classes
249			if($burgerMenuContainer.find('li.menu-item-has-columns').length > 0){
250				$burgerMenuContainer.find('li.menu-item-has-columns ul li').each(function(){
251					if(jQuery(this).children('a').length > 0){
252						jQuery(this).addClass('leave-me-alone');
253					}
254				});
255
256				$burgerMenuContainer.find('li.menu-item-has-columns').each(function(){
257					var $lis = jQuery(this).find('li.leave-me-alone').clone(true);
258					var $con = jQuery(this).find('ul');
259					$con.children().remove();
260					$con.append($lis);
261				});
262				$burgerMenuContainer.find('li.leave-me-alone').removeClass('leave-me-alone');
263			}
264
265			// add new classes
266			$burgerMenuContainer.find('li').each(function(){
267				if(jQuery(this).children('ul').length > 0){
268					jQuery(this).addClass('menu-item-has-children');
269				}
270			});
271
272			// compute and store widths
273			var widthContainer = $container.width();
274			var widthNav = $navContainer.width();
275
276			var widthAvalaible = widthNav;
277			$navContainer.attr('data-avalaibleSpace', widthAvalaible);
278
279			// compute reserverd space from defined selectors
280			var reservedSize = 0;
281			jQuery(menu.reservedSelectors.join(', ')).each(function(){
282				reservedSize = reservedSize + jQuery(this).outerWidth(true);
283			});
284			$navContainer.attr('data-reservedSpace', reservedSize);
285
286			widthAvalaible = widthAvalaible - reservedSize;
287
288			// will the burger be shown by default
289			if(widthAvalaible < widthLiAll){
290				$burgerMenuWrapper.css({'display': 'inline-block'});
291			} else {
292				$burgerMenuWrapper.css({'display': 'none'});
293			}
294
295			// reset all styles added by script
296			//$navContainer.css({'display':'block', 'visibility':''});
297			$navContainer.removeClass('menu-hidden');
298		});
299
300	});
301
302	cb && cb();
303}
304
305function updateBurgerMenuSpace(menu) {
306	jQuery(menu.selectors.join(', ')).each(function(){
307		var $navContainer = jQuery(this).find('nav');
308		var $menuContainer = $navContainer.find('.nav-menu-container').children('ul');
309
310		$navContainer.addClass('menu-hidden');
311
312		// menu items widths
313		var $menuContainer = $navContainer.find('.nav-menu-container').children('ul');
314		var widthLiAll = 0;
315		$menuContainer.children('li').each(function(){
316			var widthLi = jQuery(this).outerWidth(true);
317			jQuery(this).attr('data-width', widthLi);
318			widthLiAll = widthLiAll + widthLi;
319		});
320		$menuContainer.attr('data-liWidth', widthLiAll);
321
322		// compute reserverd space from defined selectors
323		var reservedSize = 0;
324		jQuery(menu.reservedSelectors.join(', ')).each(function(){
325			reservedSize = reservedSize + jQuery(this).outerWidth(true);
326		});
327		$navContainer.attr('data-reservedSpace', reservedSize);
328
329		$navContainer.removeClass('menu-hidden');
330	});
331
332	burgerMenus([menu]);
333}

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.