← back to Open Seo
badseo/public/analytics.js
117 lines
/* oxlint-disable typescript-eslint/no-unsafe-argument, typescript-eslint/no-unsafe-assignment, typescript-eslint/no-unsafe-call, typescript-eslint/no-unsafe-member-access -- This standalone browser script defines Google's dynamic dataLayer globals. */
(function () {
"use strict";
var measurementId = "G-7MXV9FH7SS";
var storageKey = "badseo.analyticsConsent";
var granted = "granted";
var denied = "denied";
function readConsent() {
try {
return window.localStorage.getItem(storageKey);
} catch {
return null;
}
}
function writeConsent(value) {
try {
window.localStorage.setItem(storageKey, value);
} catch {
// The choice still applies to this page when storage is unavailable.
}
}
function loadAnalytics() {
if (document.getElementById("ga4-script")) return;
window["ga-disable-" + measurementId] = false;
window.dataLayer = window.dataLayer || [];
window.gtag = function () {
window.dataLayer.push(arguments);
};
window.gtag("consent", "default", {
analytics_storage: "granted",
ad_storage: "denied",
ad_user_data: "denied",
ad_personalization: "denied",
});
window.gtag("js", new Date());
window.gtag("config", measurementId);
var script = document.createElement("script");
script.id = "ga4-script";
script.async = true;
script.src =
"https://www.googletagmanager.com/gtag/js?id=" +
encodeURIComponent(measurementId);
document.head.appendChild(script);
}
function deleteAnalyticsCookies() {
document.cookie.split(";").forEach(function (cookie) {
var name = cookie.split("=")[0].trim();
if (name !== "_ga" && !name.startsWith("_ga_")) return;
document.cookie = name + "=; Max-Age=0; path=/; SameSite=Lax";
if (window.location.hostname.endsWith("badseo.dev")) {
document.cookie =
name + "=; Max-Age=0; path=/; domain=.badseo.dev; SameSite=Lax";
}
});
}
function createBanner() {
var banner = document.createElement("div");
banner.className = "consent-banner";
banner.setAttribute("role", "dialog");
banner.setAttribute("aria-modal", "true");
banner.setAttribute("aria-labelledby", "consent-title");
banner.hidden = true;
banner.innerHTML =
'<div class="consent-copy">' +
'<strong id="consent-title">This website uses cookies</strong>' +
"<p>We use cookies to ensure you get the best experience.</p>" +
'<a href="/privacy">Privacy policy</a>' +
"</div>" +
'<div class="consent-actions">' +
'<button type="button" data-consent="denied">Reject</button>' +
'<button type="button" class="consent-accept" data-consent="granted">Accept</button>' +
"</div>";
document.body.appendChild(banner);
banner.addEventListener("click", function (event) {
var button = event.target.closest("[data-consent]");
if (!button) return;
var previous = readConsent();
var choice = button.getAttribute("data-consent");
writeConsent(choice);
banner.hidden = true;
if (choice === granted) {
loadAnalytics();
return;
}
window["ga-disable-" + measurementId] = true;
deleteAnalyticsCookies();
if (previous === granted) window.location.reload();
});
return banner;
}
var banner = createBanner();
var consent = readConsent();
if (consent === granted) loadAnalytics();
else if (consent !== denied) banner.hidden = false;
document.addEventListener("click", function (event) {
if (!event.target.closest("[data-cookie-settings]")) return;
banner.hidden = false;
banner.querySelector("button").focus();
});
})();