Il banner consente solo necessari o tutti i cookie; GA4 si carica solo dopo consenso. Aggiornati privacy, footer, sitemap e variabile GOOGLE_ANALYTICS_MEASUREMENT_ID. Co-authored-by: Cursor <cursoragent@cursor.com>
135 lines
3.4 KiB
JavaScript
135 lines
3.4 KiB
JavaScript
(function () {
|
|
"use strict";
|
|
|
|
var STORAGE_KEY = "mltv_cookie_consent";
|
|
var COOKIE_NAME = "mltv_cookie_consent";
|
|
var COOKIE_MAX_AGE = 365 * 24 * 60 * 60;
|
|
|
|
function readConsent() {
|
|
try {
|
|
var raw = localStorage.getItem(STORAGE_KEY);
|
|
if (!raw) return null;
|
|
return JSON.parse(raw);
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function writeConsent(consent) {
|
|
var payload = {
|
|
necessary: true,
|
|
analytics: !!consent.analytics,
|
|
ts: Date.now()
|
|
};
|
|
try {
|
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(payload));
|
|
} catch (e) { /* ignore */ }
|
|
var value = payload.analytics ? "all" : "necessary";
|
|
document.cookie =
|
|
COOKIE_NAME + "=" + value +
|
|
"; path=/; max-age=" + COOKIE_MAX_AGE +
|
|
"; SameSite=Lax" +
|
|
(location.protocol === "https:" ? "; Secure" : "");
|
|
return payload;
|
|
}
|
|
|
|
function measurementId() {
|
|
return document.body && document.body.getAttribute("data-ga-id");
|
|
}
|
|
|
|
function loadGoogleAnalytics() {
|
|
var id = measurementId();
|
|
if (!id || window.__mltvGaLoaded) return;
|
|
|
|
window.dataLayer = window.dataLayer || [];
|
|
function gtag() { window.dataLayer.push(arguments); }
|
|
window.gtag = gtag;
|
|
|
|
gtag("consent", "default", {
|
|
analytics_storage: "denied",
|
|
ad_storage: "denied",
|
|
ad_user_data: "denied",
|
|
ad_personalization: "denied",
|
|
functionality_storage: "granted",
|
|
security_storage: "granted"
|
|
});
|
|
|
|
gtag("consent", "update", { analytics_storage: "granted" });
|
|
|
|
var script = document.createElement("script");
|
|
script.async = true;
|
|
script.src = "https://www.googletagmanager.com/gtag/js?id=" + encodeURIComponent(id);
|
|
script.onload = function () {
|
|
gtag("js", new Date());
|
|
gtag("config", id, { anonymize_ip: true, allow_google_signals: false });
|
|
};
|
|
document.head.appendChild(script);
|
|
window.__mltvGaLoaded = true;
|
|
}
|
|
|
|
function applyConsent(consent) {
|
|
if (consent && consent.analytics) {
|
|
loadGoogleAnalytics();
|
|
}
|
|
}
|
|
|
|
function hideBanner(banner) {
|
|
if (!banner) return;
|
|
banner.hidden = true;
|
|
banner.setAttribute("aria-hidden", "true");
|
|
}
|
|
|
|
function showBanner(banner) {
|
|
if (!banner) return;
|
|
banner.hidden = false;
|
|
banner.removeAttribute("aria-hidden");
|
|
}
|
|
|
|
function bindBanner(banner) {
|
|
var acceptAll = banner.querySelector("[data-cookie-accept-all]");
|
|
var reject = banner.querySelector("[data-cookie-reject]");
|
|
|
|
if (acceptAll) {
|
|
acceptAll.addEventListener("click", function () {
|
|
var c = writeConsent({ analytics: true });
|
|
applyConsent(c);
|
|
hideBanner(banner);
|
|
});
|
|
}
|
|
|
|
if (reject) {
|
|
reject.addEventListener("click", function () {
|
|
writeConsent({ analytics: false });
|
|
hideBanner(banner);
|
|
});
|
|
}
|
|
}
|
|
|
|
function init() {
|
|
var banner = document.getElementById("cookie-banner");
|
|
var consent = readConsent();
|
|
|
|
if (consent) {
|
|
applyConsent(consent);
|
|
hideBanner(banner);
|
|
} else {
|
|
showBanner(banner);
|
|
}
|
|
|
|
bindBanner(banner);
|
|
|
|
document.querySelectorAll("[data-cookie-manage]").forEach(function (el) {
|
|
el.addEventListener("click", function (e) {
|
|
e.preventDefault();
|
|
showBanner(banner);
|
|
});
|
|
});
|
|
}
|
|
|
|
if (document.readyState === "loading") {
|
|
document.addEventListener("DOMContentLoaded", init);
|
|
} else {
|
|
init();
|
|
}
|
|
})();
|