HEX
Server: Apache
System: Linux webm013.cluster123.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: lesanew (165608)
PHP: 8.3.31
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/lesanew/anestetues2/web/app/themes/anes-tetues/resources/js/pages/faq.ts
// Page: FAQ — accordéon (un seul item ouvert à la fois)
const SELECTOR_ITEM = '[data-faq-item]';
const SELECTOR_TRIGGER = '[data-faq-trigger]';
const CLASS_OPEN = 'is-open';

const initFaqPage = () => {
  const container = document.querySelector('.faq-container');
  if (!container) return;

  const items = container.querySelectorAll<HTMLElement>(SELECTOR_ITEM);
  const triggers = container.querySelectorAll<HTMLButtonElement>(SELECTOR_TRIGGER);

  const updateIcons = () => {
    container.querySelectorAll('[data-faq-icon]').forEach((icon) => {
      const item = icon.closest<HTMLElement>(SELECTOR_ITEM);
      icon.textContent = item?.classList.contains(CLASS_OPEN) ? '×' : '+';
    });
  };

  const openItem = (item: HTMLElement) => {
    items.forEach((el) => el.classList.remove(CLASS_OPEN));
    item.classList.add(CLASS_OPEN);
    const trigger = item.querySelector<HTMLButtonElement>(SELECTOR_TRIGGER);
    const answerId = trigger?.getAttribute('aria-controls');
    const answer = answerId ? document.getElementById(answerId) : null;
    if (trigger) trigger.setAttribute('aria-expanded', 'true');
    if (answer) answer.hidden = false;
    updateIcons();
  };

  const closeItem = (item: HTMLElement) => {
    item.classList.remove(CLASS_OPEN);
    const trigger = item.querySelector<HTMLButtonElement>(SELECTOR_TRIGGER);
    const answerId = trigger?.getAttribute('aria-controls');
    const answer = answerId ? document.getElementById(answerId) : null;
    if (trigger) trigger.setAttribute('aria-expanded', 'false');
    if (answer) answer.hidden = true;
    updateIcons();
  };

  const toggleItem = (item: HTMLElement) => {
    const isOpen = item.classList.contains(CLASS_OPEN);
    if (isOpen) {
      closeItem(item);
    } else {
      openItem(item);
    }
  };

  triggers.forEach((trigger) => {
    trigger.addEventListener('click', () => {
      const item = trigger.closest<HTMLElement>(SELECTOR_ITEM);
      if (item) toggleItem(item);
    });
  });

  // État initial : fermer les réponses non ouvertes et mettre à jour les icônes
  items.forEach((item) => {
    const trigger = item.querySelector<HTMLButtonElement>(SELECTOR_TRIGGER);
    const answerId = trigger?.getAttribute('aria-controls');
    const answer = answerId ? document.getElementById(answerId) : null;
    const isOpen = item.classList.contains(CLASS_OPEN);
    if (trigger) trigger.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
    if (answer) answer.hidden = !isOpen;
  });
  updateIcons();
};

if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', () => initFaqPage());
} else {
  initFaqPage();
}

export { initFaqPage };