// shared/js/save-progress.js /** * Bratonien Adventskalender – Fortschritt speichern (shared) * ---------------------------------------------------------- * - speichert geöffnete Türchen (Einzeltüren & Flügeltüren) * - stellt Zustand nach Neuladen wieder her * - Dev-Modus (?dev): zeigt Reset-Button + deaktiviert Tagessperre */ (function () { const yearMatch = document.title.match(/\d{4}/); const year = yearMatch ? yearMatch[0] : new Date().getFullYear(); const STORAGE_KEY = `bratonien_opened_${year}`; /** === DEV-FLAG === */ const isDev = window.location.search.includes("dev"); window.BRATONIEN_DEV = isDev; /** === HELFER === */ function getOpenedDays() { try { return JSON.parse(localStorage.getItem(STORAGE_KEY)) || []; } catch { return []; } } function saveOpenedDays(days) { localStorage.setItem(STORAGE_KEY, JSON.stringify([...new Set(days)])); } /** === STATUS LADEN === */ window.addEventListener("DOMContentLoaded", () => { const openedDays = getOpenedDays(); openedDays.forEach(day => { // normale Tür document.querySelectorAll(`.door[data-day="${day}"]`).forEach(door => { door.classList.add("open"); }); // Flügeltüren const left = document.querySelector(`.fluegel.left[data-day="${day}"]`); const right = document.querySelector(`.fluegel.right[data-day="${day}"]`); if (left && right) { left.classList.add("rota"); right.classList.add("rota"); } }); // === DEV BUTTON === if (isDev) { const btn = document.createElement("button"); btn.textContent = "Reset Kalender"; btn.style.position = "fixed"; btn.style.bottom = "15px"; btn.style.right = "15px"; btn.style.zIndex = "9999"; btn.style.padding = "8px 14px"; btn.style.border = "2px solid gold"; btn.style.borderRadius = "10px"; btn.style.background = "#1a1a1a"; btn.style.color = "gold"; btn.style.cursor = "pointer"; btn.style.fontFamily = "sans-serif"; btn.style.fontSize = "14px"; btn.addEventListener("click", () => { localStorage.removeItem(STORAGE_KEY); location.reload(); }); const devPanel = document.getElementById("dev-panel"); if (devPanel) { devPanel.appendChild(btn); } else { const panel = document.createElement("div"); panel.id = "dev-panel"; panel.style.cssText = ` position: fixed; bottom: 10px; right: 10px; display: flex; flex-direction: column; gap: 10px; align-items: flex-end; z-index: 9999; `; document.body.appendChild(panel); panel.appendChild(btn); } } }); /** === STATUS SPEICHERN (auf Event hören) === */ document.addEventListener("doorOpened", e => { const day = e.detail?.day; if (!day) return; const opened = getOpenedDays(); if (!opened.includes(day)) { opened.push(day); saveOpenedDays(opened); } }); })();