mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-05 20:02:47 +01:00
100 lines
3.4 KiB
TypeScript
100 lines
3.4 KiB
TypeScript
document.addEventListener('DOMContentLoaded', () => {
|
|
const mobileMenuButton = document.getElementById('mobile-menu-button');
|
|
const mobileMenu = document.getElementById('mobile-menu');
|
|
const menuIcon = document.getElementById('menu-icon');
|
|
const closeIcon = document.getElementById('close-icon');
|
|
|
|
if (mobileMenuButton && mobileMenu && menuIcon && closeIcon) {
|
|
// Toggle menu on button click
|
|
mobileMenuButton.addEventListener('click', () => {
|
|
const isExpanded =
|
|
mobileMenuButton.getAttribute('aria-expanded') === 'true';
|
|
|
|
// Toggle menu visibility
|
|
mobileMenu.classList.toggle('hidden');
|
|
|
|
// Toggle icons
|
|
menuIcon.classList.toggle('hidden');
|
|
closeIcon.classList.toggle('hidden');
|
|
|
|
// Update aria-expanded for accessibility
|
|
mobileMenuButton.setAttribute('aria-expanded', (!isExpanded).toString());
|
|
});
|
|
|
|
// Close menu when clicking on a link
|
|
const mobileLinks = mobileMenu.querySelectorAll('a');
|
|
mobileLinks.forEach((link) => {
|
|
link.addEventListener('click', () => {
|
|
mobileMenu.classList.add('hidden');
|
|
menuIcon.classList.remove('hidden');
|
|
closeIcon.classList.add('hidden');
|
|
mobileMenuButton.setAttribute('aria-expanded', 'false');
|
|
});
|
|
});
|
|
|
|
// Close menu when clicking outside
|
|
document.addEventListener('click', (event) => {
|
|
const target = event.target as Node;
|
|
const isClickInsideMenu = mobileMenu.contains(target);
|
|
const isClickOnButton = mobileMenuButton.contains(target);
|
|
|
|
if (
|
|
!isClickInsideMenu &&
|
|
!isClickOnButton &&
|
|
!mobileMenu.classList.contains('hidden')
|
|
) {
|
|
mobileMenu.classList.add('hidden');
|
|
menuIcon.classList.remove('hidden');
|
|
closeIcon.classList.add('hidden');
|
|
mobileMenuButton.setAttribute('aria-expanded', 'false');
|
|
}
|
|
});
|
|
}
|
|
|
|
const mobileProductsButton = document.getElementById(
|
|
'mobile-products-button'
|
|
);
|
|
const mobileProductsMenu = document.getElementById('mobile-products-menu');
|
|
|
|
if (mobileProductsButton && mobileProductsMenu) {
|
|
mobileProductsButton.addEventListener('click', (event) => {
|
|
event.stopPropagation();
|
|
const isOpen =
|
|
mobileProductsButton.getAttribute('aria-expanded') === 'true';
|
|
mobileProductsMenu.hidden = isOpen;
|
|
mobileProductsButton.setAttribute('aria-expanded', (!isOpen).toString());
|
|
});
|
|
}
|
|
|
|
const productsButton = document.getElementById('products-menu-button');
|
|
const productsMenu = document.getElementById('products-menu');
|
|
|
|
if (productsButton && productsMenu) {
|
|
const closeProducts = () => {
|
|
productsMenu.hidden = true;
|
|
productsButton.setAttribute('aria-expanded', 'false');
|
|
};
|
|
|
|
productsButton.addEventListener('click', (event) => {
|
|
event.stopPropagation();
|
|
const isOpen = productsButton.getAttribute('aria-expanded') === 'true';
|
|
productsMenu.hidden = isOpen;
|
|
productsButton.setAttribute('aria-expanded', (!isOpen).toString());
|
|
});
|
|
|
|
document.addEventListener('click', (event) => {
|
|
const target = event.target as Node;
|
|
if (!productsMenu.contains(target) && !productsButton.contains(target)) {
|
|
closeProducts();
|
|
}
|
|
});
|
|
|
|
document.addEventListener('keydown', (event) => {
|
|
if (event.key === 'Escape' && !productsMenu.hidden) {
|
|
closeProducts();
|
|
productsButton.focus();
|
|
}
|
|
});
|
|
}
|
|
});
|