aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Events/AniListBadges/EasterEvent2025
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-03-03 09:11:38 -0800
committerFuwn <[email protected]>2026-03-03 09:12:31 -0800
commit0b3f4af0d8061fefcdeaba1352ea8176f34b1cbd (patch)
tree5305af0876b70d0207df44febab27fb65236622d /src/lib/Events/AniListBadges/EasterEvent2025
parentrefactor(effect): harden settings and media cache json parsing (diff)
downloaddue.moe-0b3f4af0d8061fefcdeaba1352ea8176f34b1cbd.tar.xz
due.moe-0b3f4af0d8061fefcdeaba1352ea8176f34b1cbd.zip
refactor(effect): migrate svelte json hotspots to typed decoders
Diffstat (limited to 'src/lib/Events/AniListBadges/EasterEvent2025')
-rw-r--r--src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte b/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte
index ab9698d4..c48003d7 100644
--- a/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte
+++ b/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte
@@ -2,16 +2,24 @@
import { onMount, tick } from "svelte";
import { browser } from "$app/environment";
import Popup from "$lib/Layout/Popup.svelte";
+import { parseJsonStringWithSchemaOrDefault } from "$lib/Effect/json";
+import { Schema } from "effect";
export let targetID = "easter-target";
export let id: number;
let visible = false;
let showPopup = false;
+const clickedEggsSchema = Schema.Array(Schema.Number);
+const readClickedEggs = () => [
+ ...parseJsonStringWithSchemaOrDefault(
+ localStorage.getItem("easter2025ClickedEggs") || "[]",
+ clickedEggsSchema,
+ [],
+ ),
+];
-$: eggCount = browser
- ? JSON.parse(localStorage.getItem("easter2025ClickedEggs") || "[]").length
- : 0;
+$: eggCount = browser ? readClickedEggs().length : 0;
onMount(() => {
let intervalId: number | undefined;
@@ -23,8 +31,7 @@ onMount(() => {
if (!targetElement) return;
- const storedClickedEggs = localStorage.getItem("easter2025ClickedEggs");
- const clickedEggs = storedClickedEggs ? JSON.parse(storedClickedEggs) : [];
+ const clickedEggs = readClickedEggs();
const eggVisual = document.getElementById(`egg-visual-${targetID}-${id}`);
const eggClick = document.getElementById(`egg-click-${targetID}-${id}`);
const pageWidth = document.documentElement.clientWidth;
@@ -60,8 +67,7 @@ onMount(() => {
const handleClick = (event: MouseEvent) => {
if (event.button === 0) {
- const storedClickedEggs = localStorage.getItem("easter2025ClickedEggs");
- const clickedEggs = storedClickedEggs ? JSON.parse(storedClickedEggs) : [];
+ const clickedEggs = readClickedEggs();
if (!clickedEggs.includes(id)) {
clickedEggs.push(id);
@@ -92,8 +98,7 @@ const copyCode = (source: string) => {
const onLeavePopup = () => {
showPopup = false;
- const storedClickedEggs = localStorage.getItem("easter2025ClickedEggs");
- const clickedEggs = storedClickedEggs ? JSON.parse(storedClickedEggs) : [];
+ const clickedEggs = readClickedEggs();
clickedEggs.push(-1);
localStorage.setItem("easter2025ClickedEggs", JSON.stringify(clickedEggs));