PageSourceSearch

https://www.idi.org.il/js/cookies.js

js idi.org.il collected 2026-10-02 02:18:58 UTC 5,488 bytes, 144 lines download raw bytes

1document.addEventListener('DOMContentLoaded', () => {
2    const KEY = 'site_cookie_prefs_v1';
3
4    // helper-safe getter
5    const $ = id => document.getElementById(id);
6
7    const cookieBanner = $('cookieBanner');
8    const prefsModal = $('prefsModal');
9    const manageBtn = $('manageBtn');
10    const acceptAllBtn = $('acceptAllBtn');
11    const savePrefs = $('savePrefs');
12    const cancelPrefs = $('cancelPrefs');
13    const openPrefsFooter = $('openPrefsFooter');
14    const analyticsToggle = $('analyticsToggle');
15    const marketingToggle = $('marketingToggle');
16    const debugReset = $('debugReset');
17
18    // verify elements exist
19    if (!cookieBanner) { console.log('cookieBanner missing'); return; }
20
21    // safe parse
22    function safeParse(raw) {
23        try { return JSON.parse(raw); } catch (e) { console.warn('corrupt prefs, removing'); localStorage.removeItem(KEY); return null; }
24    }
25
26    function defaultPrefs() { return { essential: true, analytics: true, marketing: true, ts: new Date().toISOString() }; }
27
28    function loadPrefs() {
29        const raw = localStorage.getItem(KEY);
30        if (!raw) return null;
31        return safeParse(raw);
32    }
33
34    function savePrefsToStorage(p) {
35        try {
36            localStorage.setItem(KEY, JSON.stringify(p));
37            console.log('Preferences saved:', p);
38            hideBanner();
39            closeModal();
40            applyPrefs(p);
41        } catch (e) {
42            console.log('Cannot save prefs:', e);
43            alert('שגיאה בשמירת העדפות — בדוק הגדרות דפדפן/פרטיות.');
44        }
45    }
46
47    function applyPrefs(p) {
48        if (!p) return;
49        if (p.analytics) enableAnalytics(); else disableAnalytics();
50        console.log('Marketing enabled?', !!p.marketing);
51    }
52
53    function enableAnalytics() {
54        if (window.__analytics_loaded) return;
55        window.__analytics_loaded = true;
56        loadAnalytics();
57        console.log('Analytics: loading (...)');
58    }
59    function disableAnalytics() { console.log('Analytics: disabled'); }
60
61    function showBanner() { cookieBanner.style.display = 'flex'; cookieBanner.setAttribute('aria-hidden', 'false'); }
62    function hideBanner() {
63        cookieBanner.style.display = 'none'; cookieBanner.setAttribute('aria-hidden', 'true');
64        debugReset.style.display = 'block';
65    }
66    function openModal() {
67        if (!prefsModal) { console.warn('prefsModal not found'); return; }
68        prefsModal.style.display = 'flex';
69        const p = loadPrefs() || defaultPrefs();
70        analyticsToggle.checked = !!p.analytics;
71        marketingToggle.checked = !!p.marketing;
72        analyticsToggle.focus();
73    }
74    function closeModal() { if (prefsModal) prefsModal.style.display = 'none'; }
75
76    // events (guard each element)
77    if (manageBtn) manageBtn.addEventListener('click', openModal);
78    if (debugReset) debugReset.addEventListener('click', openModal);
79    if (openPrefsFooter) openPrefsFooter.addEventListener('click', openModal);
80    if (acceptAllBtn) acceptAllBtn.addEventListener('click', () => {
81        savePrefsToStorage({ essential: true, analytics: true, marketing: true, ts: new Date().toISOString() });
82    });
83    if (savePrefs) savePrefs.addEventListener('click', () => {
84        const p = { essential: true, analytics: !!analyticsToggle.checked, marketing: !!marketingToggle.checked, ts: new Date().toISOString() };
85        savePrefsToStorage(p);
86    });
87    if (cancelPrefs) cancelPrefs.addEventListener('click', closeModal);
88    if (prefsModal) prefsModal.addEventListener('click', e => { if (e.target === prefsModal) closeModal(); });
89
90    // debug reset
91    //if (debugReset) debugReset.addEventListener('click', () => {
92    //    localStorage.removeItem(KEY);
93    //    console.log('Prefs removed. Reloading...');
94    //    location.reload();
95    //});
96
97    // initial flow
98    try {
99        const prefs = loadPrefs();
100        if (!prefs) {
101            console.log('No prefs found — showing banner');
102            showBanner();
103        } else {
104            console.log('Prefs loaded:', prefs);
105            hideBanner();
106            applyPrefs(prefs);
107        }
108    } catch (err) {
109        console.log('Initialization error:', err);
110        // show banner as fallback
111        showBanner();
112    }
113
114    // helpful global for debugging
115    window.getCookiePrefs = () => loadPrefs();
116
117    // global error handler (dev help)
118    window.addEventListener('error', (ev) => {
119        console.log('Window error captured:', ev.error || ev.message);
120    });
121    function loadAnalytics() {
122        if (window.__analytics_loaded) return; // לא לטעון פעמיים
123        window.__analytics_loaded = true;
124
125        // טען את הסקריפט של GA4
126        const s = document.createElement('script');
127        s.async = true;
128        s.src = 'https://www.googletagmanager.com/gtag/js?id=GTM-KMQ4995'; // <<-- שים כאן את מזהה GA4 שלך
129        document.head.appendChild(s);
130
131        // אתחל את gtag
132        window.dataLayer = window.dataLayer || [];
133        function gtag() { dataLayer.push(arguments); }
134        window.gtag = gtag;
135        gtag('js', new Date());
136        gtag('config', 'GTM-KMQ4995'); // <<-- אותו מזהה כמו למעלה
137
138        console.log('Analytics: GA4 loaded');
139       
140    }
141
142
143});
144

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.