1(function () { 2 'use strict'; 3 4 const toggle = document.getElementById('menu-toggle'); 5 const menu = document.getElementById('site-menu'); 6 7 if (!toggle || !menu) { 8 return; 9 } 10 11 const setOpen = (open) => { 12 toggle.setAttribute('aria-expanded', String(open)); 13 toggle.setAttribute('aria-label', open ? 'ã¡ãã¥ã¼ãéãã' : 'ã¡ãã¥ã¼ãéã'); 14 menu.setAttribute('aria-hidden', String(!open)); 15 document.body.style.overflow = open ? 'hidden' : ''; 16 }; 17 18 const isOpen = () => toggle.getAttribute('aria-expanded') === 'true'; 19 20 toggle.addEventListener('click', () => { 21 setOpen(!isOpen()); 22 }); 23 24 // Close on outside click 25 document.addEventListener('click', (event) => { 26 if (!isOpen()) return; 27 const target = event.target; 28 if (target instanceof Node && !menu.contains(target) && !toggle.contains(target)) { 29 setOpen(false); 30 } 31 }); 32 33 // Close on Escape 34 document.addEventListener('keydown', (event) => { 35 if (event.key === 'Escape' && isOpen()) { 36 setOpen(false); 37 } 38 }); 39 40 // Close when a menu link is clicked (navigation) 41 menu.addEventListener('click', (event) => { 42 const target = event.target; 43 if (target instanceof Element && target.closest('a')) { 44 setOpen(false); 45 } 46 }); 47})();
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.