adventskalender/shared/js/lock.js hinzugefügt
This commit is contained in:
135
adventskalender/shared/js/lock.js
Normal file
135
adventskalender/shared/js/lock.js
Normal file
@@ -0,0 +1,135 @@
|
||||
// ============================================================
|
||||
// Bratonien Adventskalender – Türchen-Sperrlogik & Dev-Overlay
|
||||
// ============================================================
|
||||
// Autor: Thomas Dannenberg & GPT-5
|
||||
// Pfad: shared/js/lock.js
|
||||
// Zweck: Sperrt Türchen nach aktuellem Tag, mit Dev-Modus (?dev)
|
||||
|
||||
(() => {
|
||||
const pathMatch = window.location.pathname.match(/\/(\d{4})\//);
|
||||
const YEAR = pathMatch ? pathMatch[1] : new Date().getFullYear();
|
||||
const PARAMS = new URLSearchParams(window.location.search);
|
||||
const DEV_MODE = PARAMS.has("dev");
|
||||
|
||||
// Lokale Speicherkeys
|
||||
const KEY_SIM_DAY = `bratonien_${YEAR}_sim_day`;
|
||||
const KEY_UNLOCKED = `bratonien_${YEAR}_dev_unlock`;
|
||||
|
||||
// === Aktuellen Tag bestimmen ===
|
||||
function getCurrentDay() {
|
||||
if (DEV_MODE) {
|
||||
const simDay = parseInt(localStorage.getItem(KEY_SIM_DAY), 10) || 1;
|
||||
return simDay;
|
||||
}
|
||||
|
||||
const now = new Date();
|
||||
const month = now.getMonth() + 1; // Dez = 12
|
||||
const day = now.getDate();
|
||||
|
||||
// Nur im Dezember relevant
|
||||
if (month !== 12) return 0;
|
||||
if (day >= 25) return 25; // Nach dem 24.12. alles offen
|
||||
return day;
|
||||
}
|
||||
|
||||
// === Türchen-Freigabe prüfen ===
|
||||
window.isDoorUnlocked = function (day) {
|
||||
const current = getCurrentDay();
|
||||
const unlocked = localStorage.getItem(KEY_UNLOCKED) === "true";
|
||||
|
||||
if (unlocked) return true;
|
||||
if (current >= 25) return true; // Nach 24. alles frei
|
||||
return parseInt(day, 10) <= current;
|
||||
};
|
||||
|
||||
// === Dev-Overlay aufbauen ===
|
||||
if (DEV_MODE) {
|
||||
const overlay = document.createElement("div");
|
||||
overlay.id = "dev-overlay";
|
||||
overlay.style.cssText = `
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 10px;
|
||||
background: rgba(0,0,0,0.7);
|
||||
color: #fff;
|
||||
font-family: monospace;
|
||||
font-size: 13px;
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
z-index: 9999;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
align-items: center;
|
||||
`;
|
||||
|
||||
// Infozeile
|
||||
const info = document.createElement("div");
|
||||
info.textContent = `DEV-MODUS: Simuliertag ${getCurrentDay()}`;
|
||||
overlay.appendChild(info);
|
||||
|
||||
// Buttonleiste
|
||||
const grid = document.createElement("div");
|
||||
grid.style.cssText = `
|
||||
display: grid;
|
||||
grid-template-columns: repeat(8, 1fr);
|
||||
gap: 4px;
|
||||
`;
|
||||
|
||||
for (let i = 1; i <= 24; i++) {
|
||||
const btn = document.createElement("button");
|
||||
btn.textContent = i;
|
||||
btn.style.cssText = `
|
||||
padding: 3px 6px;
|
||||
background: #444;
|
||||
color: #fff;
|
||||
border: 1px solid #777;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
`;
|
||||
btn.onclick = () => {
|
||||
localStorage.setItem(KEY_SIM_DAY, i);
|
||||
info.textContent = `DEV-MODUS: Simuliertag ${i}`;
|
||||
};
|
||||
grid.appendChild(btn);
|
||||
}
|
||||
overlay.appendChild(grid);
|
||||
|
||||
// Unlock & Reset
|
||||
const actions = document.createElement("div");
|
||||
actions.style.cssText = "display:flex;gap:6px;margin-top:6px;";
|
||||
|
||||
const unlockBtn = document.createElement("button");
|
||||
unlockBtn.textContent = "🔓 Sperre aufheben";
|
||||
unlockBtn.style.cssText = `
|
||||
background:#2c6e49;color:white;border:none;
|
||||
padding:5px 10px;border-radius:4px;cursor:pointer;
|
||||
`;
|
||||
unlockBtn.onclick = () => {
|
||||
localStorage.setItem(KEY_UNLOCKED, "true");
|
||||
alert("Alle Türchen entsperrt.");
|
||||
};
|
||||
|
||||
const resetBtn = document.createElement("button");
|
||||
resetBtn.textContent = "⟳ Reset";
|
||||
resetBtn.style.cssText = `
|
||||
background:#8b0000;color:white;border:none;
|
||||
padding:5px 10px;border-radius:4px;cursor:pointer;
|
||||
`;
|
||||
resetBtn.onclick = () => {
|
||||
localStorage.removeItem(KEY_SIM_DAY);
|
||||
localStorage.removeItem(KEY_UNLOCKED);
|
||||
localStorage.removeItem(`bratonien_${YEAR}_progress`);
|
||||
alert("Entwicklungseinstellungen & Fortschritt zurückgesetzt.");
|
||||
location.reload();
|
||||
};
|
||||
|
||||
actions.appendChild(unlockBtn);
|
||||
actions.appendChild(resetBtn);
|
||||
overlay.appendChild(actions);
|
||||
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
|
||||
console.log(`[Lock.js] Initialisiert – aktueller Tag: ${getCurrentDay()} (Dev=${DEV_MODE})`);
|
||||
})();
|
||||
Reference in New Issue
Block a user