mirror of
https://github.com/smittix/intercept.git
synced 2026-04-25 07:10:00 -07:00
61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
(() => {
|
|
const dropdowns = Array.from(document.querySelectorAll('.mode-nav-dropdown'));
|
|
if (!dropdowns.length) return;
|
|
|
|
const closeAll = () => {
|
|
dropdowns.forEach((dropdown) => dropdown.classList.remove('open'));
|
|
};
|
|
|
|
const openDropdown = (dropdown) => {
|
|
if (!dropdown.classList.contains('open')) {
|
|
closeAll();
|
|
dropdown.classList.add('open');
|
|
}
|
|
};
|
|
|
|
document.addEventListener('click', (event) => {
|
|
const menuLink = event.target.closest('.mode-nav-dropdown-menu a');
|
|
if (menuLink) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
try {
|
|
const target = new URL(menuLink.href, window.location.href);
|
|
if (window.InterceptNavPerf && typeof window.InterceptNavPerf.markStart === 'function') {
|
|
window.InterceptNavPerf.markStart({
|
|
targetPath: target.pathname,
|
|
trigger: 'global-nav',
|
|
sourceMode: document.body?.getAttribute('data-mode') || null,
|
|
});
|
|
}
|
|
} catch (_) {
|
|
// Ignore malformed link targets.
|
|
}
|
|
window.location.href = menuLink.href;
|
|
return;
|
|
}
|
|
|
|
const button = event.target.closest('.mode-nav-dropdown-btn');
|
|
if (button) {
|
|
event.preventDefault();
|
|
const dropdown = button.closest('.mode-nav-dropdown');
|
|
if (!dropdown) return;
|
|
if (dropdown.classList.contains('open')) {
|
|
dropdown.classList.remove('open');
|
|
} else {
|
|
openDropdown(dropdown);
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (!event.target.closest('.mode-nav-dropdown')) {
|
|
closeAll();
|
|
}
|
|
});
|
|
|
|
document.addEventListener('keydown', (event) => {
|
|
if (event.key === 'Escape') {
|
|
closeAll();
|
|
}
|
|
});
|
|
})();
|