| New file |
| | |
| | | /** |
| | | * FAQ Block - Frontend Interactions |
| | | * Handles accordion functionality for FAQ items |
| | | */ |
| | | |
| | | document.addEventListener('DOMContentLoaded', () => { |
| | | const faqBlocks = document.querySelectorAll('.faq-block'); |
| | | |
| | | faqBlocks.forEach((block) => { |
| | | const faqItems = block.querySelectorAll('.faq-item'); |
| | | |
| | | faqItems.forEach((item) => { |
| | | const button = item.querySelector('.faq-item__question'); |
| | | const answer = item.querySelector('.faq-item__answer'); |
| | | |
| | | if (!button || !answer) return; |
| | | |
| | | button.addEventListener('click', () => { |
| | | const isExpanded = button.getAttribute('aria-expanded') === 'true'; |
| | | |
| | | // Toggle this item |
| | | button.setAttribute('aria-expanded', !isExpanded); |
| | | |
| | | if (isExpanded) { |
| | | // Collapse |
| | | answer.style.height = answer.scrollHeight + 'px'; |
| | | // Force reflow |
| | | answer.offsetHeight; |
| | | answer.style.height = '0'; |
| | | |
| | | setTimeout(() => { |
| | | answer.style.display = 'none'; |
| | | answer.style.height = ''; |
| | | }, 300); |
| | | |
| | | item.classList.remove('faq-item--expanded'); |
| | | } else { |
| | | // Expand |
| | | answer.style.display = 'block'; |
| | | answer.style.height = '0'; |
| | | // Force reflow |
| | | answer.offsetHeight; |
| | | answer.style.height = answer.scrollHeight + 'px'; |
| | | |
| | | setTimeout(() => { |
| | | answer.style.height = 'auto'; |
| | | }, 300); |
| | | |
| | | item.classList.add('faq-item--expanded'); |
| | | } |
| | | }); |
| | | |
| | | // Handle keyboard navigation |
| | | button.addEventListener('keydown', (e) => { |
| | | // Space or Enter triggers the button |
| | | if (e.key === ' ' || e.key === 'Enter') { |
| | | e.preventDefault(); |
| | | button.click(); |
| | | } |
| | | }); |
| | | }); |
| | | }); |
| | | |
| | | // Optional: Add URL hash navigation |
| | | // If URL has #faq-123, open that specific FAQ |
| | | if (window.location.hash) { |
| | | const hash = window.location.hash.substring(1); |
| | | const targetItem = document.querySelector(`[data-faq-id="${hash}"]`); |
| | | |
| | | if (targetItem) { |
| | | const button = targetItem.querySelector('.faq-item__question'); |
| | | const isExpanded = button.getAttribute('aria-expanded') === 'true'; |
| | | |
| | | if (!isExpanded) { |
| | | button.click(); |
| | | } |
| | | |
| | | // Scroll to item after a short delay |
| | | setTimeout(() => { |
| | | targetItem.scrollIntoView({ behavior: 'smooth', block: 'center' }); |
| | | }, 350); |
| | | } |
| | | } |
| | | }); |