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.