63 lines
2.3 KiB
JavaScript
63 lines
2.3 KiB
JavaScript
/******/ (() => { // webpackBootstrap
|
|
var __webpack_exports__ = {};
|
|
// Open on click functionality.
|
|
function closeSubmenus(element) {
|
|
element.querySelectorAll('[aria-expanded="true"]').forEach(function (toggle) {
|
|
toggle.setAttribute('aria-expanded', 'false');
|
|
});
|
|
}
|
|
|
|
function toggleSubmenuOnClick(event) {
|
|
const buttonToggle = event.target.closest('[aria-expanded]');
|
|
const isSubmenuOpen = buttonToggle.getAttribute('aria-expanded');
|
|
|
|
if (isSubmenuOpen === 'true') {
|
|
closeSubmenus(buttonToggle.closest('.wp-block-navigation-item'));
|
|
} else {
|
|
// Close all sibling submenus.
|
|
const parentElement = buttonToggle.closest('.wp-block-navigation-item');
|
|
const navigationParent = buttonToggle.closest('.wp-block-navigation__submenu-container, .wp-block-navigation__container, .wp-block-page-list');
|
|
navigationParent.querySelectorAll('.wp-block-navigation-item').forEach(function (child) {
|
|
if (child !== parentElement) {
|
|
closeSubmenus(child);
|
|
}
|
|
}); // Open submenu.
|
|
|
|
buttonToggle.setAttribute('aria-expanded', 'true');
|
|
}
|
|
} // Necessary for some themes such as TT1 Blocks, where
|
|
// scripts could be loaded before the body.
|
|
|
|
|
|
window.addEventListener('load', () => {
|
|
const submenuButtons = document.querySelectorAll('.wp-block-navigation-submenu__toggle');
|
|
submenuButtons.forEach(function (button) {
|
|
button.addEventListener('click', toggleSubmenuOnClick);
|
|
}); // Close on click outside.
|
|
|
|
document.addEventListener('click', function (event) {
|
|
const navigationBlocks = document.querySelectorAll('.wp-block-navigation');
|
|
navigationBlocks.forEach(function (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-item.has-child');
|
|
submenuBlocks.forEach(function (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?.focus();
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
/******/ })()
|
|
; |