Afficher la table des matières Masquer la table des matières
- La recette libanaise authentique : l’essentiel à retenir
- Pourquoi le persil est le cœur du taboulé (et comment le hacher correctement)
- Le rôle du boulgour (ou blé concassé) et son hydratation maîtrisée
- Étapes précises pour un taboulé que vos grand-mères auraient approuvé
- Quizz : Taboulé — Recette libanaise authentique
- ${qObj.q}`; questionArea.appendChild(qHeader); // Options list (radiogroup) const list = document.createElement('div'); list.setAttribute('role', 'radiogroup'); list.setAttribute('aria-labelledby', 'q-title'); list.className = 'mt-2 grid gap-2'; qObj.choices.forEach(choice => { const id = `q${qObj.id}-choice-${choice.id}`; const option = document.createElement('button'); option.className = 'text-left p-3 border rounded-md hover:shadow-sm focus:outline-none focus:ring-2 focus:ring-emerald-300 bg-white'; option.setAttribute('role', 'radio'); option.setAttribute('aria-checked', 'false'); option.id = id; option.dataset.choiceId = choice.id; option.dataset.qId = qObj.id; option.tabIndex = 0; option.innerHTML = ` ${choice.text} Choisir `; // Si déjà sélectionné, marquer visuellement const selected = state.selections[qObj.id]; if (selected === choice.id) { option.classList.add('bg-emerald-50', 'border-emerald-300'); option.setAttribute('aria-checked', 'true'); } // Click handler option.addEventListener('click', () => { handleSelection(qObj.id, choice.id); }); // Keyboard: Entrée ou Espace pour sélectionner option.addEventListener('keydown', (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); handleSelection(qObj.id, choice.id); } }); list.appendChild(option); }); questionArea.appendChild(list); // Si déjà répondu (quiz terminé pour cette question), afficher explication if (state.finished && state.selections[qObj.id]) { const chosen = state.selections[qObj.id]; showExplanationInline(qObj, chosen); } else { // Placeholder pour explication dynamique const expl = document.createElement('div'); expl.id = 'explanation-placeholder'; questionArea.appendChild(expl); } // Mise à jour des boutons prevBtn.disabled = state.currentIndex === 0; prevBtn.setAttribute('aria-disabled', prevBtn.disabled ? 'true' : 'false'); // Si dernière question, montrer le bouton "Soumettre" if (state.currentIndex === QUESTIONS.length - 1) { nextBtn.classList.add('hidden'); submitBtn.classList.remove('hidden'); } else { nextBtn.classList.remove('hidden'); submitBtn.classList.add('hidden'); } updateProgress(); updateMiniScore(); // Donner le focus sur la première option pour accessibilité const firstOption = questionArea.querySelector('[role="radio"]'); if (firstOption) firstOption.focus(); } /* Gérer la sélection d'une option */ function handleSelection(qId, choiceId) { // Enregistrer la sélection state.selections[qId] = choiceId; // Si le quiz est déjà terminé, ne pas recalculer le score global ici, // mais afficher la bonne/mauvaise réponse et l'explication. if (state.finished) { const qObj = QUESTIONS.find(q => q.id === qId); showExplanationInline(qObj, choiceId); renderQuestion(); // rafraîchir pour marquer visuellement return; } // Sinon, just mark visually in the UI // Démarquer toutes les options de cette question const buttons = questionArea.querySelectorAll(`[data-q-id="${qId}"]`); buttons.forEach(btn => { btn.classList.remove('bg-emerald-50', 'border-emerald-300'); btn.setAttribute('aria-checked', 'false'); }); // Marquer la sélection const selectedBtn = questionArea.querySelector(`[data-q-id="${qId}"][data-choice-id="${choiceId}"]`); if (selectedBtn) { selectedBtn.classList.add('bg-emerald-50', 'border-emerald-300'); selectedBtn.setAttribute('aria-checked', 'true'); } } /* Affiche l'explication sous forme inline (après réponse) */ function showExplanationInline(qObj, chosenId) { const placeholder = document.getElementById('explanation-placeholder'); if (!placeholder) return; const correct = qObj.answerId === chosenId; placeholder.innerHTML = ` ${correct ? 'Bonne réponse' : 'Mauvaise réponse'} ${qObj.explanation} `; } /* Soumettre le quiz et calculer le score */ function submitQuiz() { // Calculer le score let score = 0; QUESTIONS.forEach(q => { if (state.selections[q.id] && state.selections[q.id] === q.answerId) score++; }); state.score = score; state.finished = true; // Afficher rétroaction/question par question renderQuestion(); // mettra à jour la question courante avec explication // Afficher résultats globaux showResults(); } /* Affiche les résultats finaux */ function showResults() { resultArea.classList.remove('hidden'); resultArea.innerHTML = ''; const header = document.createElement('div'); header.className = 'flex items-start justify-between'; header.innerHTML = ` ${FR_STRINGS.finalMessage(state.score, QUESTIONS.length)} ${state.score === QUESTIONS.length ? FR_STRINGS.perfect : state.score >= Math.ceil(QUESTIONS.length*0.6) ? FR_STRINGS.good : FR_STRINGS.tryAgain} `; // Détails : liste des questions et si correct const details = document.createElement('div'); details.className = 'mt-3 space-y-2 text-sm'; QUESTIONS.forEach(q => { const chosen = state.selections[q.id]; const correct = chosen === q.answerId; const item = document.createElement('div'); item.className = 'p-2 rounded border ' + (correct ? 'border-green-100 bg-green-50' : 'border-red-100 bg-red-50'); item.innerHTML = `${q.q} Votre réponse : ${chosen ? q.choices.find(c=>c.id===chosen).text : '—'} Explication : ${q.explanation}`; details.appendChild(item); }); // Bouton pour copier le résultat sommaire const copyBtn = document.createElement('button'); copyBtn.className = 'mt-3 px-3 py-2 rounded bg-emerald-600 text-white hover:bg-emerald-700'; copyBtn.textContent = FR_STRINGS.copyResult; copyBtn.addEventListener('click', async () => { const summary = `${FR_STRINGS.finalMessage(state.score, QUESTIONS.length)}n${QUESTIONS.map((q,i)=>`${i+1}. ${q.q} — Votre réponse: ${state.selections[q.id]||'—'}`).join('n')}`; try { await navigator.clipboard.writeText(summary); copyBtn.textContent = FR_STRINGS.copied; setTimeout(()=> copyBtn.textContent = FR_STRINGS.copyResult, 2000); } catch (e) { alert('Impossible de copier : ' + e.message); } }); // Bouton recommencer restartBtn.classList.remove('hidden'); resultArea.appendChild(header); resultArea.appendChild(details); resultArea.appendChild(copyBtn); // Masquer les boutons de navigation pour éviter modifications prevBtn.disabled = true; nextBtn.disabled = true; submitBtn.disabled = true; } /* Redémarrer le quiz */ function restartQuiz() { state = { currentIndex: 0, selections: {}, score: 0, finished: false }; resultArea.classList.add('hidden'); restartBtn.classList.add('hidden'); prevBtn.disabled = false; nextBtn.disabled = false; submitBtn.disabled = false; updateProgress(); renderQuestion(); } /* ---------- Navigation ---------- */ prevBtn.addEventListener('click', () => { if (state.currentIndex === 0) return; state.currentIndex--; renderQuestion(); }); nextBtn.addEventListener('click', () => { if (state.currentIndex < QUESTIONS.length - 1) { state.currentIndex++; renderQuestion(); } }); submitBtn.addEventListener('click', () => { // Vérifier si toutes les questions ont une réponse const answered = Object.keys(state.selections).length; if (answered < QUESTIONS.length) { if (!confirm(`Vous n'avez répondu qu'à ${answered} / ${QUESTIONS.length}. Souhaitez-vous tout de même soumettre ?`)) { return; } } submitQuiz(); }); restartBtn.addEventListener('click', () => { restartQuiz(); }); /* Support clavier global : flèches et entrée */ document.addEventListener('keydown', (e) => { // Ignorer si focus dans un champ de texte (pas présent ici, mais pour sécurité) const active = document.activeElement; if (active && (active.tagName === 'INPUT' || active.tagName === 'TEXTAREA')) return; if (e.key === 'ArrowLeft') { prevBtn.click(); } else if (e.key === 'ArrowRight') { nextBtn.click(); } else if (e.key === 'Enter') { // Si focus dans une option, activer son click if (active && active.getAttribute && active.getAttribute('role') === 'radio') { active.click(); } else { // Sinon, si sur le dernier écran et submit visible, déclencher submission if (!submitBtn.classList.contains('hidden')) submitBtn.click(); } } }); /* ---------- Initial Render ---------- */ updateProgress(); renderQuestion(); updateMiniScore(); /* ---------- Notes et suggestions d'extension ---------- - Vous pouvez charger dynamiquement des explications ou recettes via une API publique (ex: TheMealDB) si vous voulez enrichir chaque question. L'API utilisée doit être gratuite. - Toutes les chaînes se trouvent dans FR_STRINGS pour faciliter la traduction. - Le quiz n'utilise pas de stockage externe par défaut ; on peut ajouter localStorage si souhaité. ------------------------------------------------------------------ */ Pièges courants à éviter pour un résultat authentique 🎯
- Présentation et accords : servir le taboulé dans un vrai mezzé
Maîtrisez la vraie recette du taboulé libanais : une salade à 90% de persil, quelques grains de blé concassé et beaucoup de citron pour une fraîcheur incomparable — voici comment reproduire chez soi la recette libanaise authentique que vos grand-mères gardaient précieusement. 🍋🌿
La recette libanaise authentique : l’essentiel à retenir
Point principal : le taboulé est avant tout une salade d’herbes, pas de céréales — le boulgour (ou blé concassé) est un condiment, pas la vedette. Expliquer pourquoi : dans la cuisine traditionnelle du Liban, on utilise beaucoup de persil et de menthe, coupés main, pour obtenir une texture croquante et parfumée.
Détails pratiques : pour une version testée et précise, se référer à une vraie recette du taboulé libanais qui insiste sur les proportions d’herbes et la réhydratation du boulgour. Insight final : respecter l’équilibre herbes/boulgour transforme une salade quelconque en un taboulé authentique.
Pourquoi le persil est le cœur du taboulé (et comment le hacher correctement)
Point principal : la quantité et la coupe du persil définissent l’âme du plat — utilisez trois à quatre grosses bottes pour une recette familiale. 🌿
Pourquoi : le persil plat est plus aromatique que le frisé, et le hachage au couteau préserve son jus et sa mâche; évitez le robot qui broie et rend amer. Méthode : laver, sécher, retirer les grosses tiges, regrouper les feuilles et ciseler avec un couteau bien affûté en mouvements de balancier. Insight : une coupe nette garantit une explosion de fraîcheur en bouche.
Le rôle du boulgour (ou blé concassé) et son hydratation maîtrisée
Point principal : le boulgour fin ne se cuit pas à l’eau bouillante, il s’hydrate doucement avec du jus de citron et le jus des tomates pour rester ferme et goûteux. 💧
À lire Ce Rougail Saucisse Authentique Va Vous Transporter Direct À La Réunion En Une Bouchée
Mise en pratique : rincer très rapidement le boulgour, le placer dans un saladier et l’arroser du jus de citron fraîchement pressé plus un peu du jus rendu par les tomates en dés; laisser gonfler 10–15 minutes. Pour un rappel de technique traditionnelle, consulter une version éprouvée du taboulé libanais traditionnel. Insight : moins d’eau = plus de croquant.
Ces Courgettes Farcies Fondantes Vont Devenir Votre Plat D’Été Préféré Cette Année
Ces courgettes farcies fondantes vous offrent un plat d’été à la fois simple et éblouissant : une recette facile, prête en 40 minutes, qui transforme des légumes farcis en un repas léger et réconfortant. ▶️ Suivez les étapes claires ci-dessous…
Poulet Cowboy en Une Poêle aux Saveurs Intenses du Tex-Mex
Poulet Cowboy en Une Poêle : une recette Tex-Mex à la fois rapide et spectaculaire, conçue pour délivrer des saveurs intenses en moins de 30 minutes. Suivre les étapes ci‑dessous permet d’obtenir un plat épicé, juteux et parfait pour un…
La Caviar Aubergine Recette Traditionnelle Qui Va Sublimer Tous Vos Apéros D’Été
La recette traditionnelle de caviar d’aubergine transforme instantanément un simple apéro en moment solaire et convivial : une tartinade onctueuse, parfumée et facile à préparer pour tous vos apéros d’été 🌞. Suivre cette méthode garantit une aubergine grillée fondante, un…
À lire La Pad Thai Recette Authentique Qui Va Ruiner Toutes Vos Livraisons Thaï Pour Toujours
Étapes précises pour un taboulé que vos grand-mères auraient approuvé
Point principal : suivre l’ordre des opérations garantit une texture parfaite — boulgour d’abord, hachage des herbes ensuite, puis assemblage et assaisonnement au dernier moment. ✅
Procédé clair : préparer le boulgour comme indiqué, laver et bien sécher le persil et la menthe, couper l’oignon très fin et tailler les tomates en brunoise en retirant graines et cœur pour éviter d’humidifier. Assaisonner avec une huile d’olive vierge extra et du jus de citron, saler, poivrer et mélanger juste avant de servir. Insight : préparer en maximum une heure pour garder le croquant des herbes.
Quizz : Taboulé — Recette libanaise authentique
Testez vos connaissances et découvrez des astuces de grand-mère !
Pièges courants à éviter pour un résultat authentique 🎯
Point principal : éviter l’excès d’eau, le repos prolongé et l’usage d’une semoule à la place du boulgour sont les erreurs les plus fréquentes. ⚠️
Explication : bien essorer les herbes après lavage, épépiner les tomates et ne pas cuire la semoule; une huile d’olive de qualité complète sans masquer les arômes. Pour des conseils de service estivaux et d’accompagnements, inspirer la présentation avec des idées d’accompagnement pour barbecue ou préparer le taboulé pour l’extérieur en suivant un guide pour organiser un pique-nique parfait. Insight : maîtriser ces erreurs donne un taboulé net, parfumé et léger.
7 Desserts Sans Sucre Ultra Gourmands Qui Trompent Même Les Plus Sucrés
Résumé : Des desserts sans sucre peuvent être aussi riches et séduisants que leurs équivalents sucrés — il suffit de choisir les bonnes bases (purée de fruits, dattes, compote) et d’ajuster texture et cuisson pour obtenir des pâtisseries légères et…
À lire 5 Plat Libanais Authentique À Faire À La Maison Comme Au Restaurant Beyrouthin
7 Ramen Recettes Authentiques Qui Vont Ruiner Vos Nouilles Instantanées Pour Toujours
Arrêtez les nouilles instantanées : ces 7 recettes de ramen authentiques offrent des bouillons, des garnitures et des techniques à reproduire chez soi pour des bols qui surpassent instantanément tout paquet prêt-à-l’emploi. 🍜 Suivez les étapes précises, utilisez ingrédients frais…
Ce Pesto Basilic Maison Va Ruiner Tous Vos Pestos Industriels En 5 Minutes Chrono
Ce Pesto Basilic Maison transforme des pâtes banales en explosion de saveurs fraîches en moins de 5 minutes — sans conservateurs et bien plus vivant que n’importe quel pesto industrial. 🌿 Prépare la base, suis trois gestes précis, et le…
Présentation et accords : servir le taboulé dans un vrai mezzé
Point principal : servir le taboulé en mezzé avec des feuilles de laitue pour le croquant et des classiques comme le houmous et le baba ghanouj valorise sa fraîcheur. 🥗
Comment faire : disposer le taboulé au centre d’un plateau, entouré de petites portions de purées et de brochettes grillées; il tranche merveilleusement avec des viandes fumées et des légumes rôtis. Pour des idées d’accompagnement et d’événements estivaux, consulter des inspirations de recettes estivales pour soirées sur recettes estivales et soirées. Insight : la présentation révèle l’histoire du plat et invite au partage.
Dernière impulsion : sortir le couteau, presser des citrons et oser préparer le taboulé aujourd’hui — la technique est simple, la patience pour le hachage est la clé, et la récompense est une salade fidèle à la cuisine traditionnelle que vos grand-mères auraient cachée par envie de garder le secret. 🌟
À lire La Recette Ratatouille Provençale Authentique Que Votre Grand-Mère Vous Cachait
Ces Beignets De Courgettes Ultra Croustillants Vont Ruiner Votre Régime Cet Été
Ces beignets de courgettes ultra croustillants promettent un plaisir coupable cet été : dorés, légers et prêts en quelques minutes grâce à l’Air Fryer, ils transforment le légume en véritable gourmandise. Suivre cette recette permet d’obtenir un snack estival irrésistible…
Ce Rougail Saucisse Authentique Va Vous Transporter Direct À La Réunion En Une Bouchée
Ce rougail saucisse authentique promet un voyage immédiat vers la Réunion : une bouchée suffit pour ressentir le soleil, les épices et les saveurs de la cuisine réunionnaise. Préparez-vous à suivre une recette simple et précise, avec des étapes claires,…