Files
wordpress-theme-aksrt/assets/js/core/dropdown.js
T
kate522 259dbdbe04 feat(nav): rewrite top header to zibll 1:1 DOM/CSS/JS contract
Replace hybrid site-nav/drawer shell with zibll navbar-top layouts 1/2/3,
body.mobile-navbar-show drawer, wired NavWalker + aksrt_menu_options meta,
nav_folding/chevron, VIP switches, and SPA/PHP schema parity. No dual-class
compat paths.
2026-07-22 11:18:34 +08:00

58 lines
2.1 KiB
JavaScript

/**
* AKSRT Dropdown Menus — post-meta only.
* Header user box uses CSS hover (.navbar-top .sub-menu) per zibll contract.
*/
(function () {
"use strict";
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 t = other.querySelector('.post-drop-meta__toggle');
var m = other.querySelector('.post-drop-meta__menu');
if (t) t.setAttribute('aria-expanded', 'false');
if (m) m.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('keydown', function (e) {
if (e.key === 'Escape') close();
});
});
}
if (window.AksrtFrontend && typeof window.AksrtFrontend.register === 'function') {
window.AksrtFrontend.register('aksrt-post-drop-meta', function () {
initPostDropMeta();
});
} else if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initPostDropMeta);
} else {
initPostDropMeta();
}
})();