PageSourceSearch

https://www.uvernet-fours.fr/modules/custom/ws_popup/js/script.js?tm9uue

js uvernet-fours.fr collected 2026-10-02 20:20:39 UTC 5,905 bytes, 168 lines download raw bytes

1/* global Drupal */
2/* global once */
3(function (Drupal, once) {
4  Drupal.behaviors.ws_popup = {
5    attach: function (context, settings) {
6
7      // Initialisation du script.
8      once('ws-popup-init', document.querySelectorAll('body')).forEach(function (body) {
9        // Récupération des données pour le script.
10        const data = getScriptData();
11
12        // Vérification des conditions d'affichage.
13        let doInitDisplay = false;
14        // L'affichage doit être activé.
15        if (settings.ws_popup.enabled) {
16          doInitDisplay = true;
17          const now = new Date();
18          const { raw_date_debut, raw_date_fin } = settings.ws_popup;
19          // Si une date de début est configurée, elle doit être passée.
20          const hasDateDebut = raw_date_debut && raw_date_debut.trim() !== '';
21          if (hasDateDebut) {
22            const dateDebut = new Date(raw_date_debut);
23            doInitDisplay = doInitDisplay && now >= dateDebut;
24          }
25          // Si une date de fin est configurée, elle doit être future.
26          const hasDateFin = raw_date_fin && raw_date_fin.trim() !== '';
27          if (hasDateFin) {
28            const dateFin = new Date(raw_date_fin);
29            doInitDisplay = doInitDisplay && now < dateFin;
30          }
31        }
32
33        // Initialisation de l'affichage.
34        if (doInitDisplay) {
35          initPopupDisplay(data);
36          initBannerDisplay(data);
37        }
38      });
39
40
41      /**
42       * Récupère les données pour le script.
43       *
44       * @returns {Object} Les données.
45       */
46      function getScriptData() {
47        const config_hash = settings.ws_popup.config_hash;
48        const nowTimestamp = Math.floor(Date.now() / 1000);
49
50        // Récupération des données du localStorage.
51        const data = JSON.parse(localStorage.getItem('Drupal.ws_popup'));
52
53        // Vérification des conditions d'initialisation.
54        let doInitStorage = false;
55        // Les données existent : vérification de la validité.
56        if (data) {
57          // Les données de configuration ont changé : réinitialisation.
58          const hasConfigChanged = data.config_hash !== config_hash;
59          if (hasConfigChanged) {
60            doInitStorage = true;
61          }
62          // Les données ont plus de 24 h : réinitialisation.
63          const hasDataExpired = Math.abs(nowTimestamp - data.last_timestamp) > 86400;
64          if (hasDataExpired) {
65            doInitStorage = true;
66          }
67        }
68        // Les données n'existent pas : initialisation.
69        else {
70          doInitStorage = true;
71        }
72
73        // Initialisation du localStorage si nécessaire.
74        if (doInitStorage) {
75          const newData = {
76            config_hash,
77            last_timestamp: nowTimestamp,
78            hide_popup: false,
79            hide_banner: false,
80          };
81          setLocalStorageData(newData);
82          return newData;
83        }
84
85        // Renvoi des données existantes sinon.
86        return data;
87      }
88
89
90      /**
91       * Met à jour les données pour le script dans le localStorage.
92       *
93       * @param {Object} newData Les nouvelles données à enregistrer.
94       */
95      function setLocalStorageData(newData) {
96        localStorage.setItem('Drupal.ws_popup', JSON.stringify(newData));
97      }
98
99
100      /**
101       * Initialise l'affichage de la pop-up.
102       *
103       * @param {Object} data Les données pour le script.
104       */
105      function initPopupDisplay(data) {
106        document.querySelectorAll('.popup-area').forEach(function (popup) {
107          // Affichage de la pop-up.
108          if (settings.ws_popup.show_popup_on_page_load && !data.hide_popup) {
109            popup.classList.remove('closed');
110          }
111          // Au clic sur le bouton Fermer de la pop-up.
112          popup.querySelectorAll('.popup-overlay, .popup-close').forEach(function (element) {
113            element.addEventListener('click', function () {
114              // Fermeture de la pop-up.
115              popup.classList.add('closed');
116              // Enregistrement de la fermeture dans le localStorage.
117              if (settings.ws_popup.show_popup_on_page_load) {
118                data.hide_popup = true;
119                setLocalStorageData(data);
120              }
121            });
122          });
123
124        });
125      }
126
127
128      /**
129       * Initialise l'affichage de la bannière.
130       *
131       * @param {Object} data Les données pour le script.
132       */
133      function initBannerDisplay(data) {
134        document.querySelectorAll('.popup-banner').forEach(function (banner) {
135          // Affichage de la bannière.
136          if (!data.hide_banner) {
137            banner.classList.remove('closed');
138            document.body.classList.add('has-firstvisit-banner');
139          }
140          // Au clic sur la bannière (sauf bouton Fermer), ouverture de la pop-up.
141          banner.addEventListener('click', function (event) {
142            if (!event.target.classList.contains('banner-close')) {
143              context.querySelectorAll('.popup-area').forEach(function (popup) {
144                popup.classList.remove('closed');
145              });
146            }
147          });
148          // Au clic sur le bouton Fermer de la bannière.
149          if (settings.ws_popup.banner_closable) {
150            banner.querySelectorAll('.banner-close').forEach(function (element) {
151              element.addEventListener('click', function (event) {
152                event.preventDefault();
153                // Fermeture de la bannière.
154                banner.classList.add('closed');
155                document.body.classList.remove('has-firstvisit-banner');
156                // Enregistrement de la fermeture dans le localStorage.
157                data.hide_banner = true;
158                setLocalStorageData(data);
159              });
160            });
161          }
162
163        });
164      }
165
166    }
167  };
168})(Drupal, once);

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.