1document.addEventListener('DOMContentLoaded', () => { 2 const burger = document.querySelector('.burger-menu'); 3 const mobileMenu = document.getElementById('mobileMenu'); 4 const header = document.querySelector('.header.header-redesign'); 5 const body = document.body; 6 const dropdownItems = document.querySelectorAll('.mobile-nav__item[data-dropdown]'); 7 8 if (!burger || !mobileMenu) return; 9 10 const closeMenu = () => { 11 burger.classList.remove('is-active'); 12 burger.setAttribute('aria-expanded', 'false'); 13 mobileMenu.classList.remove('mobile-menu--open'); 14 body.classList.remove('no-scroll'); 15 if (header) { 16 header.classList.remove('menu-open'); 17 } 18 }; 19 20 const openMenu = () => { 21 burger.classList.add('is-active'); 22 burger.setAttribute('aria-expanded', 'true'); 23 mobileMenu.classList.add('mobile-menu--open'); 24 body.classList.add('no-scroll'); 25 if (header) { 26 header.classList.add('menu-open'); 27 } 28 }; 29 30 burger.addEventListener('click', () => { 31 if (mobileMenu.classList.contains('mobile-menu--open')) { 32 closeMenu(); 33 } else { 34 openMenu(); 35 } 36 }); 37 38 document.querySelectorAll('.mobile-nav__link:not(.has-dropdown), .mobile-dropdown__link:not(.has-dropdown)').forEach(link => { 39 link.addEventListener('click', () => { 40 closeMenu(); 41 }); 42 }); 43 44 mobileMenu.addEventListener('click', (e) => { 45 46 // <li class="mobile-nav__item is-open" 47 // <li class="mobile-dropdown__item mobile-nav__item is-open" 48 const link = e.target.closest('.has-dropdown'); 49 50 if (!link) return; 51 52 const item = link.closest('[data-dropdown]'); 53 54 if (!item) return; 55 56 const isOpen = item.classList.contains('is-open'); 57 58 if (!isOpen) { 59 e.preventDefault(); 60 item.classList.add('is-open'); 61 } else { 62 e.preventDefault(); 63 item.classList.remove('is-open'); 64 } 65 }); 66 67 mobileMenu.addEventListener('click', (e) => { 68 if (e.target === mobileMenu) { 69 closeMenu(); 70 } 71 }); 72 73 document.addEventListener('keydown', (e) => { 74 if (e.key === 'Escape' && mobileMenu.classList.contains('mobile-menu--open')) { 75 closeMenu(); 76 } 77 }); 78 79 window.addEventListener('resize', () => { 80 if (window.innerWidth > 1024) { 81 closeMenu(); 82 dropdownItems.forEach(item => item.classList.remove('is-open')); 83 } 84 }); 85});
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.