PageSourceSearch

https://www.agriturismoamatrice.com/template/template-default/js/template.js

js agriturismoamatrice.com collected 2026-10-04 13:26:00 UTC 18,778 bytes, 502 lines download raw bytes

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.