{% extends 'vitrine/base.html.twig' %}{% import 'vitrine/macros/svg_illustration_macros.twig' as svg %}{% block title "FAQ" %}{% block description %}{% trans %}Découvrez tout l'univers du spa à la bière{% endtrans %}{% endblock %}{% block main %} <section class="max-w-none relative h-max pt-28 overflow-hidden -z-50"> <div class="w-full h-[70vh] md:top-28 top-24 inset-0 z-0"> <img src="{{asset('/vitrine/images/heros/faq.jpg')}}" class="w-full h-full object-cover"> <div class="absolute w-full h-full top-0 pt-28 left-0 flex justify-center items-end"> <div class="h-full p-4 mb-3 flex justify-center items-center flex-col gap-8"> <p class="font-semibold text-7xl text-white"> FAQ </p> </div> </div> </div> </section> <div class="w-full flexcol items-center z-10 relative "> {# Section FAQ #} <section class="w-screen overflow-visible flexcol gap-10 md:gap-20 md:mt-0 mt-8"> <div class="flexcol"> <h2> FAQ </h2> <h1 class="h-max md:text-6xl text-4xl font-thin font-openSans text-vitrineWhiteOpacity"> {% trans %}Foire aux <span class="font-bold">questions</span>{% endtrans %} </h1> </div> <div class="w-full hidden md:flex justify-end relative"> <input class="search bg-vitrineBlackOpacity border-none outline-none focus:outline-none px-4 py-4 w-[calc(50%-8px)]" type="text" placeholder="{% trans %}Écrivez votre question ici...{% endtrans %}"> <svg class="absolute right-4 top-1/2 -translate-y-1/2 w-5 h-5 text-vitrineWhiteOpacity" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-search" viewBox="0 0 16 16"> <path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0"/> </svg> </div> <div class="flex flex-col md:flex-row gap-10 md:gap-4"> <div class="flexcol md:w-1/2"> <div class="h-full relative"> <div class="sticky top-32"> <ul class="flexcol text-2xl pl-10 relative"> {% for category, items in faqData %} <li class="flex items-center gap-4 relative"> <img class="ul-bulle hidden absolute top-1/2 -translate-y-1/2 -left-10 transition duration-700" src="{{asset('vitrine/images/bulles/moyenne-bulle.svg')}}" alt="Illustration bulle" aria-hidden="true"> <a href="#" class="category-link" data-category="{{ category | lower | replace({' ': '-'}) }}"> {{ category|trans }} </a> </li> {% endfor %} </ul> <div class="h-[70dvh] md:block hidden -z-10 relative overflow-hidden"> {{ svg.illustration('faq', true) }} </div> </div> </div> </div> <div class="w-full md:hidden flex justify-end relative"> <input class="search bg-vitrineBlackOpacity border-none outline-none focus:outline-none px-4 py-4 w-full" type="text" placeholder="{% trans %}Écrivez votre question ici...{% endtrans %}"> <svg class="absolute right-4 top-1/2 -translate-y-1/2 w-5 h-5 text-vitrineWhiteOpacity" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-search" viewBox="0 0 16 16"> <path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0"/> </svg> </div> <div class="flexcol gap-8 md:w-1/2 flexcol"> {% for category, items in faqData %} <div id="{{ category | lower | replace({' ': '-'}) }}" class="faq-category flexcol"> {% for item in items %} <div class="flexcol toggle-response cursor-pointer bg-vitrineBlackOpacity p-4 pr-10 relative"> <svg class="toggle-response-svg absolute top-4 right-4 w-5 h-5 text-vitrineOrange rotate-45 z-20 transition duration-200" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg" viewBox="0 0 16 16"> <path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z"/> </svg> <h3 class="text-wrap"> {{ item.question|trans }} </h3> <p class="hidden response"> {{ item.response|trans }} </p> </div> {% endfor %} </div> {% endfor %} </div> </div> </section> {% include "vitrine/layout/footer.html.twig" %} </div> <script> document.addEventListener("DOMContentLoaded", function() { const categories = document.querySelectorAll('.faq-category'); const links = document.querySelectorAll('.category-link'); const bulleImages = document.querySelectorAll('.ul-bulle'); const searchInputs = document.querySelectorAll('.search'); // Sélectionne toutes les barres de recherche // Afficher les catégories function displayCategories(selectedCategory) { links.forEach((link, linkIndex) => { link.classList.remove('text-vitrineOrange'); link.classList.remove('font-semibold'); bulleImages[linkIndex].classList.add('hidden'); // Initialise toutes les bulles à hidden }); categories.forEach(category => category.style.display = 'none'); // Cache toutes les catégories if (selectedCategory === 'tout') { categories.forEach(category => { category.style.display = 'flex'; if (category.id === 'tout') { category.style.display = 'none'; // Cache la catégorie "tout" dans tout les cas opur éciter un décalage dans l'affichage } }); } else { document.getElementById(selectedCategory).style.display = 'flex'; // Affiche la catégorie sélectionnée } const activeLink = document.querySelector(`[data-category="${selectedCategory}"]`); // Récupère le lien actif const activeLinkIndex = Array.from(links).indexOf(activeLink); // Récupère l'index du lien actif activeLink.classList.add('text-vitrineOrange'); activeLink.classList.add('font-semibold'); bulleImages[activeLinkIndex].classList.remove('hidden'); // Affiche la bulle pour la catégorie sélectionnée } // Recherche searchInputs.forEach(input => { input.addEventListener('input', function() { const searchValue = this.value.toLowerCase(); categories.forEach(category => { const questions = category.querySelectorAll('h3'); const responses = category.querySelectorAll('.response'); let categoryHasMatch = false; // Vérifie si la catégorie a une correspondance questions.forEach((question, questionIndex) => { const questionText = question.textContent.toLowerCase(); const responseText = responses[questionIndex].textContent.toLowerCase(); if (questionText.includes(searchValue) || responseText.includes(searchValue)) { // Vérifie si la question ou la réponse contient la recherche question.parentElement.style.display = 'flex'; categoryHasMatch = true; // La catégorie a une correspondance } else { question.parentElement.style.display = 'none'; } }); if (searchValue === '') { category.style.display = 'flex'; questions.forEach(question => { question.parentElement.style.display = 'flex'; }); } else { category.style.display = categoryHasMatch ? 'flex' : 'none'; // Affiche la catégorie si elle a une correspondance } }); }); }); // Affiche la catégorie par défaut const initialCategory = 'tout'; // Categorie par default displayCategories(initialCategory); // L'événement click sur les liens links.forEach(link => { link.addEventListener('click', function(event) { event.preventDefault(); const selectedCategory = this.getAttribute('data-category'); displayCategories(selectedCategory); }); }); // Toggle response const toggleResponseContainers = document.querySelectorAll('.toggle-response'); toggleResponseContainers.forEach(responseContainer => { responseContainer.addEventListener('click', function() { const response = this.querySelector('.response'); const svg = this.querySelector('.toggle-response-svg'); response.classList.toggle('hidden'); svg.classList.toggle('rotate-0'); svg.classList.toggle('text-vitrineWhiteOpacity'); }); }); }); </script>{% endblock %}