@wordpress/block-library
Version:
Block library for the WordPress editor.
54 lines (47 loc) • 2.03 kB
JavaScript
const closeSubmenus = element => {
element.querySelectorAll('[aria-expanded="true"]').forEach(toggle => {
toggle.setAttribute('aria-expanded', 'false');
});
};
const toggleSubmenuOnClick = event => {
const buttonToggle = event.target.closest('[aria-expanded]');
const isSubmenuOpen = buttonToggle.getAttribute('aria-expanded');
if (isSubmenuOpen === 'true') {
closeSubmenus(buttonToggle.closest('.wp-block-navigation-submenu'));
} else {
// Close all sibling submenus.
const parentElement = buttonToggle.closest('.wp-block-navigation-submenu');
const parentList = buttonToggle.closest('.wp-block-navigation__submenu-container') || buttonToggle.closest('.wp-block-navigation__container');
Array.from(parentList.children).forEach(child => {
if (child !== parentElement) {
closeSubmenus(child);
}
}); // Open submenu.
buttonToggle.setAttribute('aria-expanded', 'true');
}
};
const submenuButtons = document.querySelectorAll('.wp-block-navigation-submenu__toggle');
submenuButtons.forEach(button => {
button.addEventListener('click', toggleSubmenuOnClick);
}); // Close on click outside.
document.addEventListener('click', function (event) {
const navigationBlocks = document.querySelectorAll('.wp-block-navigation');
navigationBlocks.forEach(block => {
if (!block.contains(event.target)) {
closeSubmenus(block);
}
});
}); // Close on focus outside or escape key.
document.addEventListener('keyup', function (event) {
const submenuBlocks = document.querySelectorAll('.wp-block-navigation-submenu');
submenuBlocks.forEach(block => {
if (!block.contains(event.target)) {
closeSubmenus(block);
} else if (event.key === 'Escape') {
const toggle = block.querySelector('[aria-expanded="true"]');
closeSubmenus(block); // Focus the submenu trigger so focus does not get trapped in the closed submenu.
toggle === null || toggle === void 0 ? void 0 : toggle.focus();
}
});
});
//# sourceMappingURL=view.js.map