Files
overlord/Overlord-Server/public/assets/easter-egg.js
T

66 lines
1.7 KiB
JavaScript
Raw Normal View History

2026-08-01 01:54:07 -05:00
const EASTER_EGG_ENABLED_KEY = "overlord_easter_egg_enabled";
const EASTER_EGG_SHOWN_KEY = "overlord_easter_egg_shown";
const EASTER_EGG_URL = "/assets/console.gif";
let activeRender = null;
export function isEasterEggEnabled() {
try {
return localStorage.getItem(EASTER_EGG_ENABLED_KEY) === "true";
} catch {
return false;
}
}
export function setEasterEggEnabled(enabled) {
try {
localStorage.setItem(EASTER_EGG_ENABLED_KEY, String(Boolean(enabled)));
} catch {}
if (!enabled) {
try {
sessionStorage.removeItem(EASTER_EGG_SHOWN_KEY);
} catch {}
}
}
function wasShownThisSession() {
try {
return sessionStorage.getItem(EASTER_EGG_SHOWN_KEY) === "true";
} catch {
return false;
}
}
function markShownThisSession() {
try {
sessionStorage.setItem(EASTER_EGG_SHOWN_KEY, "true");
} catch {}
}
export async function showEnabledEasterEgg({ force = false } = {}) {
if (!isEasterEggEnabled() || (!force && wasShownThisSession())) return false;
if (activeRender) return activeRender;
activeRender = (async () => {
const response = await fetch(EASTER_EGG_URL);
if (!response.ok) throw new Error(`Easter egg failed to load (${response.status})`);
const blob = await response.blob();
if (!blob.type.startsWith("image/")) throw new Error("Easter egg response was not an image");
const objectUrl = URL.createObjectURL(blob);
console.log(
"%c ",
`background:url("${objectUrl}") left top/contain no-repeat;font-size:320px;background-color:transparent`,
);
markShownThisSession();
setTimeout(() => URL.revokeObjectURL(objectUrl), 30_000);
return true;
})().finally(() => {
activeRender = null;
});
return activeRender;
}