49 lines
1.7 KiB
JavaScript
49 lines
1.7 KiB
JavaScript
(() => {
|
|
const initialise = () => {
|
|
document.querySelectorAll('[data-saasland-header]').forEach((header) => {
|
|
const toggle = header.querySelector('[data-saasland-menu-toggle]');
|
|
const menu = document.querySelector('[data-saasland-mobile-nav]');
|
|
|
|
if (!toggle || !menu || toggle.dataset.initialised === 'true') {
|
|
return;
|
|
}
|
|
|
|
const setOpen = (open) => {
|
|
toggle.setAttribute('aria-expanded', String(open));
|
|
toggle.setAttribute('aria-label', open ? 'Close navigation' : 'Open navigation');
|
|
toggle.classList.toggle('is-open', open);
|
|
menu.hidden = !open;
|
|
menu.classList.toggle('is-open', open);
|
|
document.documentElement.classList.toggle('saasland-menu-open', open);
|
|
};
|
|
|
|
toggle.addEventListener('click', () => {
|
|
setOpen(toggle.getAttribute('aria-expanded') !== 'true');
|
|
});
|
|
|
|
menu.querySelectorAll('a').forEach((link) => {
|
|
link.addEventListener('click', () => setOpen(false));
|
|
});
|
|
|
|
document.addEventListener('keydown', (event) => {
|
|
if (event.key === 'Escape') setOpen(false);
|
|
});
|
|
|
|
window.addEventListener('resize', () => {
|
|
if (window.innerWidth > 980) setOpen(false);
|
|
});
|
|
|
|
toggle.dataset.initialised = 'true';
|
|
setOpen(false);
|
|
});
|
|
};
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', initialise);
|
|
} else {
|
|
initialise();
|
|
}
|
|
|
|
document.addEventListener('livewire:navigated', initialise);
|
|
})();
|