1const template = document.querySelector('#app-shell'); 2if (template) { 3 document.body.appendChild(template.content); 4} 5 6const cartes = document.querySelectorAll(".carte-formule"); 7const conteneurApplication = document.querySelector(".coquille-application"); 8const fenetreModaleElem = document.querySelector(".fenetre-modale"); 9const boutonFermerFenetreModale = document.querySelector(".fermeture-modale"); 10const boutonElem = document.querySelector('button.bouton-action'); 11const declencheursFenetreModale = document.querySelectorAll('[data-show="fenetre-modale-achat-a-fam"]'); 12const ancresOuvertureFenetreModale = ['abonnement-apro', 'apro-subscription']; 13const domaineServicesDruide = conteneurApplication?.dataset.servicesDruideDomain || 'services.druide.com'; 14const i18n_bouton = JSON.parse(boutonElem?.dataset.infos || '{}'); 15 16function ouvreFenetreModale() { 17 if (!conteneurApplication) return; 18 conteneurApplication.removeAttribute("hidden"); 19 document.body.classList.add('coquille-application-ouverte'); 20} 21 22function ouvreFenetreModaleDepuisEvenement(event) { 23 event.preventDefault(); 24 event.stopPropagation(); 25 26 i18n_bouton['fam'].lien = event.target.dataset?.lien; 27 28 ouvreFenetreModale(); 29} 30 31declencheursFenetreModale.forEach(function(declencheurFenetreModale) { 32 declencheurFenetreModale.addEventListener('contextmenu', function(event) { 33 ouvreFenetreModaleDepuisEvenement(event); 34 }); 35 declencheurFenetreModale.addEventListener('click', function(event) { 36 ouvreFenetreModaleDepuisEvenement(event); 37 }); 38 declencheurFenetreModale.addEventListener("keydown", function(event) { 39 if (event.key !== "Enter") return; 40 ouvreFenetreModaleDepuisEvenement(event); 41 }); 42}); 43 44function fermeFenetreModale() { 45 if (!conteneurApplication) return; 46 conteneurApplication.hidden = true; 47 document.body.classList.remove('coquille-application-ouverte'); 48} 49 50function obtientCarteSelectionnee() { 51 return document.querySelector('input[name="plan"]:checked')?.parentElement; 52} 53 54function metAJourBouton() { 55 if (!obtientCarteSelectionnee()) { 56 boutonElem.setAttribute('disabled', 'disabled'); 57 } else { 58 changeTexteBouton(); 59 boutonElem.removeAttribute('disabled'); 60 } 61} 62 63function onChangePlan() { 64 metAJourBouton(); 65} 66 67function changeTexteBouton() { 68 const carteSelectionneeElem = obtientCarteSelectionnee(); 69 const typePlan = carteSelectionneeElem.dataset.planType; 70 71 boutonElem.innerHTML = i18n_bouton[typePlan].texte; 72 boutonElem.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' }); 73} 74 75function donneURLBouton() { 76 const carteSelectionneeElem = obtientCarteSelectionnee(); 77 const typePlan = carteSelectionneeElem.dataset.planType; 78 79 return i18n_bouton[typePlan].lien; 80} 81 82boutonElem.addEventListener('click', function(event) { 83 const url = donneURLBouton(); 84 window.location.href = url; 85}); 86 87boutonFermerFenetreModale?.addEventListener("click", fermeFenetreModale); 88 89document.addEventListener("click", (event) => { 90 if (conteneurApplication?.hidden || !fenetreModaleElem) return; 91 if (fenetreModaleElem.contains(event.target)) return; 92 if (event.target.closest('#cm')) return; // Permet de ne pas fermer la fenêtre modale lors d'un clic sur le panneau de consentement aux témoins. 93 fermeFenetreModale(); 94}); 95 96document.addEventListener("keydown", (event) => { 97 if (event.key !== "Escape") return; 98 if (conteneurApplication?.hidden) return; 99 fermeFenetreModale(); 100}); 101 102document.querySelectorAll('input[name="plan"]').forEach((champ) => { 103 champ.addEventListener("change", (event) => { 104 onChangePlan(); 105 }); 106}); 107onChangePlan();
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.