/** * AKSRT Dropdown Menus — user, auth, post-meta */ (function () { "use strict"; function initUserDropdown() { var toggle = document.getElementById("user-menu-toggle"); var menu = document.getElementById("user-dropdown"); if (!toggle || !menu) return; function close() { menu.classList.remove("is-open"); toggle.setAttribute("aria-expanded", "false"); } toggle.addEventListener("click", function (e) { e.stopPropagation(); var open = !menu.classList.contains("is-open"); menu.classList.toggle("is-open", open); toggle.setAttribute("aria-expanded", open ? "true" : "false"); }); document.addEventListener("click", function (e) { if (!menu.contains(e.target) && e.target !== toggle) close(); }); document.addEventListener("touchstart", function (e) { if (!menu.contains(e.target) && e.target !== toggle) close(); }, { passive: true }); document.addEventListener("keydown", function (e) { if (e.key === "Escape") close(); }); } function initAuthDropdown() { var trigger = document.getElementById("nav-auth-trigger"); var container = document.getElementById("nav-auth-dropdown"); if (!trigger || !container) return; function close() { container.classList.remove("is-open"); trigger.setAttribute("aria-expanded", "false"); } trigger.addEventListener("click", function (e) { e.stopPropagation(); var open = !container.classList.contains("is-open"); container.classList.toggle("is-open", open); trigger.setAttribute("aria-expanded", open ? "true" : "false"); }); document.addEventListener("click", function (e) { if (!container.contains(e.target) && e.target !== trigger) close(); }); document.addEventListener("touchstart", function (e) { if (!container.contains(e.target) && e.target !== trigger) close(); }, { passive: true }); document.addEventListener("keydown", function (e) { if (e.key === "Escape") close(); }); } function initPostDropMeta() { document.querySelectorAll('.post-drop-meta').forEach(function (wrap) { if (!wrap || wrap.dataset.aksrtDropMetaBound === '1') return; var trigger = wrap.querySelector('.post-drop-meta__toggle'); var menu = wrap.querySelector('.post-drop-meta__menu'); if (!trigger || !menu) return; wrap.dataset.aksrtDropMetaBound = '1'; function close() { wrap.classList.remove('is-open'); trigger.setAttribute('aria-expanded', 'false'); menu.setAttribute('aria-hidden', 'true'); } trigger.addEventListener('click', function (e) { e.stopPropagation(); var open = !wrap.classList.contains('is-open'); document.querySelectorAll('.post-drop-meta.is-open').forEach(function (other) { if (other !== wrap) { other.classList.remove('is-open'); var otherTrigger = other.querySelector('.post-drop-meta__toggle'); var otherMenu = other.querySelector('.post-drop-meta__menu'); if (otherTrigger) otherTrigger.setAttribute('aria-expanded', 'false'); if (otherMenu) otherMenu.setAttribute('aria-hidden', 'true'); } }); wrap.classList.toggle('is-open', open); trigger.setAttribute('aria-expanded', open ? 'true' : 'false'); menu.setAttribute('aria-hidden', open ? 'false' : 'true'); }); document.addEventListener('click', function (e) { if (!wrap.contains(e.target)) close(); }); document.addEventListener('touchstart', function (e) { if (!wrap.contains(e.target)) close(); }, { passive: true }); document.addEventListener('keydown', function (e) { if (e.key === 'Escape') close(); }); }); } window.AksrtFrontend.register("aksrt-user-dropdown", function () { initUserDropdown(); }); window.AksrtFrontend.register("aksrt-auth-dropdown", function () { initAuthDropdown(); }); window.AksrtFrontend.register("aksrt-post-drop-meta", function () { initPostDropMeta(); }); })();