1const sezione_header = document.querySelector('header'); 2const sezione_article = document.querySelector('article'); 3const sezione_footer = document.querySelector('footer'); 4const logo_sito = document.querySelector('header .logosito'); 5const bottoneTornaSu = document.getElementById("tornaSuBtn"); 6var logo_fisso_iniziale = (document.querySelector('header .logosito .fix')) ? true : false; 7var logo_sito_img = document.querySelector('header .logosito img'); 8var header_assoluto_iniziale = (document.querySelector('header.pos_absolute')) ? true : false; 9var logo_desktop = (document.getElementById("logsit")) ? document.getElementById("logsit").dataset.logdesktop : false; 10var logo_mobile = (document.getElementById("logsit")) ? document.getElementById("logsit").dataset.logmobile : false; 11var logo_alternativo = (document.getElementById("logsit")) ? document.getElementById("logsit").dataset.logalternat : false; 12 13/* Controlli layout */ 14controlla_altezza_sezione(true); 15controlla_posizione_logo(true); 16 17/* Eventi attivabili al caricamento della pagina */ 18window.addEventListener("load", function(){ 19 20 /* Setta le dimensioni delle immagini (usato per il SEO) */ 21 let immagini_sito = [].slice.call(document.querySelectorAll("img")); 22 immagini_sito.forEach(function(immagine){ 23 let altezza = immagine.offsetHeight; 24 let larghezza = immagine.clientWidth; 25 26 immagine.setAttribute('width', larghezza); 27 immagine.setAttribute('height', altezza); 28 }); 29 30 /* Azione sul menu multilingua*/ 31 const lista_multilingue = document.querySelectorAll('nav.navmenu-lingue'); 32 if(lista_multilingue.length){ 33 for(const multilingua of lista_multilingue){ 34 multilingua.querySelector('button.multilingue').addEventListener("click", function(){ 35 multilingua.querySelector('ul').classList.toggle('sottolingue-attivo'); 36 }); 37 } 38 } 39 40 const lista_sottomenu = document.querySelectorAll('.apri-sottomenu'); 41 const backgroundbody = document.querySelector('.backbody'); 42 if(lista_sottomenu.length && backgroundbody){ 43 for(const sottomenu of lista_sottomenu){ 44 sottomenu.addEventListener('mouseenter', function() { 45 backgroundbody.classList.remove('visible'); 46 backgroundbody.classList.add('visible'); 47 }); 48 sottomenu.addEventListener('mouseleave', function() { 49 backgroundbody.classList.add('visible'); 50 backgroundbody.classList.remove('visible'); 51 }); 52 53 } 54 } 55 56 if(bottoneTornaSu){ 57 bottoneTornaSu.onclick = function() { 58 window.scrollTo({ top: 0, behavior: 'smooth' }); 59 }; 60 } 61 62 /* Azione sulla chiusura del menu multilingua*/ 63 sezione_article.addEventListener('click', chiudi_multilingua); 64 65 /* Azione sul menu nella sezione home */ 66 const menu_sezione_home = document.querySelectorAll('ul a'); 67 if(menu_sezione_home.length){ 68 for(const menu_sez of menu_sezione_home){ 69 menu_sez.addEventListener('mouseenter', function() { 70 let idvoce = this.id; 71 if(!idvoce){ return; } 72 73 let li_vocemenu = this.closest('li'); 74 if(!li_vocemenu){ return; } 75 76 /* Controlla se la sezione di menu è già selezionata */ 77 let gia_selezionata = li_vocemenu.classList.contains('sel'); 78 if(gia_selezionata){ return; } 79 80 /* Nasconde tutte le voci di menu */ 81 let lista_vocimenu = document.querySelectorAll('.menu-selezione-hover li'); 82 lista_vocimenu.forEach(function(vocemenu){ 83 vocemenu.classList.remove('sel'); 84 }); 85 86 /* Mostra la voce di menu scelta */ 87 li_vocemenu.classList.add('sel'); 88 89 /* Nasconde tutte le sezioni di menu */ 90 let lista_elementi = document.querySelectorAll('.area-selezionata-hover .colonnaarea div.row');
91 lista_elementi.forEach(function(elementomenu){ 92 elementomenu.classList.add('hide'); 93 }); 94 95 /* Mostra l'elemento scelto */ 96 let contenitore_sel = document.querySelector('.area-selezionata-hover .colonnaarea div.'+idvoce); 97 if(contenitore_sel){ 98 contenitore_sel.classList.remove('hide'); 99 } 100 }); 101 102 103 } 104 } 105 106 /* Azione sull'apertura delle voci di menu */ 107 const sottomenu = document.querySelectorAll('.apri-sottomenu'); 108 if(sottomenu.length){ 109 sottomenu.forEach(item => { 110 const trigger = item.querySelector('.nav-link'); 111 const submenu = item.querySelector('.sottomenu'); 112 113 trigger.addEventListener('click', (e) => { 114 e.preventDefault(); 115 116 const isOpen = submenu.classList.contains('aperto'); 117 118 /* Chiude tutti i sottomenu aperti */ 119 document.querySelectorAll('.sottomenu.aperto').forEach(openMenu => { 120 if (openMenu !== submenu) { 121 openMenu.style.maxHeight = openMenu.scrollHeight + 'px'; /* forza altezza prima della chiusura */ 122 requestAnimationFrame(() => { 123 openMenu.style.maxHeight = '0px'; 124 openMenu.classList.remove('aperto'); 125 openMenu.parentElement.classList.remove('sottomenu-attivo'); 126 }); 127 } 128 }); 129 130 if(!isOpen) { 131 submenu.classList.add('aperto'); 132 submenu.parentElement.classList.add('sottomenu-attivo'); 133 134 submenu.style.maxHeight = submenu.scrollHeight+'px'; 135 136 /* Rimuove max-height dopo l'animazione per non bloccare layout flessibile */ 137 submenu.addEventListener('transitionend', function handler() { 138 submenu.style.maxHeight = 'none'; 139 submenu.removeEventListener('transitionend', handler); 140 }); 141 } 142 else { 143 submenu.style.maxHeight = submenu.scrollHeight + 'px'; /*serve a riattivare la transizione*/ 144 requestAnimationFrame(() => { 145 submenu.style.maxHeight = '0px'; 146 submenu.classList.remove('aperto'); 147 submenu.parentElement.classList.remove('sottomenu-attivo'); 148 }); 149 } 150 }); 151 }); 152 } 153}); 154 155/* Eventi attivabili al resize della pagina */ 156window.addEventListener("resize", function(){ 157 controlla_altezza_sezione(false); 158 controlla_posizione_logo(true); 159}); 160 161/* Eventi attivabili allo scroll della pagina */ 162window.addEventListener("scroll", function(){ 163 if(window.scrollY > 50){ 164 /* Controlla la posizione dell'header */ 165 if(header_assoluto_iniziale){ 166 sezione_header.classList.remove('pos_absolute'); 167 sezione_header.classList.add('pos_fixed'); 168 } 169 170 /* Controlla la posizione del logo */ 171 if(logo_fisso_iniziale){ 172 if(logo_sito.classList.contains('scroll')){ 173 logo_sito.classList.remove('fix'); 174 if(logo_sito_img){ 175 logo_sito_img.src = logo_desktop; 176 } 177 } 178 } 179 } 180 else{ 181 /* Controlla la posizione dell'header */ 182 if(header_assoluto_iniziale){ 183 sezione_header.classList.remove('pos_fixed'); 184 sezione_header.classList.add('pos_absolute'); 185 } 186 187 /* Controlla la posizione del logo */ 188 if(logo_fisso_iniziale){ 189 if(logo_sito.classList.contains('scroll')){ 190 logo_sito.classList.add('fix'); 191 if(logo_sito_img){ 192 logo_sito_img.src = logo_alternativo; 193 } 194 } 195 } 196 } 197 198 if(bottoneTornaSu){ 199 if (document.body.scrollTop > 300 || document.documentElement.scrollTop > 300) { 200 bottoneTornaSu.style.display = "block"; 201 } else { 202 bottoneTornaSu.style.display = "none"; 203 } 204 } 205}); 206 207/** Avvia le funzioni al caricamento del DOM **/ 208document.addEventListener("DOMContentLoaded", function(){ 209 /*const PictureImages = [].slice.call(document.querySelectorAll("[data-lazyImg], [data-lazyBckgrd]"));*/ 210 const PictureImages = [].slice.call(document.querySelectorAll(".lazyimg, [data-lazyBckgrd]")); 211 const lazyAnimate = [].slice.call(document.querySelectorAll(".lanim")); 212 const titleTag = [].slice.call(document.querySelectorAll("a")); 213 214 const options_lazyAnimate = { 215 root: null, 216 rootMargin: '0px', 217 threshold: 0 218 }; 219 220 if("IntersectionObserver" in window){ 221 if(PictureImages){ 222 let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
223 entries.forEach(function(entry) { 224 if (entry.isIntersecting) { 225 let Picture = entry.target; 226 227 if(Picture.hasAttribute('data-lazyBckgrd')){ 228 let styleexist = Picture.getAttribute('style'); 229 Picture.setAttribute('style', Picture.getAttribute('data-lazyBckgrd')+styleexist); 230 Picture.removeAttribute('data-lazyBckgrd'); 231 } 232 else{ 233 let scourceImage = Picture.querySelectorAll('source'); 234 let imgImage = Picture.querySelector('img'); 235 236 scourceImage.forEach(function(source) { 237 source.srcset = source.dataset.srcset; 238 }); 239 240 imgImage.src = imgImage.dataset.src; 241 } 242 243 Picture.classList.remove("lazy"); 244 lazyImageObserver.unobserve(Picture); 245 } 246 }); 247 }); 248 249 PictureImages.forEach(function(Picture) { 250 lazyImageObserver.observe(Picture); 251 }); 252 } 253 254 /** Attiva l'effetto di animazione animate sull'osservazione dell'elemento **/ 255 if(lazyAnimate){ 256 const lazyAnimateObserver = new IntersectionObserver(function(entries, observer) { 257 entries.forEach(function(entry) { 258 const targetLazy = entry.target; 259 const effetto = targetLazy.getAttribute('data-lanimeffetto'); 260 const delay = targetLazy.getAttribute('data-lanimdelay'); 261 const speed = targetLazy.getAttribute('data-lanimspeed'); 262 const repeat = targetLazy.getAttribute('data-lanimrepeat'); 263 264 const array_animazione = ['lanim', 'animate__animated', effetto, delay, speed, repeat].filter(Boolean); 265 266 if (entry.isIntersecting) { 267 addClassesAnimate(targetLazy, array_animazione); 268 } 269 else { 270 let blocca_effetto; 271 272 switch(effetto){ 273 case 'animate__backInRight': 274 case 'animate__backInLeft': 275 case 'animate__backInDown': 276 case 'animate__backInUp':{ 277 blocca_effetto = true; 278 break; 279 } 280 281 default: 282 blocca_effetto = false; 283 } 284 285 if(!blocca_effetto){ 286 removeClassesAnimate(targetLazy, array_animazione); 287 } 288 } 289 }); 290 }, options_lazyAnimate); 291 292 lazyAnimate.forEach(function(targetLazy) { 293 lazyAnimateObserver.observe(targetLazy); 294 }); 295 } 296 } 297 else { 298 /* Per i browser che non supportano obser */ 299 300 if(PictureImages){ 301 PictureImages.forEach(function(Picture) { 302 let scourceImage = Picture.document.querySelectorAll('source'); 303 let imgImage = Picture.document.querySelector('img'); 304 305 scourceImage.forEach(function(source) { 306 source.srcset = source.dataset.srcset; 307 }); 308 309 imgImage.src = imgImage.dataset.src; 310 311 Picture.classList.remove("lazy"); 312 }); 313 } 314 } 315 316 /* Rimuove il tag Title al passaggio del mouse */ 317 if(titleTag){ 318 titleTag.forEach(function(tag_title){ 319 tag_title.addEventListener('mouseover', function(event) { 320 const titleOriginale = tag_title.getAttribute('title'); 321 if (titleOriginale !== null) { 322 tag_title.setAttribute('data-original-title', titleOriginale); 323 tag_title.removeAttribute('title'); 324 } 325 }); 326 327 tag_title.addEventListener('mouseout', function(event) { 328 const titleSalvato = tag_title.getAttribute('data-original-title'); 329 if (titleSalvato !== null) { 330 tag_title.setAttribute('title', titleSalvato); 331 tag_title.removeAttribute('data-original-title'); 332 } 333 }); 334 }); 335 } 336}); 337 338function addClassesAnimate(element, classes) { 339 element.classList.add(...classes); 340} 341 342function removeClassesAnimate(element, classes) { 343 element.classList.remove(...classes); 344} 345 346/** Setta l'altezza delle sezioni e l'article **/ 347function controlla_altezza_sezione(primo_caricamento = false){ 348 let altezza_header = 0; 349 350 /* 351 if(sezione_header.classList.contains('pos_fixed')){ 352 altezza_header = sezione_header ? sezione_header.offsetHeight : 0; 353 } 354 */ 355 356 sezione_article.style.marginTop = altezza_header+'px'; 357 358 /* Cicla tutte le sezioni tovate */ 359 [].forEach.call(document.querySelectorAll('article section'), function(sezione){ 360 361 let tipo_altezza = sezione.getAttribute('data-altezza'); 362 let n_sezione = parseInt(sezione.getAttribute('data-nsezione')); 363 364 switch(tipo_altezza){ 365 case 'personalizzata': 366 let altezza_sezione = sezione.getAttribute('data-altezzaimp'); 367 sezione.style.height = altezza_sezione+'px'; 368 break; 369 370 case 'full': 371 case 'trequarti': 372 case 'meta': 373 case 'condiviso': 374 adatta_altezza_sezione(sezione, tipo_altezza, n_sezione, altezza_header, primo_caricamento); 375 break; 376 377 case 'fissata': 378 break; 379 380 default: 381 return; 382 } 383 }); 384} 385 386/** Setta la posizione del logo **/ 387function controlla_posizione_logo(primo_caricamento = false){ 388 if(!logo_sito){ 389 return; 390 } 391 392 let logo_fisso = (logo_sito.classList.contains('fix')) ? true : false;
393 let posizione_logo = 'centrale'; 394 395 if(logo_fisso){ 396 logo_fisso_iniziale = (primo_caricamento) ? true : false; 397 398 if(logo_sito_img && logo_fisso_iniziale){ 399 logo_sito_img.src = logo_alternativo; 400 } 401 402 if(logo_sito.classList.contains('sinistra')){posizione_logo = 'sinistra';} 403 else if(logo_sito.classList.contains('destra')){posizione_logo = 'destra';} 404 405 adatta_posizione_logo(primo_caricamento, posizione_logo); 406 } 407} 408 409/** Adatta l'altezza delle sezioni **/ 410function adatta_altezza_sezione(sezione, tipo_altezza, n_sezione, altezza_header, primo_caricamento){ 411 let header_absolute = false; 412 let header = null; 413 414 if(sezione_header){ 415 header_absolute = (sezione_header.classList.contains('pos_absolute')) ? true : false; 416 } 417 418 if(n_sezione === 1 && header_absolute === false){ 419 header = sezione_header; 420 } 421 422 let altezza_window = window.innerHeight; 423 let altezza_sezione = 0; 424 let altezza_footer = 0; 425 426 switch(tipo_altezza){ 427 case 'full': 428 altezza_sezione = altezza_window-altezza_header-altezza_footer; 429 break; 430 431 case 'trequarti': 432 altezza_sezione = (altezza_window/1.6)-(altezza_header+altezza_footer); 433 break; 434 435 case 'meta': 436 altezza_sezione = (altezza_window/2)-(altezza_header+altezza_footer); 437 break; 438 439 case 'condiviso': 440 let sezione_successiva = sezione.nextElementSibling; 441 let altezza_sezione_successiva = sezione_successiva.offsetHeight; 442 443 altezza_sezione = altezza_window-altezza_header-altezza_sezione_successiva-altezza_footer; 444 break; 445 446 default: 447 return; 448 } 449 450 if(altezza_sezione < 1){ 451 return; 452 } 453 454 /* Aggiorna l'altezza dinamicamente */ 455 if(primo_caricamento){ 456 let get_attribute_style = sezione.getAttribute('style'); 457 if(!get_attribute_style){ 458 sezione.style.minHeight = altezza_sezione+'px'; 459 } 460 else{ 461 let aggiorna_style = get_attribute_style+'min-height:'+altezza_sezione+'px;'; 462 sezione.setAttribute('style', aggiorna_style); 463 } 464 } 465 else{ 466 sezione.style.minHeight = altezza_sezione+'px'; 467 } 468} 469 470/** Adatta la posizione del logo **/ 471function adatta_posizione_logo(primo_caricamento, posizione_logo){ 472 const header = document.querySelector('header'); 473 if(!header){ 474 return; 475 } 476 477 let altezza_header = header.offsetHeight; 478 let larghezza_logo = logo_sito.offsetWidth; 479 480 logo_sito.style.top = (altezza_header*2)+'px'; 481 482 switch(posizione_logo){ 483 case 'sinistra': 484 logo_sito.style.left = '0px'; 485 break; 486 487 case 'destra': 488 logo_sito.style.right = '0px'; 489 break; 490 491 default: 492 logo_sito.style.left = 'calc(50% - '+(larghezza_logo/2)+'px)'; 493 } 494} 495 496/* Chiudi il menu multilingua */ 497function chiudi_multilingua(){ 498 let presenza_multilingua = document.querySelectorAll('ul.sottolingue-attivo').length; 499 if(presenza_multilingua){ 500 document.querySelector('ul.sottolingue-attivo').classList.remove("sottolingue-attivo"); 501 } 502}
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.