UNPKG

@wordpress/block-library

Version:
54 lines (47 loc) 2.03 kB
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