summaryrefslogtreecommitdiffstats
path: root/analytics.js
blob: 95d0e1da65c1e2155eaa68339db4a5aa15a31c0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Loads Umami session replays unless this browser has opted out, and powers the opt-out toggle.
// script.js already checks the "umami.disabled" flag and its data-domains list itself; recorder.js
// checks neither, so it's loaded from here using the tracker tag's settings.

const OPT_OUT_KEY = "umami.disabled";

function optedOut() {
	try {
		return Boolean(localStorage.getItem(OPT_OUT_KEY));
	} catch {
		return false;
	}
}

const tracker = document.querySelector("script[data-website-id]");
const domains = tracker?.dataset.domains?.split(",") ?? [];

if (domains.includes(location.hostname) && !optedOut()) {
	const recorder = document.createElement("script");
	recorder.src = new URL("recorder.js", tracker.src).href;
	recorder.dataset.websiteId = tracker.dataset.websiteId;
	document.head.append(recorder);
}

const toggle = document.getElementById("analytics-toggle");

if (toggle) {
	const status = document.getElementById("analytics-status");

	const render = () => {
		const off = optedOut();
		status.textContent = off ? "Analytics are off for this browser." : "Analytics are on for this browser.";
		toggle.textContent = off ? "Turn analytics back on" : "Turn off analytics";
	};

	toggle.addEventListener("click", () => {
		if (optedOut()) {
			localStorage.removeItem(OPT_OUT_KEY);
		} else {
			localStorage.setItem(OPT_OUT_KEY, "1");
		}
		render();
	});

	render();
	toggle.hidden = false;
}