PageSourceSearch

https://www.bonjourquebec.com/modules/custom/tq_common/libraries/cookies.js?tlv2jn

js bonjourquebec.com collected 2026-09-24 18:44:23 UTC 5,927 bytes, 168 lines download raw bytes

1/**
2 * Voir /fr-ca/admin/help/topic/tq_common.cookies.
3 */
4(function ($) {
5  "use strict";
6
7  Drupal.behaviors.tq_cookies = {
8    attach: function() {
9      this.waitForOneTrustAndAttachListener();
10    },
11    removeCookie(id) {
12      document.cookie = id + '=nothing because expires in past; expires=Thu, 18 Dec 1970 12:00:00 UTC; path=/';
13    },
14    removeLocalStorage(id) {
15      localStorage.removeItem(id);
16    },
17    setDebug: function(debug) {
18      this.debugFlag = debug;
19    },
20    debug: function (string) {
21      if (this.debugFlag) {
22        console.log('Debug: ' + string);
23      }
24    },
25    // Appeler une fonction lorsque et si l'utilisateur aura accepté
26    // les cookies de tous les types dans la variable types.
27    // Voir le README.
28    reactToConsentOnPageLoad: function () {
29      const that = this;
30      if (!this.userHasMadeSelection()) {
31        setTimeout(function() {
32          that.reactToConsentOnPageLoad();
33        }, 300);
34      }
35      else {
36        // true parce qu'on veut réagir non seulement si l'utilisateur accepte,
37        // mais aussi s'il rejette les cookies. Ceci est important dans certains
38        // contextes, par exemple si on a rejeté les cookies et qu'on va sur
39        // /fr/fiche/0rgb, et qu'on cliqur sur le carrousel, et qu'on va sur
40        // la vidéo, il est important de reagir au rejet des cookies en cacheant
41        // le iframe (vide) de la vidéo sinon il prend de la place.
42        that.reactToConsentChanged(true);
43      }
44    },
45    waitForOneTrustAndAttachListener: function() {
46      const that = this;
47      if (typeof window.OneTrust == 'undefined') {
48        setTimeout(function() {
49          that.waitForOneTrustAndAttachListener();
50        }, 300);
51      }
52      else {
53        this.reactToConsentOnPageLoad();
54        const that = this;
55        window.OneTrust.OnConsentChanged(() => {
56          that.reactToConsentChanged();
57        });
58      }
59    },
60    reactToConsentChanged: function(reactToRejected = true) {
61      const that = this;
62      if (typeof this.reactions == 'undefined') {
63        return;
64      }
65      for (const key of Object.keys(this.reactions)) {
66        this.reactions[key] = this.reactToSingle(
67          this.reactions[key],
68          reactToRejected,
69        );
70      };
71    },
72    reactToSingle: function(reaction, reactToRejected = true) {
73      if (this.userHasAcceptedCookieTypes(reaction.types)) {
74        if (reaction.actions.at(-1) != 'accepted') {
75          reaction.actions.push('accepted');
76          if (typeof reaction.callback != 'undefined') {
77            reaction.callback();
78          }
79        }
80      }
81      else if (reactToRejected) {
82        if (reaction.actions.at(-1) != 'rejected') {
83          reaction.actions.push('rejected');
84          if (typeof reaction.rejectCallback != 'undefined') {
85            reaction.rejectCallback();
86          }
87        }
88      }
89      return reaction;
90    },
91    // Appeler une fonction lorsque et si l'utilisateur aura accepté
92    // les cookies de tous les types dans types.
93    // Voir le README.
94    // Si vous voulez avez plusieurs réactions avec la même signature,
95    // vous pouvez préciser le uniqueId. Voir par exemple
96    // ./web/modules/custom/tq_common/libraries/readjust-video-iframes-when-consent-changes.js.
97    informWhenUserHasAcceptedTypes: function(
98      types,
99      callback,
100      rejectCallback,
101      uniqueId = '',
102    ) {
103      if (typeof this.reactions == 'undefined') {
104        this.reactions = {};
105      }
106
107      let reaction = {
108        types: types,
109        callback: callback,
110        rejectCallback: rejectCallback,
111        actions: [],
112      };
113
114      if (this.userHasMadeSelection() && typeof window.OneTrust != 'undefined') {
115        // Si nous avons déjà traité les réactions, traitons aussi celle-ci.
116        reaction = this.reactToSingle(reaction);
117      }
118
119      this.reactions[JSON.stringify([
120        callback.toString(),
121        rejectCallback.toString(),
122        uniqueId,
123      ])] = reaction;
124    },
125    // Pour les types, voir la section "Cookies" dans le README.
126    // Par exemple, [C0002, C0004].
127    // Pour tester: voir les types de cookies dans la section "Cookies" du
128    // REAME. Par exemple,
129    // * C0002 sont les cookies de performance
130    // * C0004 sont les cookies de publicité
131    // Donc imaginon que nous voulons savoir si l'utilisateur a choisi ces
132    // cookies.
133    // * Ouvrez une fenêtre incognito
134    // * N'appuyez ni sur Accepter ni sur Peronnalisaer
135    // * Drupal.behaviors.tq_cookies.userHasAcceptedCookieTypes(['C0002', 'C0004'])
136    //   devrait retourner false.
137    // * Appuyez sur "Accepter"
138    // * Drupal.behaviors.tq_cookies.userHasAcceptedCookieTypes(['C0002', 'C0004'])
139    //   devrait retourner true.
140    // * Fermez et rouvrer une fenêtre incognito
141    // * Appuyez sur "Accepter" et sélectionner uniquement les cookies de
142    //   performance mais pas les cookies de publicité
143    // * Drupal.behaviors.tq_cookies.userHasAcceptedCookieTypes(['C0002', 'C0004'])
144    //   devrait retourner false.
145    userHasAcceptedCookieTypes: function (types) {
146      for (let i = dataLayer.length - 1; i >= 0; i--) {
147        if (dataLayer[i].event === "OneTrustGroupsUpdated") {
148          let ret = true;
149          types.forEach((type) => {
150            if (!dataLayer[i].OnetrustActiveGroups.includes(type)) {
151              ret = false;
152            }
153          });
154          return ret;
155        }
156      }
157    },
158    // Vérifie si un utilisateur a répondu oui, non, ou partiel sur le
159    // dialogue de l'acceptation des cookies.
160    userHasMadeSelection: function() {
161      // J'ai trouvé ça par essai et erreur.
162      const cookieExistsIfUserMadeSelection = 'OptanonAlertBoxClosed';
163      const match = document.cookie.match(new RegExp('(^| )'
164        + cookieExistsIfUserMadeSelection + '=([^;]+)'));
165      return match ? true : false;
166    },
167  };
168})(jQuery);

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.