1document.addEventListener('DOMContentLoaded', () => { 2 // Mobile Burger Menu Toggle 3 const burgerBtn = document.getElementById('burgerBtn'); 4 const primaryNav = document.getElementById('primaryNav'); 5 6 if (burgerBtn && primaryNav) { 7 const toggleMenu = (open) => { 8 const isExpanded = open !== undefined ? open : burgerBtn.getAttribute('aria-expanded') === 'false'; 9 burgerBtn.setAttribute('aria-expanded', isExpanded); 10 burgerBtn.classList.toggle('is-active', isExpanded); 11 primaryNav.classList.toggle('is-active', isExpanded); 12 document.body.style.overflow = isExpanded ? 'hidden' : ''; 13 }; 14 15 burgerBtn.addEventListener('click', () => toggleMenu()); 16 17 primaryNav.querySelectorAll('.nav-link').forEach(link => { 18 link.addEventListener('click', () => toggleMenu(false)); 19 }); 20 21 document.addEventListener('click', (event) => { 22 if (!primaryNav.contains(event.target) && !burgerBtn.contains(event.target) && primaryNav.classList.contains('is-active')) { 23 toggleMenu(false); 24 } 25 }); 26 27 document.addEventListener('keydown', (event) => { 28 if (event.key === 'Escape' && primaryNav.classList.contains('is-active')) { 29 toggleMenu(false); 30 } 31 }); 32 } 33 34 // Back to Top Button 35 const backToTopBtn = document.getElementById('backToTop'); 36 37 if (backToTopBtn) { 38 const handleScroll = () => { 39 if (window.scrollY > 300) { 40 backToTopBtn.classList.add('is-visible'); 41 } else { 42 backToTopBtn.classList.remove('is-visible'); 43 } 44 }; 45 46 window.addEventListener('scroll', handleScroll, { passive: true }); 47 48 backToTopBtn.addEventListener('click', () => { 49 window.scrollTo({ 50 top: 0, 51 behavior: 'smooth' 52 }); 53 }); 54 } 55});
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.