PageSourceSearch

https://www.infocert.it/content/themes/infocert/js/megamenu-custom.js?ver=6.8.3

js infocert.it collected 2026-09-24 08:46:55 UTC 13,659 bytes, 345 lines download raw bytes

1let windowsWidth;
2
3function detectWindowSize() {
4    windowsWidth = window.innerWidth;
5    let menu = document.querySelector('.tab-pane.active');
6    if(windowsWidth < 1199){
7        menu.classList.add('mobilemenu');
8        
9    }else {
10        if(menu.classList.contains('mobilemenu')){
11            menu.classList.remove('mobilemenu')
12        }
13    }
14    return windowsWidth;
15}
16
17// Sposto le tab principali all'interno del megamenu Mobile
18function spostaElementiInMenuMobile() {
19
20    megamenuMobile = document.querySelector('#menutabcontent .tab-pane.active .mega-menu.max-mega-menu');
21
22    //frammento iniziale
23    let menutabMobile = document.getElementById('menutab-mobile');
24    megamenuMobile.prepend(menutabMobile);
25    menutabMobile.style.display = "block";
26
27    // Frammento finale
28    //mobile sub menu da spostare dentro megamenu mobile
29    let mobileSubMenu = document.querySelector('#mobile-sub-menu');
30    
31    //Ripulisco dai wrapper
32    let mobileSubMenuList = mobileSubMenu.children[0];
33    let mobileSubMenuListItems = mobileSubMenuList.querySelectorAll("ul.menu");
34    let mobileSubMenuListSingleItems = [];
35    mobileSubMenuListItems.forEach(el => {
36        el.querySelectorAll(':scope > li').forEach(singEl => mobileSubMenuListSingleItems.push(singEl));
37    })
38
39    mobileSubMenuList.replaceChildren(...mobileSubMenuListSingleItems);
40
41
42    let subMenuItemsWithChildren = mobileSubMenuList.querySelectorAll('.menu-item-has-children > .sub-menu > .menu-item-has-children');
43
44    let subSubMenuItems;
45    subMenuItemsWithChildren.forEach( ( item, index ) => {
46
47        subSubMenuItems = item.children[1].children;
48
49        item.after( ...subSubMenuItems );
50
51        item.remove();
52
53    } )
54
55
56    megamenuMobile.appendChild(mobileSubMenu);
57    mobileSubMenu.style.display = "block";
58}
59
60if( document.readyState === 'complete' || document.readyState === 'interactive' ) {
61
62    detectWindowSize();
63    spostaElementiInMenuMobile();
64
65} else {
66
67    document.addEventListener( 'readystatechange', event => {
68
69        if(document.readyState === 'complete') {
70    
71            detectWindowSize();
72            spostaElementiInMenuMobile();
73            
74        }
75    
76    } )
77
78}
79
80
81window.addEventListener( 'resize', detectWindowSize );
82
83jQuery(($) => {
84
85    /**
86     * DESKTOP
87     **/
88
89    function toggleSearchActiveDesktop(ev) {
90        ev.currentTarget.parentElement.classList.toggle('search-active');
91        ev.currentTarget.parentElement.parentElement.querySelector('.mega-menu-wrap').classList.toggle('hide');
92        
93    }
94
95    function gestisciItemOnHover(ev){
96        // Se l'elemento non è selezionato già
97        if (!ev.currentTarget.classList.contains('item-on-hover')) {
98
99            // rimuovo la classe da eventuali altri elementi già selezionati
100            if (ev.currentTarget.parentElement.querySelector('.item-on-hover')) {
101                ev.currentTarget.parentElement.querySelector('.item-on-hover').classList.remove('item-on-hover');
102            }
103            // e aggiungo la classe all'elemento in hover
104            ev.currentTarget.classList.add('item-on-hover');
105        }
106
107    }
108
109    //Click listener per toggle class searchform search-active da desktop
110    document.querySelectorAll('.toggle-search').forEach( el => {
111        el.addEventListener('click', toggleSearchActiveDesktop);
112
113    })
114    //Azioni apertura/chiusura menu desktop
115    jQuery('.max-mega-menu>li.mega-menu-item').on('open_panel', function () {
116
117        //Applico sfondo backdrop all'apertura/chiusura del megamenu
118        document.querySelector('.backdrop').classList.add('active');
119
120        //Hover Listener per toggle class menu item lv 1
121        document.querySelectorAll('#menutabcontent .megamenudx>.mega-sub-menu>.widget_nav_menu>div>.menu>.menu-item').forEach(el => {
122            el.addEventListener("mouseenter", gestisciItemOnHover );
123        });
124
125    });
126
127    jQuery('.max-mega-menu>li.mega-menu-item').on('close_panel', function () {
128
129        document.querySelector('.backdrop').classList.remove('active');
130
131        //Attivo il primo submenu per ogni voce di menu principale
132        document.querySelectorAll('#menutabcontent .max-mega-menu>li.mega-menu-item').forEach(el => {
133
134            if(el.querySelector('.item-on-hover')) el.querySelector('.item-on-hover').classList.remove('item-on-hover');
135            el.querySelector('.megamenudx>.mega-sub-menu>.widget_nav_menu>div>.menu>li').classList.add('item-on-hover');
136            
137        });
138
139        document.querySelectorAll('#menutabcontent .megamenudx>.mega-sub-menu>.widget_nav_menu>div>.menu>.menu-item').forEach(el => {
140            el.removeEventListener("mouseenter", gestisciItemOnHover );
141        });
142
143    });
144
145    /**
146    * MOBILE
147    **/
148
149    function removeClassesOnMenuClosing(){
150        //Alla chiusura del menu rimuovo la classe sel submenu lv2 se aperto
151        let toRemoveClass = document.getElementsByClassName("opened-submenu-modal");
152        Array.from(toRemoveClass).forEach(el => el.classList.remove("opened-submenu-modal"));
153    
154        //Chiudo il modale del form di ricerca
155        let searchbarMobile = document.querySelector('.search-form-mobile');
156        if ( searchbarMobile ) searchbarMobile.classList.remove('search-active');    
157    
158        //Rimuovo la classe di apertura del menu
159        let mobileMenuOpened = document.querySelector('#menutabcontent .tab-pane.active.mobile-menu-open');
160        if ( mobileMenuOpened ) mobileMenuOpened.classList.remove('mobile-menu-open'); // Rimuovo la classe all'header mobile
161
162        let megaSubToggleOn = document.querySelectorAll('.mega-sub-toggle-on');
163        if(megaSubToggleOn) { 
164            megaSubToggleOn.forEach(el => {
165            el.classList.remove('mega-sub-toggle-on')
166            })
167        }
168
169        let mobileSubmenuOpen = document.querySelectorAll('.mobile-submenu-open');
170        if(mobileSubmenuOpen){
171            mobileSubmenuOpen.forEach(
172                el=> {
173                    el.classList.remove('mobile-submenu-open')
174                }
175            )
176        }
177
178        let mobileSubSubmenuOpen = document.querySelectorAll('.mobile-sub-submenu-open');
179        if(mobileSubSubmenuOpen){
180            mobileSubSubmenuOpen.forEach(
181                el=> {
182                    el.classList.remove('mobile-sub-submenu-open')
183                }
184            )
185        }
186    }
187    
188    function toggleSubMenuLv2(ev){
189        ev.preventDefault();
190        const subMenuAperto = document.querySelector('.mega-sub-toggle-on');
191        if (subMenuAperto && subMenuAperto !== ev.target) {
192            subMenuAperto.classList.remove('mega-sub-toggle-on');
193        }
194        ev.target.classList.toggle('mega-sub-toggle-on');
195    
196    }
197
198    function attivaBarraRicercaMobile(){
199        document.querySelector('.search-form-mobile').classList.add('search-active');
200        document.querySelector('.max-mega-menu').classList.add('opened-submenu-modal');
201        document.querySelector('.search-form-mobile .wp-block-search__input').focus();
202        
203        //Click listener per remove class searchform search-active da mobile   
204        document.querySelector('.titolo-search-form').addEventListener('click', disattivaBarraRicercaMobile);
205    }
206
207    function disattivaBarraRicercaMobile(ev){
208        document.querySelector('.search-active').classList.remove('search-active');
209        document.querySelector('.max-mega-menu').classList.remove('opened-submenu-modal');
210        ev.stopPropagation();
211        document.querySelector('.titolo-search-form').removeEventListener('click', disattivaBarraRicercaMobile);
212    }
213
214    function openSubmenuModal(ev){
215        let elemento = ev.currentTarget.classList.contains("mega-indicator") ? ev.currentTarget.parentElement : ev.currentTarget;
216    
217        // Se clicco sul menu già aperto
218        if (!elemento.parentElement.classList.contains('mega-toggle-on')) {
219            //Lo chiudo rimuovendo la classe
220            elemento.parentElement.parentElement.classList.remove('opened-submenu-modal');
221            // E chiudo i sottomenu se aperti
222            document.querySelector(".mega-sub-toggle-on") ? document.querySelector(".mega-sub-toggle-on").classList.remove("mega-sub-toggle-on") : null;
223        } else {
224            // Alttrimenti lo apro
225            elemento.parentElement.parentElement.classList.add('opened-submenu-modal');
226            // E chiudo i sottomenu aperti
227            document.querySelector(".mobile-submenu-open") ? document.querySelector(".mobile-submenu-open").classList.remove("mobile-submenu-open") : null;
228            document.querySelector(".tab-opened") ? document.querySelector(".tab-opened").classList.remove("tab-opened") : null;
229        }
230    
231    }
232
233    function toggleClassMobileSubMenu(ev){
234        let otherSubmenuOpened = document.querySelector('.mobile-submenu-open');
235        if(otherSubmenuOpened && otherSubmenuOpened !== ev.currentTarget){
236            otherSubmenuOpened.classList.remove('mobile-submenu-open');
237        }
238        let subSubmenuOpened = ev.target.querySelector('.mobile-sub-submenu-open');
239        if( subSubmenuOpened ){
240            subSubmenuOpened.classList.remove('mobile-sub-submenu-open');
241        }
242
243        ev.currentTarget.classList.toggle('mobile-submenu-open');
244        ev.stopPropagation();
245    }
246    function toggleClassMobileSubSubMenu(ev){
247        let otherSubSubmenuOpened = document.querySelector('.mobile-sub-submenu-open');
248        if(otherSubSubmenuOpened && otherSubSubmenuOpened !== ev.currentTarget){
249            otherSubSubmenuOpened.classList.remove('mobile-sub-submenu-open');
250        }
251        ev.currentTarget.classList.toggle('mobile-sub-submenu-open');
252        ev.stopPropagation();
253    }
254
255    function openMenuTab(ev){
256        ev.preventDefault();
257        document.getElementById("menutab-mobile").classList.toggle('tab-opened');
258    }  
259
260
261    //Azioni apertura menu mobile
262    $(".mega-menu").on("mmm:showMobileMenu", (ev) => { // All'apertura del menu mobile
263        
264        document.querySelector('.backdrop').classList.add('active');
265
266
267        //Aggiunta classe al menu all'apertura in mobile - mobile-menu-open
268        let mobileMenu = document.querySelector('#menutabcontent .tab-pane.active.mobilemenu');
269        if( mobileMenu ) mobileMenu.classList.add('mobile-menu-open'); // Aggiungo la classe all'header mobile
270        document.body.style.overflow = 'hidden'; // E blocco lo scroll del body
271
272        // Click listener per toggle class alle voci menu lv 2 - mega-sub-toggle-on
273        document.querySelectorAll(".tab-pane.active.mobilemenu .megamenudx .widget_nav_menu .menu > li > a").forEach(el => {
274            el.addEventListener('click', toggleSubMenuLv2);
275        })
276
277        //Click listener per add class searchform search-active da mobile
278        document.getElementById('menutab-active-right').addEventListener('click', attivaBarraRicercaMobile);
279
280        //Click listener per toggle class in mobile al sottomenu mobile-sub-menu - mobile-submenu-open
281        document.querySelectorAll("#mobile-sub-menu > ul > li.menu-item-has-children").forEach(
282            el => {
283                el.addEventListener( "click", toggleClassMobileSubMenu )
284            }
285        );
286
287        //Click listener per toggle class in mobile al sottomenu del sottomenu mobile-sub-menu - mobile-sub-submenu-open
288        document.querySelectorAll("#mobile-sub-menu > ul > li.menu-item-has-children > .sub-menu > li.menu-item-has-children").forEach(
289            el => {
290                el.addEventListener( "click", toggleClassMobileSubSubMenu )
291            }
292        );
293
294        // Click listener per toggle class delle tab sezioni su mobile - tab-opened
295        document.querySelector("#menutab-mobile .nav-page.active").addEventListener('click', openMenuTab);
296
297        let megaMenuLinks = new Set([
298            ...document.querySelectorAll(".tab-pane.active .max-mega-menu>li>a.mega-menu-link"),
299            ...document.querySelectorAll(".tab-pane.active .max-mega-menu>li>a.mega-menu-link>.mega-indicator")
300        ]);
301        megaMenuLinks.forEach(el => {
302            el.addEventListener('click', openSubmenuModal);
303        });
304
305
306    });
307
308    //Azioni chiusura menu mobile
309    $(".mega-menu").on("mmm:hideMobileMenu", (ev) => { // Alla chiusura del menu mobile
310
311        document.querySelector('.backdrop').classList.remove('active');
312
313
314        removeClassesOnMenuClosing();
315
316        document.body.style.overflow = 'visible';
317
318        // Remove Click listener per toggle class alle voci menu lv 2 - mega-sub-toggle-on
319        document.querySelectorAll(".tab-pane.active.mobilemenu .megamenudx .widget_nav_menu .menu > li > a").forEach(el => {
320            el.removeEventListener('click', toggleSubMenuLv2)
321        })
322
323        document.getElementById('menutab-active-right').removeEventListener('click', attivaBarraRicercaMobile);
324        document.querySelector('.titolo-search-form').removeEventListener('click', disattivaBarraRicercaMobile);
325
326        document.querySelectorAll("#mobile-sub-menu > ul > li.menu-item-has-children").forEach(
327            el => {
328                el.removeEventListener( "click", toggleClassMobileSubMenu )
329            }
330        );
331
332        document.querySelector("#menutab-mobile .nav-page.active").removeEventListener('click', openMenuTab)
333
334        let megaMenuLinks = new Set([
335            ...document.querySelectorAll(".tab-pane.active .max-mega-menu>li>a.mega-menu-link"),
336            ...document.querySelectorAll(".tab-pane.active .max-mega-menu>li>a.mega-menu-link>.mega-indicator")
337        ]);
338        megaMenuLinks.forEach(el => {
339            el.removeEventListener('click', openSubmenuModal);
340        });
341
342
343    });
344
345})

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.