PageSourceSearch

https://app.edgedelta.com/gtm/consent-defaults.js

js edgedelta.com collected 2026-10-02 04:54:31 UTC 4,109 bytes, 127 lines download raw bytes

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.