1(function (window, document) { 2 "use strict"; 3 4 var STORAGE_KEY = "apliiq-privacy-preferences-v2"; 5 var LEGACY_KEY = "apliiq-cookie-notification"; 6 var CONSENT_VERSION = 2; 7 8 function setCookie(name, value, days) { 9 const oneDay = 24 * 60 * 60 * 1000; // milliseconds 10 const expires = new Date(Date.now() + days * oneDay).toUTCString(); 11 12 document.cookie = 13 encodeURIComponent(name) + "=" + 14 encodeURIComponent(value) + 15 "; expires=" + expires + 16 "; path=/" + 17 "; domain=.apliiq.com" + 18 "; Secure" + 19 "; SameSite=Lax"; 20 } 21 22 function getCookie(name) { 23 const cookies = document.cookie.split("; "); 24 25 for (const cookie of cookies) { 26 const parts = cookie.split("="); 27 const key = decodeURIComponent(parts[0]); 28 29 if (key === name) { 30 return decodeURIComponent(parts.slice(1).join("=")); 31 } 32 } 33 34 return null; 35 } 36 37 function deleteCookie(name) { 38 document.cookie = 39 encodeURIComponent(name) + 40 "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.apliiq.com"; 41 } 42 43 function getElement(selector) { 44 return document.querySelector(selector); 45 } 46 47 function safeParse(value) { 48 if (!value) { 49 return null; 50 } 51 52 try { 53 return JSON.parse(value); 54 } catch (error) { 55 return null; 56 } 57 } 58 59 function readPreferences() { 60 var value = getCookie(STORAGE_KEY); 61 var preferences = safeParse(value);//window.localStorage.getItem(STORAGE_KEY) 62 63 64 if (!preferences || preferences.version !== CONSENT_VERSION) { 65 return null; 66 } 67 68 return preferences; 69 } 70 71 function writePreferences(preferences) { 72 setCookie(STORAGE_KEY, JSON.stringify(preferences)); 73 deleteCookie(LEGACY_KEY); 74 //window.localStorage.setItem(STORAGE_KEY, JSON.stringify(preferences)); 75 window.localStorage.removeItem(LEGACY_KEY); 76 } 77 78 function getGpcOptOut() { 79 return navigator.globalPrivacyControl === true; 80 } 81 82 function buildPreferences(nonEssential, saleShareOptOut, source) { 83 return { 84 version: CONSENT_VERSION, 85 necessary: true, 86 nonEssential: Boolean(nonEssential), 87 saleSharingOptOut: Boolean(saleShareOptOut), 88 source: source, 89 updatedAt: new Date().toISOString() 90 }; 91 } 92 93 function applyGoogleConsent(preferences) { 94 if (typeof window.gtag !== "function") { 95 return; 96 } 97 98 var nonEssentialGranted = preferences.nonEssential === true; 99 var advertisingGranted = 100 nonEssentialGranted && preferences.saleSharingOptOut !== true; 101 102 window.gtag("consent", "update", { 103 analytics_storage: nonEssentialGranted ? "granted" : "denied", 104 functionality_storage: nonEssentialGranted ? "granted" : "denied", 105 personalization_storage: nonEssentialGranted ? "granted" : "denied", 106 ad_storage: advertisingGranted ? "granted" : "denied", 107 ad_user_data: advertisingGranted ? "granted" : "denied", 108 ad_personalization: advertisingGranted ? "granted" : "denied", 109 security_storage: "granted" 110 }); 111 } 112 113 function pushConsentEvent(preferences, eventName) { 114 window.dataLayer = window.dataLayer || []; 115 window.dataLayer.push({ 116 event: eventName, 117 apliiq_privacy_version: preferences.version, 118 apliiq_non_essential: preferences.nonEssential, 119 apliiq_sale_share_allowed: !preferences.saleSharingOptOut, 120 apliiq_sale_share_opt_out: preferences.saleSharingOptOut, 121 apliiq_privacy_source: preferences.source 122 }); 123 } 124 125 function applyPreferences(preferences, eventName) { 126 applyGoogleConsent(preferences); 127 pushConsentEvent(preferences, eventName); 128 } 129 130 function showBanner() { 131 var banner = getElement("#apq-cookie-notification"); 132 133 if (banner) { 134 banner.classList.remove("hde"); 135 } 136 } 137 138 function hideBanner() { 139 var banner = getElement("#apq-cookie-notification"); 140 141 if (banner) { 142 banner.classList.add("hde"); 143 } 144 } 145 146 function expandPreferences() { 147 var preferencesPanel = getElement("#apq-privacy-preferences"); 148 var manageButton = getElement('[data-apq-action="manage"]'); 149 150 if (!preferencesPanel || !manageButton) { 151 return; 152 } 153 154 var isHidden = preferencesPanel.classList.contains("hde");
155 preferencesPanel.classList.toggle("hde", !isHidden); 156 manageButton.setAttribute("aria-expanded", isHidden ? "true" : "false"); 157 } 158 159 function syncControls(preferences) { 160 var nonEssential = getElement("#apq-non-essential"); 161 var saleShareOptOut = getElement("#apq-sale-share-opt-out"); 162 163 if (nonEssential) { 164 nonEssential.checked = preferences ? preferences.nonEssential : false; 165 } 166 167 if (saleShareOptOut) { 168 saleShareOptOut.checked = preferences 169 ? preferences.saleSharingOptOut 170 : getGpcOptOut(); 171 } 172 } 173 174 function saveAndClose(preferences, source) { 175 preferences.source = source; 176 preferences.updatedAt = new Date().toISOString(); 177 178 writePreferences(preferences); 179 applyPreferences(preferences, "apliiq_consent_update"); 180 syncControls(preferences); 181 hideBanner(); 182 } 183 184 function handleAction(action) { 185 if (action === "allow") { 186 saveAndClose(buildPreferences(true, false, "allow_all"), "allow_all"); 187 return; 188 } 189 190 if (action === "reject") { 191 saveAndClose(buildPreferences(false, true, "reject_non_essential"), "reject_non_essential"); 192 return; 193 } 194 195 if (action === "manage") { 196 expandPreferences(); 197 return; 198 } 199 200 if (action === "save") { 201 var nonEssential = getElement("#apq-non-essential"); 202 var saleShareOptOut = getElement("#apq-sale-share-opt-out"); 203 var preferences = buildPreferences( 204 nonEssential ? nonEssential.checked : false, 205 saleShareOptOut ? saleShareOptOut.checked : true, 206 "saved_preferences" 207 ); 208 209 saveAndClose(preferences, "saved_preferences"); 210 } 211 } 212 213 function bindActions() { 214 var actionButtons = document.querySelectorAll("[data-apq-action]"); 215 216 for (var i = 0; i < actionButtons.length; i += 1) { 217 actionButtons[i].addEventListener("click", function () { 218 handleAction(this.getAttribute("data-apq-action")); 219 }); 220 } 221 } 222 223 function initialize() { 224 var savedPreferences = readPreferences(); 225 226 bindActions(); 227 228 if (savedPreferences) { 229 if (getGpcOptOut() && savedPreferences.saleSharingOptOut !== true) { 230 savedPreferences.saleSharingOptOut = true; 231 savedPreferences.source = "global_privacy_control"; 232 savedPreferences.updatedAt = new Date().toISOString(); 233 writePreferences(savedPreferences); 234 } 235 236 syncControls(savedPreferences); 237 applyPreferences(savedPreferences, "apliiq_consent_ready"); 238 return; 239 } 240 241 var defaultPreferences = buildPreferences( 242 false, 243 getGpcOptOut(), 244 getGpcOptOut() ? "global_privacy_control" : "default_denied" 245 ); 246 247 syncControls(defaultPreferences); 248 applyPreferences(defaultPreferences, "apliiq_consent_ready"); 249 showBanner(); 250 } 251 252 window.showBanner = showBanner; 253 254 if (document.readyState === "loading") { 255 document.addEventListener("DOMContentLoaded", initialize); 256 } else { 257 initialize(); 258 } 259 260}(window, document));
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.