diff --git a/assets/scripts/effects.js b/assets/scripts/effects.js
index aa1167c..b1f639f 100644
--- a/assets/scripts/effects.js
+++ b/assets/scripts/effects.js
@@ -5,18 +5,13 @@ const defaultPrefs = {
language: "english",
theme: "auto",
};
-if (umami != null) {
- umami.identify({ deviceTheme: darkModeMediaQuery ? "dark" : "light" });
-}
-Object.entries(defaultPrefs).forEach(([key, defaultPref]) => {
- const currentPref = localStorage.getItem(key) ?? defaultPref;
- applyPreference(key, currentPref, false);
- document.querySelectorAll(`input[name=${key}]`).forEach((input) => {
- input.addEventListener("change", (e) => {
- applyPreference(key, e.currentTarget.value, true);
- });
- });
+
+document.querySelector('script[data-website-id]').addEventListener('load', () => {
+ try {
+ umami.identify({ deviceTheme: darkModeMediaQuery ? "dark" : "light" });
+ } catch {}
});
+
function applyPreference(key, value, shouldSave) {
if (umami !== null) {
umami.identify({
@@ -37,6 +32,31 @@ function applyPreference(key, value, shouldSave) {
}
}
+/** @param {Event} evt */
+function removeEffect({ target }) {
+ const effectsLayer = document.querySelector("#effects");
+ const effects = Array.from(effectsLayer.children).filter(
+ (e) => e.__effectParent === target,
+ );
+ effects.forEach((e) => {
+ e.getAnimations().forEach((anim) => {
+ if (anim.currentTime < 100) {
+ anim.pause();
+ effectsLayer.removeChild(e);
+ return;
+ }
+ anim.pause();
+ anim.updatePlaybackRate(-0.25);
+ anim.play();
+ anim.addEventListener("finish", () => {
+ if (effectsLayer.contains(e)) {
+ effectsLayer.removeChild(e);
+ }
+ });
+ });
+ });
+}
+
/** @param {Event} evt */
function addEffect({ target }) {
const effectsLayer = document.querySelector("#effects");
@@ -64,32 +84,20 @@ function addEffect({ target }) {
effectsLayer.appendChild(newEffect);
});
}
-document.addEventListener("mouseenter", addEffect, true);
-document.addEventListener("focus", addEffect, true);
-/** @param {Event} evt */
-function removeEffect({ target }) {
- const effectsLayer = document.querySelector("#effects");
- const effects = Array.from(effectsLayer.children).filter(
- (e) => e.__effectParent === target,
- );
- effects.forEach((e) => {
- e.getAnimations().forEach((anim) => {
- if (anim.currentTime < 100) {
- anim.pause();
- effectsLayer.removeChild(e);
- return;
- }
- anim.pause();
- anim.updatePlaybackRate(-0.25);
- anim.play();
- anim.addEventListener("finish", () => {
- if (effectsLayer.contains(e)) {
- effectsLayer.removeChild(e);
- }
+document.addEventListener('DOMContentLoaded', () => {
+ Object.entries(defaultPrefs).forEach(([key, defaultPref]) => {
+ const currentPref = localStorage.getItem(key) ?? defaultPref;
+ applyPreference(key, currentPref, false);
+ document.querySelectorAll(`input[name=${key}]`).forEach((input) => {
+ input.addEventListener("change", (e) => {
+ applyPreference(key, e.currentTarget.value, true);
});
});
});
-}
-document.addEventListener("mouseleave", removeEffect, true);
-document.addEventListener("blur", removeEffect, true);
+ document.addEventListener("mouseenter", addEffect, true);
+ document.addEventListener("focus", addEffect, true);
+
+ document.addEventListener("mouseleave", removeEffect, true);
+ document.addEventListener("blur", removeEffect, true);
+});
diff --git a/site/_includes/base.njk b/site/_includes/base.njk
index fd520a3..6fada9c 100644
--- a/site/_includes/base.njk
+++ b/site/_includes/base.njk
@@ -11,7 +11,7 @@ title: Joshua's Homepage
-
+