1document.addEventListener('DOMContentLoaded', () => { 2 const html = document.documentElement; 3 const btn = document.getElementById('mainMenuButton'); 4 const overlay = document.getElementById('sidebarMenu-overlay'); 5 const closeBtn = document.getElementById('closeMenu'); 6 if (!btn || !overlay || !closeBtn) return; 7 8 const targetSel = btn.getAttribute('data-bs-target') || btn.getAttribute('data-target'); 9 const nav = document.querySelector(targetSel); 10 if (!nav) return; 11 12 const bsCollapse = bootstrap.Collapse.getOrCreateInstance(nav, { toggle: false }); 13 14 const applyOpen = (open) => { 15 html.classList.toggle('sitebarMenue-opened', open); 16 nav.classList.toggle('activeSidebar', open); // falls dein CSS darauf hört 17 nav.classList.toggle('d-block', open); 18 nav.classList.toggle('d-none', !open); 19 }; 20 21 // Sofort beim Start der Bootstrap-Animation reagieren (fühlt sich direkt an) 22 nav.addEventListener('show.bs.collapse', () => applyOpen(true)); 23 nav.addEventListener('hide.bs.collapse', () => applyOpen(false)); 24 25 nav.addEventListener('hidden.bs.collapse', () => { 26 nav.classList.remove('collapse'); 27 }); 28 29 // Overlay / Close schlieÃt über Bootstrap (setzt aria-expanded korrekt) 30 overlay.addEventListener('click', () => bsCollapse.hide()); 31 closeBtn.addEventListener('click', () => bsCollapse.hide()); 32 33 // Initial sync (falls Serverzustand offen) 34 applyOpen(btn.getAttribute('aria-expanded') === 'true'); 35});
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.