From 9ad3378d8c55044b5cff10c22fb444a15a4c1c9d Mon Sep 17 00:00:00 2001 From: Thomas Dannenberg Date: Wed, 5 Nov 2025 18:14:49 +0000 Subject: [PATCH] adventskalender/shared/js/door-open.js aktualisiert --- adventskalender/shared/js/door-open.js | 56 +++++++++++++++----------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/adventskalender/shared/js/door-open.js b/adventskalender/shared/js/door-open.js index 3162f63..6de1864 100644 --- a/adventskalender/shared/js/door-open.js +++ b/adventskalender/shared/js/door-open.js @@ -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 => { elem.addEventListener("click", () => { const day = elem.dataset.day; + if (!day) return; + const openfield = document.querySelector(`.openfield[data-day="${day}"]`); - const doors = document.querySelectorAll(`.door[data-day="${day}"]`); - const fluegelLeft = document.querySelector(`.fluegel.left[data-day="${day}"]`); - const fluegelRight = document.querySelector(`.fluegel.right[data-day="${day}"]`); + const door = document.querySelector(`.door[data-day="${day}"]`); + const left = document.querySelector(`.fluegel.left[data-day="${day}"]`); + const right = document.querySelector(`.fluegel.right[data-day="${day}"]`); // === EINZELTÜR-LOGIK === - if (elem.classList.contains("door") || (openfield && doors.length)) { - const door = doors[0]; - if (!door.classList.contains("open")) { - door.classList.add("open"); - if (openfield) openfield.classList.add("open"); - console.log(`Tür ${day} geöffnet`); - } else { + if (elem.classList.contains("door") || (openfield && door && elem === openfield)) { + if (door.classList.contains("open")) { 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; } - // === FLÜGEL-TÜR-LOGIK === - if (elem.classList.contains("fluegel") || (openfield && fluegelLeft && fluegelRight)) { - const left = fluegelLeft; - const right = fluegelRight; + // === DOPPELFLÜGEL-LOGIK === + if (elem.classList.contains("fluegel") || (openfield && left && right && elem === openfield)) { + const bothOpen = + left?.classList.contains("rota") && right?.classList.contains("rota"); - if (!left.classList.contains("rota") || !right.classList.contains("rota")) { - 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 { + if (bothOpen) { console.log(`Flügeltür ${day} erneut geöffnet`); + document.dispatchEvent(new CustomEvent("doorOpened", { detail: { day } })); + return; } - if (typeof openPopup === "function") openPopup(day); - return; + if (left) left.classList.add("rota"); + if (right) right.classList.add("rota"); + if (openfield) openfield.classList.add("open"); + + document.dispatchEvent(new CustomEvent("doorOpened", { detail: { day } })); } }); }); \ No newline at end of file