110 lines
4.0 KiB
JavaScript
110 lines
4.0 KiB
JavaScript
/**
|
|
* 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(); });
|
|
})();
|