PageSourceSearch

https://www.sparkil.org/wp-content/plugins/dgis-cookies/assets/js/cookie-banner.js?ver=1.7.1

js sparkil.org collected 2026-09-26 07:51:53 UTC 7,324 bytes, 206 lines download raw bytes

1(function() {
2  'use strict';
3
4  var COOKIE_NAME = 'dgis_cookie_prefs';
5  var analyticsPatterns = [];
6  var marketingPatterns = [];
7
8  if (typeof DGIS_COOKIE_DATA === 'object' && DGIS_COOKIE_DATA) {
9    COOKIE_NAME = DGIS_COOKIE_DATA.cookieName || COOKIE_NAME;
10    if (Array.isArray(DGIS_COOKIE_DATA.analytics_patterns)) analyticsPatterns = DGIS_COOKIE_DATA.analytics_patterns;
11    if (Array.isArray(DGIS_COOKIE_DATA.marketing_patterns)) marketingPatterns = DGIS_COOKIE_DATA.marketing_patterns;
12  }
13
14  if (!analyticsPatterns.length) analyticsPatterns = ['G-', 'UA-', '_ga', 'gtag/js', 'analytics.js', 'gtm.js', 'hotjar', 'clarity', 'mixpanel', 'plausible.io'];
15  if (!marketingPatterns.length) marketingPatterns = ['fbq', '_fbp', 'fbevents.js', 'tr?id=', 'tiktok', 'ttq', 'adsbygoogle', 'googleadservices', 'pagead2.googlesyndication.com'];
16
17  function getCookie(name) {
18    var parts = ('; ' + document.cookie).split('; ' + name + '=');
19    if (parts.length === 2) return decodeURIComponent(parts.pop().split(';').shift());
20    return null;
21  }
22
23  function setCookie(name, value, days) {
24    var expires = '';
25    if (days) {
26      var d = new Date();
27      d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000);
28      expires = '; expires=' + d.toUTCString();
29    }
30    document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/; SameSite=Lax';
31  }
32
33  function readPrefs() {
34    var raw = getCookie(COOKIE_NAME);
35    if (!raw) return null;
36    try { return JSON.parse(raw); } catch (e) { return null; }
37  }
38
39  function savePrefs(prefs) {
40    setCookie(COOKIE_NAME, JSON.stringify(prefs), 180);
41  }
42
43  function elementMatchesPatterns(el, patterns) {
44    if (!patterns || !patterns.length) return false;
45    var src = el.getAttribute && el.getAttribute('src') || '';
46    var html = el.tagName === 'SCRIPT' ? (el.innerHTML || '') : '';
47    for (var i = 0; i < patterns.length; i++) {
48      var p = patterns[i];
49      if (!p) continue;
50      if ((src && src.indexOf(p) !== -1) || (html && html.indexOf(p) !== -1)) return true;
51    }
52    return false;
53  }
54
55  function blockByPatterns(patterns) {
56    if (!patterns || !patterns.length) return;
57    var nodes = document.querySelectorAll('script,iframe');
58    nodes.forEach(function(el) {
59      if (el.dataset && el.dataset.dgisBlocked === '1') return;
60      if (!elementMatchesPatterns(el, patterns)) return;
61
62      if (el.tagName === 'SCRIPT') {
63        var originalSrc = el.getAttribute('src');
64        if (originalSrc) el.setAttribute('data-dgis-original-src', originalSrc);
65        el.type = 'text/plain';
66        el.removeAttribute('src');
67      } else if (el.tagName === 'IFRAME') {
68        if (el.parentNode) el.parentNode.removeChild(el);
69      }
70      if (el.dataset) el.dataset.dgisBlocked = '1';
71    });
72  }
73
74  function applyBlocking(prefs) {
75    if (!prefs) {
76      blockByPatterns(analyticsPatterns);
77      blockByPatterns(marketingPatterns);
78      return;
79    }
80    if (!prefs.analytics) blockByPatterns(analyticsPatterns);
81    if (!prefs.marketing) blockByPatterns(marketingPatterns);
82  }
83
84  function restoreBlockedScriptsByPatterns(patterns) {
85    if (!patterns || !patterns.length) return;
86    var blocked = document.querySelectorAll('script[data-dgis-blocked="1"]');
87    blocked.forEach(function(oldScript) {
88      var src = oldScript.getAttribute('data-dgis-original-src');
89      if (!src) return;
90      var matched = false;
91      for (var i = 0; i < patterns.length; i++) {
92        if (src.indexOf(patterns[i]) !== -1) { matched = true; break; }
93      }
94      if (!matched) return;
95
96      var s = document.createElement('script');
97      s.src = src;
98      s.async = oldScript.async;
99      s.defer = oldScript.defer;
100      oldScript.parentNode && oldScript.parentNode.replaceChild(s, oldScript);
101    });
102  }
103
104  var observerStarted = false;
105  function startObserver() {
106    if (observerStarted || !window.MutationObserver) return;
107    observerStarted = true;
108    var obs = new MutationObserver(function() {
109      applyBlocking(readPrefs());
110    });
111    obs.observe(document.documentElement, { childList: true, subtree: true });
112  }
113
114  function init() {
115    var banner = document.getElementById('dgis-cookie-banner');
116    if (!banner) return;
117
118    var acceptBtn = document.getElementById('dgis-accept-all');
119    var rejectBtn = document.getElementById('dgis-reject-all');
120    var settingsBtn = document.getElementById('dgis-open-settings');
121    var reopenBtn = document.getElementById('dgis-cookie-reopen');
122
123    var modal = document.getElementById('dgis-cookie-settings');
124    var overlay = modal && modal.querySelector('.dgis-overlay');
125    var analyticsCb = document.getElementById('dgis-analytics');
126    var marketingCb = document.getElementById('dgis-marketing');
127
128    function updateReopenVisibility(prefs) {
129      if (!reopenBtn) return;
130      reopenBtn.style.display = prefs ? 'flex' : 'none';
131    }
132
133    function openModal() {
134      if (!modal) return;
135      var p = readPrefs() || { analytics: false, marketing: false };
136      if (analyticsCb) analyticsCb.checked = !!p.analytics;
137      if (marketingCb) marketingCb.checked = !!p.marketing;
138      modal.classList.remove('dgis-hidden');
139      modal.setAttribute('aria-hidden', 'false');
140    }
141
142    function closeModal() {
143      if (!modal) return;
144      modal.classList.add('dgis-hidden');
145      modal.setAttribute('aria-hidden', 'true');
146    }
147
148    var prefs = readPrefs();
149    applyBlocking(prefs);
150    startObserver();
151    updateReopenVisibility(prefs);
152    if (prefs) banner.style.display = 'none';
153
154    if (acceptBtn) {
155      acceptBtn.addEventListener('click', function() {
156        var p = { necessary: true, analytics: true, marketing: true };
157        savePrefs(p);
158        restoreBlockedScriptsByPatterns(analyticsPatterns);
159        restoreBlockedScriptsByPatterns(marketingPatterns);
160        banner.style.display = 'none';
161        updateReopenVisibility(p);
162      });
163    }
164
165    if (rejectBtn) {
166      rejectBtn.addEventListener('click', function() {
167        var p = { necessary: true, analytics: false, marketing: false };
168        savePrefs(p);
169        applyBlocking(p);
170        banner.style.display = 'none';
171        updateReopenVisibility(p);
172      });
173    }
174
175    if (settingsBtn) settingsBtn.addEventListener('click', openModal);
176    if (reopenBtn) reopenBtn.addEventListener('click', openModal);
177
178    var cancelBtn = document.getElementById('dgis-cancel-settings');
179    if (cancelBtn) cancelBtn.addEventListener('click', closeModal);
180    if (overlay) overlay.addEventListener('click', closeModal);
181
182    var saveBtn = document.getElementById('dgis-save-settings');
183    if (saveBtn) {
184      saveBtn.addEventListener('click', function() {
185        var p = {
186          necessary: true,
187          analytics: analyticsCb ? analyticsCb.checked : false,
188          marketing: marketingCb ? marketingCb.checked : false
189        };
190        savePrefs(p);
191        applyBlocking(p);
192        if (p.analytics) restoreBlockedScriptsByPatterns(analyticsPatterns);
193        if (p.marketing) restoreBlockedScriptsByPatterns(marketingPatterns);
194        banner.style.display = 'none';
195        closeModal();
196        updateReopenVisibility(p);
197      });
198    }
199  }
200
201  if (document.readyState === 'loading') {
202    document.addEventListener('DOMContentLoaded', init);
203  } else {
204    init();
205  }
206})();

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.