File: /var/www/html/wp-content/themes/thegem-elementor/js/ethnic-megamenu.js
(() => {
const desktopQuery = window.matchMedia('(min-width: 1213px)');
const requestedMega = new URLSearchParams(window.location.search).get('ethnicMega');
const initTabGroups = () => {
const groups = Array.from(document.querySelectorAll('[data-ethnic-tab-group]'));
groups.forEach((group) => {
if (group.dataset.ethnicTabsBound === 'true') {
return;
}
const tabs = Array.from(group.querySelectorAll('[data-ethnic-tab]')).filter(
(tab) => tab.closest('[data-ethnic-tab-group]') === group
);
const panes = Array.from(group.querySelectorAll('[data-ethnic-pane]')).filter(
(pane) => pane.closest('[data-ethnic-tab-group]') === group
);
group.dataset.ethnicTabsBound = 'true';
if (!tabs.length || !panes.length) {
return;
}
let lastInteractionWasPointer = false;
const activate = (slug) => {
tabs.forEach((tab) => {
const isActive = tab.dataset.ethnicTab === slug;
tab.classList.toggle('is-active', isActive);
tab.setAttribute('aria-selected', isActive ? 'true' : 'false');
});
panes.forEach((pane) => {
const isActive = pane.dataset.ethnicPane === slug;
pane.classList.toggle('is-active', isActive);
pane.setAttribute('aria-hidden', isActive ? 'false' : 'true');
});
};
group.addEventListener('pointerdown', () => {
lastInteractionWasPointer = true;
});
group.addEventListener('keydown', () => {
lastInteractionWasPointer = false;
});
tabs.forEach((tab) => {
const slug = tab.dataset.ethnicTab;
tab.addEventListener('pointerenter', () => {
activate(slug);
});
tab.addEventListener('focus', () => {
if (!lastInteractionWasPointer) {
activate(slug);
}
});
tab.addEventListener('click', (event) => {
event.preventDefault();
});
});
const defaultTab = tabs.find((tab) => tab.classList.contains('is-active')) || tabs[0];
activate(defaultTab.dataset.ethnicTab);
});
};
const bindDropdowns = () => {
const items = Array.from(document.querySelectorAll('.ethnic-mega-enhanced'));
if (!items.length) {
return;
}
const closeItem = (item) => {
item.classList.remove('is-open');
const trigger = item.querySelector(':scope > a[data-ethnic-mega-trigger]');
if (trigger) {
trigger.setAttribute('aria-expanded', 'false');
}
};
const openItem = (item) => {
if (!desktopQuery.matches) {
return;
}
items.forEach((candidate) => {
if (candidate !== item) {
closeItem(candidate);
}
});
item.classList.add('is-open');
const trigger = item.querySelector(':scope > a[data-ethnic-mega-trigger]');
if (trigger) {
trigger.setAttribute('aria-expanded', 'true');
}
};
const closeAll = () => {
items.forEach(closeItem);
};
items.forEach((item) => {
if (item.dataset.ethnicMegaBound === 'true') {
return;
}
item.dataset.ethnicMegaBound = 'true';
let lastInteractionWasPointer = false;
const trigger = item.querySelector(':scope > a[data-ethnic-mega-trigger]');
item.addEventListener('pointerdown', () => {
lastInteractionWasPointer = true;
});
item.addEventListener('keydown', () => {
lastInteractionWasPointer = false;
});
item.addEventListener('mouseenter', () => openItem(item));
item.addEventListener('mouseleave', () => closeItem(item));
item.addEventListener('focusin', () => {
if (!lastInteractionWasPointer) {
openItem(item);
}
});
item.addEventListener('focusout', () => {
window.requestAnimationFrame(() => {
if (!item.contains(document.activeElement)) {
closeItem(item);
}
});
});
item.addEventListener('keydown', (event) => {
if (event.key === 'Escape') {
closeItem(item);
item.querySelector(':scope > a[data-ethnic-mega-trigger]')?.focus();
}
});
if (trigger) {
trigger.addEventListener('click', (event) => {
event.preventDefault();
});
}
});
document.addEventListener('pointerdown', (event) => {
if (!event.target.closest('.ethnic-mega-enhanced')) {
closeAll();
}
});
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape') {
closeAll();
}
});
if (typeof desktopQuery.addEventListener === 'function') {
desktopQuery.addEventListener('change', (event) => {
if (!event.matches) {
closeAll();
}
});
}
};
const boot = () => {
initTabGroups();
bindDropdowns();
if (requestedMega && desktopQuery.matches) {
const requestedItem = document.querySelector(`.ethnic-mega--${requestedMega}`);
if (requestedItem) {
requestedItem.classList.add('is-open');
requestedItem.querySelector(':scope > a[data-ethnic-mega-trigger]')?.setAttribute('aria-expanded', 'true');
}
}
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', boot, { once: true });
} else {
boot();
}
})();