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.