1/** 2 * Google Consent Mode Defaults 3 * 4 * This script MUST run before GTM loads to properly block tags until consent is given. 5 * index.html loads it as a blocking script to ensure synchronous execution. 6 * 7 * Keep EU_COUNTRIES in sync with cookie-consent.utils.ts 8 */ 9(function () { 10 var STORAGE_KEY = 'edgeDeltaCookieConsent'; 11 var CONSENT_WAIT_TIMEOUT = 2000; 12 var EU_COUNTRIES = [ 13 'AT', 14 'BE', 15 'BG', 16 'HR', 17 'CY', 18 'CZ', 19 'DK', 20 'EE', 21 'FI', 22 'FR', 23 'DE', 24 'GR', 25 'HU', 26 'IE', 27 'IT', 28 'LV', 29 'LT', 30 'LU', 31 'MT', 32 'NL', 33 'PL', 34 'PT', 35 'RO', 36 'SK', 37 'SI', 38 'ES', 39 'SE', 40 'GB', 41 'CH', 42 'IS', 43 'LI', 44 'NO', 45 ]; 46 // Initialize dataLayer and gtag 47 // Note: gtag function MUST push to dataLayer as an array for consent commands to work 48 window.dataLayer = window.dataLayer || []; 49 50 // Create the gtag function that pushes arguments as an array to dataLayer 51 // This is the standard Google gtag.js implementation pattern 52 function gtag() { 53 window.dataLayer.push(arguments); 54 } 55 window.gtag = gtag; 56 // Default: grant all globally 57 window.gtag('consent', 'default', { 58 ad_storage: 'granted', 59 ad_user_data: 'granted', 60 ad_personalization: 'granted', 61 analytics_storage: 'granted', 62 functionality_storage: 'granted', 63 personalization_storage: 'granted', 64 security_storage: 'granted', 65 wait_for_update: CONSENT_WAIT_TIMEOUT, 66 }); 67 // EU/EEA countries: deny by default (GDPR) 68 window.gtag('consent', 'default', { 69 ad_storage: 'denied', 70 ad_user_data: 'denied', 71 ad_personalization: 'denied', 72 analytics_storage: 'denied', 73 personalization_storage: 'denied', 74 region: EU_COUNTRIES, 75 wait_for_update: CONSENT_WAIT_TIMEOUT, 76 }); 77 // California: deny by default (CCPA/CPRA) 78 // Note: analytics_storage is granted as CCPA primarily restricts sale/sharing of personal info 79 window.gtag('consent', 'default', { 80 ad_storage: 'denied', 81 ad_user_data: 'denied', 82 ad_personalization: 'denied', 83 analytics_storage: 'granted', 84 personalization_storage: 'denied', 85 region: ['US-CA'], 86 wait_for_update: CONSENT_WAIT_TIMEOUT, 87 }); 88 // Global Privacy Control: deny for all regions if GPC is enabled 89 var gpcEnabled = typeof navigator.globalPrivacyControl === 'boolean' ? navigator.globalPrivacyControl : false; 90 if (gpcEnabled) { 91 window.gtag('consent', 'default', { 92 ad_storage: 'denied', 93 ad_user_data: 'denied', 94 ad_personalization: 'denied', 95 analytics_storage: 'denied', 96 personalization_storage: 'denied', 97 wait_for_update: CONSENT_WAIT_TIMEOUT, 98 }); 99 } 100 // If user already gave consent, apply it immediately 101 try { 102 var stored = localStorage.getItem(STORAGE_KEY); 103 if (stored) { 104 var parsed = JSON.parse(stored); 105 if (typeof parsed === 'object' && 106 parsed !== null && 107 typeof parsed.marketing === 'boolean' && 108 typeof parsed.analytics === 'boolean' && 109 typeof parsed.functional === 'boolean') { 110 var marketingState = parsed.marketing ? 'granted' : 'denied'; 111 window.gtag('consent', 'update', { 112 ad_storage: marketingState, 113 ad_user_data: marketingState, 114 ad_personalization: marketingState, 115 analytics_storage: parsed.analytics ? 'granted' : 'denied', 116 functionality_storage: parsed.functional ? 'granted' : 'denied', 117 personalization_storage: marketingState, 118 security_storage: 'granted', 119 }); 120 } 121 } 122 } 123 catch (_a) { 124 // Ignore errors reading localStorage 125 } 126})(); 127
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.