Files
pingu-concerts/app/static/js/header-controls.js
T

25 lines
977 B
JavaScript

/* Native details/summary provides keyboard activation and expanded state. */
(() => {
const selector = '.language-switch, .header-controls .user-menu';
document.addEventListener('toggle', event => {
if (!event.target.matches(selector) || !event.target.open) return;
document.querySelectorAll(selector).forEach(menu => {
if (menu !== event.target) menu.open = false;
});
}, true);
document.addEventListener('click', event => {
document.querySelectorAll(selector).forEach(menu => {
if (menu.open && !menu.contains(event.target)) menu.open = false;
});
});
document.addEventListener('keydown', event => {
if (event.key !== 'Escape') return;
document.querySelectorAll(selector).forEach(menu => {
if (!menu.open) return;
menu.open = false;
menu.querySelector('summary').focus();
event.preventDefault();
});
});
})();