1/** 2 * Mobile Menu Block Frontend Script 3 * Handles menu toggle functionality with slide-in animation 4 */ 5(function() { 6 'use strict'; 7 8 // Handle all mobile menu instances on the page 9 document.addEventListener('DOMContentLoaded', function() { 10 const menuBlocks = document.querySelectorAll('.mobile-menu-block[data-menu], .wp-block-theme-mobile-menu[data-menu]'); 11 12 menuBlocks.forEach(function(menuBlock) { 13 const toggle = menuBlock.querySelector('.menu-toggle'); 14 const menuPanel = menuBlock.querySelector('.menu-panel'); 15 16 if (!toggle || !menuPanel) { 17 return; 18 } 19 20 // Create overlay element if it doesn't exist 21 let overlay = menuBlock.querySelector('.menu-overlay'); 22 if (!overlay) { 23 overlay = document.createElement('div'); 24 overlay.className = 'menu-overlay'; 25 menuBlock.appendChild(overlay); 26 } 27 28 // Toggle menu function 29 function toggleMenu() { 30 const isOpen = toggle.getAttribute('aria-expanded') === 'true'; 31 const newState = !isOpen; 32 33 toggle.setAttribute('aria-expanded', newState); 34 35 if (newState) { 36 // Open menu 37 menuPanel.classList.add('is-open'); 38 overlay.classList.add('is-visible'); 39 document.body.style.overflow = 'hidden'; // Prevent background scrolling 40 } else { 41 // Close menu 42 menuPanel.classList.remove('is-open'); 43 overlay.classList.remove('is-visible'); 44 document.body.style.overflow = ''; // Restore scrolling 45 } 46 } 47 48 // Toggle button click 49 toggle.addEventListener('click', function(e) { 50 e.stopPropagation(); 51 toggleMenu(); 52 }); 53 54 // Close menu when clicking overlay 55 overlay.addEventListener('click', function() { 56 if (menuPanel.classList.contains('is-open')) { 57 toggleMenu(); 58 } 59 }); 60 61 // Close menu when pressing Escape key 62 document.addEventListener('keydown', function(e) { 63 if (e.key === 'Escape' && menuPanel.classList.contains('is-open')) { 64 toggleMenu(); 65 } 66 }); 67 }); 68 }); 69})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.