PageSourceSearch

https://www.evionnaz.ch/plugin/menu/js/menu.js?_v=3

js evionnaz.ch collected 2026-10-02 17:53:48 UTC 19,389 bytes, 537 lines download raw bytes

1function changeMenuInstance(cbo)
2{
3	for(i=0;i<cbo.options.length;i++)
4	{
5		var obj = document.getElementById("map_" + cbo.options[i].value);
6		if(obj.id == "map_" + cbo.value)
7			obj.style.display="";
8		else
9			obj.style.display="none";
10	}
11}
12
13/* Fonction anonyme auto appelée pour déclencher le fonctionnement du menu */
14(function() {
15	function workoutCopy()
16	{
17		$("#leftPanel ul > li > a.copy").each(function(){
18			var $me = $(this);
19			$me.closest("ul").prev("a").css("cursor", "pointer").click(function(evt){ evt.preventDefault(); $me[0].click(); });
20		});
21	}
22	
23	function moveMenu()
24	{
25		var $leftPanel = $("#leftPanel");
26    	var $menuHolderInLeftPanel = $(".menuHolder", $leftPanel);
27    	var $menuHolderInMainPanel = $("#mainPanel .menuHolder").not($menuHolderInLeftPanel);
28    	
29    	if($leftPanel.is(":visible"))
30    	{
31    		if($menuHolderInLeftPanel.is(":empty"))
32    		{
33    			$menuHolderInLeftPanel.append($menuHolderInMainPanel.children().remove()).find("ul").removeAttr("style");
34    			neutralizeLeftPanelLink();
35    			workoutCopy();
36    			responsiveMenuOpen();
37    		}
38    	}
39    	else if($menuHolderInMainPanel.is(":empty"))
40    	{	
41    		$menuHolderInMainPanel.append($menuHolderInLeftPanel.children().remove()).find("ul").removeAttr("style");;
42    		setTimeout(function(){  $menuHolderInMainPanel.trigger("runmenuanim"); }, 200);
43    	}
44    };
45    
46    function neutralizeLeftPanelLink()
47    {
48    	$("#leftPanel .menuHolder li a[href='#']").click(function(e){ e.preventDefault(); }).css("cursor", "default"); //Empeche les liens avec un "#" de se déclencher
49    }
50    
51    function iconeMenu()
52    {
53    	var $leftPanel = $("#leftPanel");
54    	var $mainPanel = $("#mainPanel");
55    	var $menuIcone = $("#menuIcone");
56    	$menuIcone.click(function(evt){
57    		evt.preventDefault();
58    		if($mainPanel.hasClass("open"))
59    		{
60    			$("html, body").removeClass("nooverflow");
61    			$mainPanel.css("left",0).removeClass("open").find(">.neutralizer").remove();
62    			$leftPanel.removeClass("scrolling");
63    			unswipe("body");
64    		}
65    		else
66    		{
67    			$("html, body").addClass("nooverflow");
68    			$("<div class=\"neutralizer\"></div>").click(function(){ $menuIcone.trigger("click"); }).appendTo($mainPanel);
69    			$mainPanel.addClass("open").css("left",$leftPanel.width());
70    			$leftPanel.addClass("scrolling");
71    			swipe("body", function(){ $menuIcone.trigger("click"); });
72    		}
73    	});
74    	
75    	$(window).resize(function(){ if($mainPanel.hasClass("open")) $menuIcone.trigger("click"); });
76    };
77    
78    
79    $(window).resize( moveMenu );
80    $(document).ready( function(){ neutralizeLeftPanelLink(); workoutCopy(); responsiveMenuOpen(); moveMenu(); iconeMenu();  });
81})();
82
83
84/*Fonction qui permet de gérer l'ouverture du menu en version responsive*/
85function responsiveMenuOpen() {
86		
87	/*Met un toogle d'ouverture sur tous les a*/
88	$('#leftPanel ul.menu0 a').click(function(){
89		
90		var lastChar = this.href;
91		lastChar = lastChar.slice(- 1);
92
93		//Rem. Si le UL est déjà ouvert et qu'il y a une URL sur le menu on ne relance pas le toogle
94		if(!($(this).next('ul').is(":visible") && lastChar !="#"))
95			$(this).next('ul').slideToggle();
96	});
97
98	//Réouverture des menus sélectionnés
99	$('#leftPanel a.menuselected').each(function(){
100		
101		$(this).next('ul').css("display","block");
102		
103	});
104}
105
106function fireMenuAnim(psIdMenu, poCallbak)
107{
108	if($(".menuHolder " + psIdMenu).length==1)
109		$(".menuHolder").on("runmenuanim", poCallbak);
110	else
111		poCallbak();
112}
113
114/*------------------------------------------------------------------------------------------------*/
115/*GESTION DU SEPARATOR :																		  */
116/* si on veut supprimer un separator (bordure ou background) du dernier menu                      */
117/* $(nomMenu + " li.menu0:last-child").css("border-right","0px");                                 */
118/* on enlève par style la propriété qui affiche le separator                                      */
119/*------------------------------------------------------------------------------------------------*/
120
121/*--------------------------------------------------------*/
122/*FONCTION POUR L'OUVERTURE DU MENU DEROULANTE VERS LE BAS*/
123/*--------------------------------------------------------*/
124function animeMenu(nomMenu,pi_LevelNot,$pi_nbreLevel)
125{
126	var nomMenu = "#"+nomMenu;
127	var margeDroite = 5;
128	
129	var fAnim = function(){
130		$(nomMenu+" li").hover(function(){
131			
132				$(nomMenu + " #" + this.id + " > a").addClass("menuHover");
133			
134				//Permet de faire dérouler le menu depuis le début du parent, on crée le décalage
135				var hauteurParent = - ($(this).height()) + "px";
136				var largeurParent = $(this).width() + margeDroite + "px";//5= petite marge sur la droite
137				$(this).not(".menu"+ pi_LevelNot).find(">ul").css("margin-top","0px" );
138				$(this).not(".menu"+ pi_LevelNot).find(">ul").css("margin-left",largeurParent );
139				$(this).not(".menu"+ pi_LevelNot).find(">ul").css("top",$(this).position().top);//On ne met pas "$("#ul" + this.id)" car pour le menu horizontal cela ne déroule pas comme on veut
140				
141				//Permet d'afficher le sous-menu au bon endroit. Ex. ne pas dépasser la fenêtre
142				var alevel =  this.className.split(" ");
143				var level = alevel[0].replace("menu","").trim();
144		
145				var tailleFenetre = $(window).width();
146				var positionParent = parseFloat($(this).offset().left);
147				var tailleparent = (level > 0)?$(this).outerWidth() + margeDroite:0;
148				var tailleEnfant = ($(nomMenu + " #ul" + this.id).outerWidth())?parseFloat($(nomMenu + " #ul" + this.id).outerWidth()):0;
149
150				if(positionParent + tailleparent + tailleEnfant > tailleFenetre)
151					{
152						if(level > 0)
153							$(nomMenu + " #ul" + this.id).css("right",largeurParent);
154						else
155							$(nomMenu + " #ul" + this.id).css("right",0);
156					}
157				else
158					$(nomMenu + " #ul" + this.id).css("right","auto");
159				
160				//Decalage du sous-menu pour éviter que ça ne passe plus sur X colonnes
161				if($pi_nbreLevel > 1)
162					{
163					if($(nomMenu + " #ul" + this.id + " > li").length >= $pi_nbreLevel)
164						{
165						var tailleMaxSousMenu = $(nomMenu + " li.menu1:first").width() * $pi_nbreLevel;
166						if($(nomMenu + " #ul" + this.id).width() < tailleMaxSousMenu)
167							$(nomMenu + " #ul" + this.id).css("right",0);
168						}
169						
170					}
171				
172				//Ajout de l'effet déroulant
173//				$(nomMenu +" #ul" + this.id).stop(true,true).delay("100").slideDown(500);
174				$(nomMenu +" #ul" + this.id).stop(true,true).delay("100").addClass('open');
175				if($(nomMenu +" #ul" + this.id).hasClass('menu1'))
176					$('#subMenuBackground').css('height', $(nomMenu +" #ul" + this.id).outerHeight(true)+2+'px');
177		} , 
178	
179		function(){
180//				$(nomMenu + " #ul" + this.id).stop(true,true).delay("200").slideUp(500);
181				$(nomMenu + " #ul" + this.id).stop(true,true).delay("200").removeClass('open');
182				$(nomMenu + " #" + this.id + " > a").removeClass("menuHover");
183				if($(nomMenu +" #ul" + this.id).hasClass('menu1'))
184					$('#subMenuBackground').css('height', '0');
185		});
186		
187		//Empeche les liens avec un "#" de se déclencher	
188		$(nomMenu+' li a[href=\'#\']').click(function(e){ e.preventDefault(); }).css("cursor", "default");
189	};
190	
191	fireMenuAnim(nomMenu, fAnim);
192}
193
194/*--------------------------------------------------------*/
195/*FONCTION POUR L'OUVERTURE DU MENU DEROULANTE VERS LE HAUT*/
196/*--------------------------------------------------------*/
197function animeMenuUp(nomMenu,pi_LevelNot,$pi_nbreLevel)
198{
199	var nomMenu = "#"+nomMenu;
200	var margeDroite = 5;
201	
202	var fAnim = function(){
203		//On lance l'animation que sur le premier niveau
204		$(nomMenu+" li.menu0").hover(function(){
205			
206				//Stop l'effet des autres ouvertures
207				$(this).siblings("li").find("ul").stop(true,true);
208			
209				$("#" + this.id + " > a").addClass("menuHover");
210	
211				//Recherche la hauteur du premier niveau pour faire le décalage
212				h =  $(this).find("ul").first().height();		
213				
214				//On enlève les padding de décalage pour faire mouvement, sinon on doit les prendre aussi en compte dans le calcul de la hauteur
215				$("#ul" + this.id).css("top","0" ).css("padding","0").css("margin","0");
216				
217				//Decalage du sous-menu pour éviter que ça ne passe plus sur X colonnes
218				if($pi_nbreLevel > 1)
219					{
220					if($(nomMenu + " #ul" + this.id + " > li").length >= $pi_nbreLevel)
221						{
222						var tailleMaxSousMenu = $(nomMenu + " li.menu1:first").width() * $pi_nbreLevel;
223						if($(nomMenu + " #ul" + this.id).width() < tailleMaxSousMenu)
224							$(nomMenu + " #ul" + this.id).css("right",0);
225						}
226						
227					}
228				
229				//Lancement de l'animation
230				$("#ul" + this.id).stop(true,true).animate(
231					{       
232						height: 'toggle',
233						top:-h 
234					},  1000);					
235		} , 
236	
237		function(){
238				 
239				$("#" + this.id + " > a").removeClass("menuHover");
240				$("#ul" + this.id).stop(true,true).animate({
241				    height:'toggle',
242				    top:0
243				  }, 1000);
244				
245		}	);
246	
247		//Pour les sous-menu, on laisse le fonctionnement normal du déroulant sur la droite.
248		$(nomMenu+" li").not(".menu"+ pi_LevelNot).hover(function(){
249			
250			$("#" + this.id + " > a").addClass("menuHover");
251		
252			//Permet de faire dérouler le menu depuis le début du parent, on crée le décalage
253			var hauteurParent = - ($(this).height()) + "px";
254			var largeurParent = $(this).width() + margeDroite  + "px";//5= petite marge sur la droite
255			$(this).not(".menu"+ pi_LevelNot).find("ul").css("margin-top","0px" );
256			$(this).not(".menu"+ pi_LevelNot).find("ul").css("margin-left",largeurParent );
257			$(this).not(".menu"+ pi_LevelNot).find("ul").css("top",$(this).position().top);//On ne met pas "$("#ul" + this.id)" car pour le menu horizontal cela ne déroule pas comme on veut
258			
259			//Permet d'afficher le sous-menu au bon endroit. Ex. ne pas dépasser la fenêtre
260			var alevel =  this.className.split(" ");
261			var level = alevel[0].replace("menu","").trim();
262	
263			var tailleFenetre = $(window).width();
264			var positionParent = parseFloat($(this).offset().left);
265			var tailleparent = (level > 0)?$(this).outerWidth() + margeDroite:0;
266			var tailleEnfant = ($(nomMenu + " #ul" + this.id).outerWidth())?parseFloat($(nomMenu + " #ul" + this.id).outerWidth()):0;
267
268			if(positionParent + tailleparent + tailleEnfant > tailleFenetre)
269				{
270					if(level > 0)
271						$(nomMenu + " #ul" + this.id).css("right",largeurParent);
272					else
273						$(nomMenu + " #ul" + this.id).css("right",0);
274				}
275			else
276				$(nomMenu + " #ul" + this.id).css("right","auto");
277
278			
279			//Ajout de l'effet déroulant
280			$("#ul" + this.id).stop(true,true).delay("100").slideDown("slow");			    
281		} , 
282		
283		function(){
284				$("#ul" + this.id).stop(true,true).delay("200").slideUp("fast");  
285				$("#" + this.id + " > a").removeClass("menuHover"); 	
286		});
287		//Empeche les liens avec un "#" de se déclencher	
288		$(nomMenu+' li a[href=\'#\']').click(function(e){ e.preventDefault(); }).css("cursor", "default");
289		
290	};
291	
292	fireMenuAnim(nomMenu, fAnim);
293}
294
295/*--------------------------------------*/
296/*FONCTION POUR L'OUVERTURE DU MENU CLIC*/
297/*--------------------------------------*/
298function animeMenuClic(nomMenu,b_fromMenu2Niveaux)
299{
300	var nomMenu = "#"+nomMenu;
301	
302	var fAnim = function(){
303		// On déclare des variables                    
304		var accordion_head = $(nomMenu + ' li a.HeaderClic');            
305		var accordion_body = $(nomMenu + ' li.contentClic');             
306		
307		//On ouvre tous les menus qui sont menuselected. On ouvre rapidement si c'est un menu 2 niveaux pour ne pas avoir l'effet déroulant
308		if(b_fromMenu2Niveaux==true)
309			$(nomMenu + " li a.menuselected").addClass("menuselected").parent().next().css('display',"block");
310		else
311			$(nomMenu + " li a.menuselected").addClass("menuselected").parent().next().slideDown('normal');
312		
313		accordion_head.click(function(event) { 
314			
315			//Si on a un lien on le suit et on n'ouvre pas le sous-menu
316			if($(this).attr('href') != '#')
317				return;
318			
319			//Pour stopper l'effet du clic et donc par remonter au sommet de la page à cause du #
320			event.preventDefault();
321			event.stopPropagation();
322			
323			//Si on n'a pas de lien et pas de sous-menu on ne fait rien, évite un mini effet d'ouverture
324			if($(this).parent().next().html()=="")
325				return;
326			
327			// On annule l'effet naturel du lien   
328			// On vérifie la présence de la classe "menuselected"
329			if ($(this).attr('class').search('menuselected HeaderClic')>0){                    
330					                    
331				// On ouvre celui qui suit directement le lien (.HeaderClic) sur lequel on a cliqué
332				$(this).parent().next().stop(true,true).slideToggle('normal');     
333				
334				// On enlève la classe .menuselected de tous les liens                    
335				accordion_head.removeClass('menuselected');    
336				
337				// On rajoute la classe .menuselected au lien sur lequel on a cliqué                    
338				$(this).addClass('menuselected');                
339				}    
340			else
341				{
342					//Lance l'ouverture d'un menu qui n'a pas de lien et pas selected 
343					$(this).parent().next().slideToggle('normal'); 
344				}
345			
346		});
347		//Change le style des liens avec un "#" 	
348		$(nomMenu+' li a[href=\'#\']').css("cursor", "default");
349	};
350
351	fireMenuAnim(nomMenu, fAnim);
352}
353
354/*----------------------------------------------------------*/
355/*FONCTION POUR L'OUVERTURE DU MENU DEROULANTE 2 NIVEAUX TOP*/
356/*----------------------------------------------------------*/
357
358function animeMenu2NiveauxTop(nomMenu,pi_nbreLevel,nomSousMenu,typeSousMenu,pi_nbreCol)
359{
360	var nomMenu = "#"+nomMenu;
361	var nomSousMenu = "#"+nomSousMenu;
362	var fAnim = function(){
363		$(nomMenu+" li").hover(function(){
364			
365				$(nomMenu + " #" + this.id + " > a").addClass("menuHover");
366			
367				if(pi_nbreLevel > 1 && $(this).hasClass("menu0"))//Indique qu'il n'y a pas de sous-menu
368					{
369						//Decalage du sous-menu pour éviter que ça ne passe plus sur X colonnes
370						if(pi_nbreCol > 1)
371							{
372							if($(nomMenu + " #ul" + this.id + " > li").length >= pi_nbreCol)
373								{
374								var tailleMaxSousMenu = $(nomMenu + " li.menu1:first").width() * pi_nbreCol;
375								
376								if($(nomMenu + " #ul" + this.id).width() < tailleMaxSousMenu)
377									$(nomMenu + " #ul" + this.id).css("right",0);
378								}
379	
380							}
381					
382						//Ajout de l'effet déroulant
383						$(nomMenu + " #ul" + this.id).stop(true,true).delay("100").slideDown("slow");	
384					}		    
385		} , 
386	
387		function(){
388				if(pi_nbreLevel > 1 && $(this).hasClass("menu0"))//Indique qu'il n'y a pas de sous-menu
389					$(nomMenu + " #ul" + this.id).stop(true,true).delay("200").slideUp("fast");  
390				
391				$(nomMenu + " #" + this.id + " > a").removeClass("menuHover"); 	
392		}	);
393	
394		
395		//Gère l'ouverture du sous-menu si il n'y a pas de lien
396		$(nomMenu+' li a[href=\'#\']').click(function(e){
397			
398			var idParentEnCours = $(this).parent().get(0).id;
399			
400			//Recherche le premier lien qui est != # et != de "javascript..." (menu admin)
401			if(!window.isMobile)
402				var newUrl = $(nomSousMenu + " #ul" + idParentEnCours).find("li a[href!='#']:not([href^='javascript'])").first().attr("href");
403			
404			if(newUrl)
405				$(this).attr("href",newUrl);
406			else//Force l'ouverture du sous-menu
407				{
408					//Pour stopper l'effet du clic et donc par remonter au sommet de la page à cause du #
409					e.preventDefault();
410					e.stopPropagation();
411				
412					var nomParentDisplay = idParentEnCours;
413					
414					while(!$("#"+nomParentDisplay).hasClass("menu0") )
415						{
416							var myULid = $("#"+nomParentDisplay).parent().get(0).id;
417							var aKey = myULid.split("_");
418							var id=aKey[1];
419							
420							//recherch du parent de l'élément suivant
421							nomParentDisplay = "mid_"+id;
422						}
423					
424					if(typeSousMenu=="clic")//Version click
425						{
426							$(nomSousMenu +" #"+nomParentDisplay).siblings("ul > li").css("display","none");//cherche les frères et les cache
427							$(nomSousMenu +" #"+nomParentDisplay).next().css('display',"block");//affichage du sous-menu	
428						}
429					else //Version déroulant
430						{
431							
432							//cache les frères et soeurs
433							$(nomSousMenu).find("ul.menu1").css('display',"none");//affichage du sous-menu	
434							//Affiche le sous-menu
435							$(nomSousMenu +" #ul"+nomParentDisplay).css('display',"block");//affichage du sous-menu
436							
437							//Positionnement du menu en haut
438							$(nomSousMenu +" #ul"+nomParentDisplay).css("top",0);
439							$(nomSousMenu +" #ul"+nomParentDisplay).css("margin",0);
440	
441						}
442					
443					
444				}
445	
446		});
447	};
448	
449	fireMenuAnim(nomMenu, fAnim);
450}
451
452/*---------------------------------------------------------------*/
453/*FONCTION POUR L'OUVERTURE DU MENU DEROULANTE 2 NIVEAUX VERTICAL*/
454/*---------------------------------------------------------------*/
455
456function animeMenu2NiveauxDeroulant(nomMenu,pi_LevelNot)
457{
458	var nomMenu = "#"+nomMenu;
459	
460	var fAnim = function(){
461		//On affecte un style pour cacher les ul du premier niveau si ceux-ci on un style, on le voit encore un peu
462		$(nomMenu + " ul.menu0").addClass("hideLevel");
463	
464		
465		//Réouverture du sous-menu
466		if($(nomMenu + " li a.menuselected").parent().length > 0)
467			{
468				var id = " #ul" + $(nomMenu + " li a.menuselected").parent().get(0).id;
469				$(nomMenu + id).css('display',"block");
470				$(nomMenu +id).css("top",0);
471				$(nomMenu +id).css("margin",0);
472			}
473	
474	
475		$(nomMenu+" li").hover(function(){
476			
477			$(nomMenu + " #" + this.id + " > a").addClass("menuHover");
478		
479			//Permet de faire dérouler le menu depuis le début du parent, on crée le décalage
480			var hauteurParent = - ($(this).height()) + "px";
481			var largeurParent = $(this).width() + 5 + "px";//5= petite marge sur la droite
482			$(this).find("ul").not(".menu"+pi_LevelNot).css("margin-top","0px" );
483			$(this).find("ul").not(".menu"+pi_LevelNot).css("margin-left",largeurParent );
484			$(this).find("ul").not(".menu"+pi_LevelNot).css("top",$(this).position().top);//On ne met pas "$("#ul" + this.id)" car pour le menu horizontal cela ne déroule pas comme on veut
485			
486		
487			//Ajout de l'effet déroulant
488			$(nomMenu +" #ul" + this.id).stop(true,true).delay("100").slideDown("slow");			    
489		} , 
490	
491		function(){
492				$(nomMenu + " #ul" + this.id).not(".menu"+ pi_LevelNot).stop(true,true).delay("200").slide
492Up("fast");  
493				$(nomMenu + " #" + this.id + " > a").removeClass("menuHover"); 	
494		});
495		
496		//Empeche les liens avec un "#" de se déclencher	
497		$(nomMenu+' li a[href=\'#\']').click(function(e){ e.preventDefault(); }).css("cursor", "default");
498	};
499		
500	fireMenuAnim(nomMenu, fAnim);
501}
502
503/*------------------------------------------*/
504/*FONCTIONS POUR L'OUVERTURE DU MENU D'ADMIN*/
505/*------------------------------------------*/
506function initAdminMenu()
507{
508	$(".myArrowAdmin").each(function(){
509		
510		var idArrow = this.id;
511		var aKey = idArrow.split("-");
512		var pkey=aKey[1];
513		var pDebutID = aKey[0];
514		var sParent = "";
515		
516		//Utilisé si menu 2 niveaux pour éviter le conflit des id
517		if(pDebutID.indexOf("imgMenu_") != -1)
518			{
519				var aParent = pDebutID.split("_");
520				sParent= "#" + aParent[1] + " ";
521			}
522
523		//Permet de faire dérouler
524		$(sParent + "#"+idArrow+", #"+pkey).hover( function(){ 
525			
526			$(sParent + "#"+pkey).stop(true,true).delay(100);//on attend pour permettre de passer sur le div depuis la flèche
527			$(sParent + "#"+pkey).show("fast")
528			
529			}, 
530			function(){ 
531				$(sParent + "#"+pkey).stop(true,true).delay(200);//on attend pour permettre de passer sur le div depuis la flèche
532				$(sParent + "#"+pkey).hide("fast");
533			});
534		
535	});
536	
537}

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.