adventskalender/shared/js/door-open.js aktualisiert

This commit is contained in:
2025-11-05 18:14:49 +00:00
parent 2f6192635e
commit 9ad3378d8c

View File

@@ -1,44 +1,52 @@
// Adventskalender 2025 Türlogik (inkl. Popup) // shared/js/door-open.js
/**
* Bratonien Adventskalender Türöffnung (2025)
* ---------------------------------------------
* Öffnet normale Türen (.door) und Doppelflügeltüren (.fluegel)
* und triggert das Event für save-progress.js
*/
document.querySelectorAll(".door, .fluegel, .openfield").forEach(elem => { document.querySelectorAll(".door, .fluegel, .openfield").forEach(elem => {
elem.addEventListener("click", () => { elem.addEventListener("click", () => {
const day = elem.dataset.day; const day = elem.dataset.day;
if (!day) return;
const openfield = document.querySelector(`.openfield[data-day="${day}"]`); const openfield = document.querySelector(`.openfield[data-day="${day}"]`);
const doors = document.querySelectorAll(`.door[data-day="${day}"]`); const door = document.querySelector(`.door[data-day="${day}"]`);
const fluegelLeft = document.querySelector(`.fluegel.left[data-day="${day}"]`); const left = document.querySelector(`.fluegel.left[data-day="${day}"]`);
const fluegelRight = document.querySelector(`.fluegel.right[data-day="${day}"]`); const right = document.querySelector(`.fluegel.right[data-day="${day}"]`);
// === EINZELTÜR-LOGIK === // === EINZELTÜR-LOGIK ===
if (elem.classList.contains("door") || (openfield && doors.length)) { if (elem.classList.contains("door") || (openfield && door && elem === openfield)) {
const door = doors[0]; if (door.classList.contains("open")) {
if (!door.classList.contains("open")) {
door.classList.add("open");
if (openfield) openfield.classList.add("open");
console.log(`Tür ${day} geöffnet`);
} else {
console.log(`Tür ${day} erneut geöffnet`); console.log(`Tür ${day} erneut geöffnet`);
document.dispatchEvent(new CustomEvent("doorOpened", { detail: { day } }));
return;
} }
if (typeof openPopup === "function") openPopup(day); door.classList.add("open");
if (openfield) openfield.classList.add("open");
document.dispatchEvent(new CustomEvent("doorOpened", { detail: { day } }));
return; return;
} }
// === FLÜGEL-TÜR-LOGIK === // === DOPPELFLÜGEL-LOGIK ===
if (elem.classList.contains("fluegel") || (openfield && fluegelLeft && fluegelRight)) { if (elem.classList.contains("fluegel") || (openfield && left && right && elem === openfield)) {
const left = fluegelLeft; const bothOpen =
const right = fluegelRight; left?.classList.contains("rota") && right?.classList.contains("rota");
if (!left.classList.contains("rota") || !right.classList.contains("rota")) { if (bothOpen) {
if (left) left.classList.add("rota");
if (right) right.classList.add("rota");
if (openfield) openfield.classList.add("open");
console.log(`Flügeltür ${day} geöffnet`);
} else {
console.log(`Flügeltür ${day} erneut geöffnet`); console.log(`Flügeltür ${day} erneut geöffnet`);
document.dispatchEvent(new CustomEvent("doorOpened", { detail: { day } }));
return;
} }
if (typeof openPopup === "function") openPopup(day); if (left) left.classList.add("rota");
return; if (right) right.classList.add("rota");
if (openfield) openfield.classList.add("open");
document.dispatchEvent(new CustomEvent("doorOpened", { detail: { day } }));
} }
}); });
}); });