25 lines
977 B
JavaScript
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();
|
|
});
|
|
});
|
|
})();
|