PageSourceSearch

https://www.antidote.info/user/plugins/druide-shortcodes-antidote/js/fenetre-modale-achat-a-fam.js?g-58793cc4

js antidote.info collected 2026-10-01 10:27:04 UTC 3,602 bytes, 107 lines download raw bytes

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.