view.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /******/ (function() { // webpackBootstrap
  2. var __webpack_exports__ = {};
  3. // Open on click functionality.
  4. function closeSubmenus(element) {
  5. element.querySelectorAll('[aria-expanded="true"]').forEach(function (toggle) {
  6. toggle.setAttribute('aria-expanded', 'false');
  7. });
  8. }
  9. function toggleSubmenuOnClick(event) {
  10. const buttonToggle = event.target.closest('[aria-expanded]');
  11. const isSubmenuOpen = buttonToggle.getAttribute('aria-expanded');
  12. if (isSubmenuOpen === 'true') {
  13. closeSubmenus(buttonToggle.closest('.wp-block-navigation-item'));
  14. } else {
  15. // Close all sibling submenus.
  16. const parentElement = buttonToggle.closest('.wp-block-navigation-item');
  17. const navigationParent = buttonToggle.closest('.wp-block-navigation__submenu-container, .wp-block-navigation__container, .wp-block-page-list');
  18. navigationParent.querySelectorAll('.wp-block-navigation-item').forEach(function (child) {
  19. if (child !== parentElement) {
  20. closeSubmenus(child);
  21. }
  22. }); // Open submenu.
  23. buttonToggle.setAttribute('aria-expanded', 'true');
  24. }
  25. } // Necessary for some themes such as TT1 Blocks, where
  26. // scripts could be loaded before the body.
  27. window.addEventListener('load', () => {
  28. const submenuButtons = document.querySelectorAll('.wp-block-navigation-submenu__toggle');
  29. submenuButtons.forEach(function (button) {
  30. button.addEventListener('click', toggleSubmenuOnClick);
  31. }); // Close on click outside.
  32. document.addEventListener('click', function (event) {
  33. const navigationBlocks = document.querySelectorAll('.wp-block-navigation');
  34. navigationBlocks.forEach(function (block) {
  35. if (!block.contains(event.target)) {
  36. closeSubmenus(block);
  37. }
  38. });
  39. }); // Close on focus outside or escape key.
  40. document.addEventListener('keyup', function (event) {
  41. const submenuBlocks = document.querySelectorAll('.wp-block-navigation-item.has-child');
  42. submenuBlocks.forEach(function (block) {
  43. if (!block.contains(event.target)) {
  44. closeSubmenus(block);
  45. } else if (event.key === 'Escape') {
  46. const toggle = block.querySelector('[aria-expanded="true"]');
  47. closeSubmenus(block); // Focus the submenu trigger so focus does not get trapped in the closed submenu.
  48. toggle === null || toggle === void 0 ? void 0 : toggle.focus();
  49. }
  50. });
  51. });
  52. });
  53. /******/ })()
  54. ;