diff options
Diffstat (limited to 'src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte')
| -rw-r--r-- | src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte | 23 |
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)); |