mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2026-07-13 18:57:39 +00:00
46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
// "More" overflow menu (the kebab button in the top menu). Toggles its sibling
|
|
// .menu-pop open/closed; closes on click-outside, Escape, or selecting an item.
|
|
(function () {
|
|
'use strict';
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
const toggles = Array.prototype.slice.call(document.querySelectorAll('.js-menu-more-toggle'));
|
|
if (!toggles.length) return;
|
|
|
|
function closeAll() {
|
|
document.querySelectorAll('.menu-pop.open').forEach(function (pop) {
|
|
pop.classList.remove('open');
|
|
});
|
|
toggles.forEach(function (t) { t.setAttribute('aria-expanded', 'false'); });
|
|
}
|
|
|
|
toggles.forEach(function (toggle) {
|
|
const pop = toggle.parentElement.querySelector('.menu-pop');
|
|
if (!pop) return;
|
|
|
|
toggle.addEventListener('click', function (e) {
|
|
e.stopPropagation();
|
|
const willOpen = !pop.classList.contains('open');
|
|
closeAll();
|
|
if (willOpen) {
|
|
pop.classList.add('open');
|
|
toggle.setAttribute('aria-expanded', 'true');
|
|
}
|
|
});
|
|
|
|
// Selecting an item dismisses the menu (the item's own action still runs).
|
|
pop.querySelectorAll('.mi').forEach(function (item) {
|
|
item.addEventListener('click', closeAll);
|
|
});
|
|
});
|
|
|
|
// Click outside / Escape closes any open popup.
|
|
document.addEventListener('click', function (e) {
|
|
if (!e.target.closest('.menu-pop-wrap')) closeAll();
|
|
});
|
|
document.addEventListener('keydown', function (e) {
|
|
if (e.key === 'Escape') closeAll();
|
|
});
|
|
});
|
|
})();
|