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 La Pissaladiere Recette Niçoise Authentique Qui Va Vous Transporter Direct En Provence
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.
Plan de repas hebdomadaire pour la semaine du 3 août 2026
Plan de repas hebdomadaire prêt à suivre pour la semaine du 3 août 2026 : gagnez du temps, limitez le gaspillage et assurez un menu équilibré chaque jour grâce à une préparation repas simple et réaliste. Ce guide pratique indique…
Galettes de Thon Savoureuses et Faciles à Préparer
Recette de base : galettes de thon rapides et savoureuses pour tous les jours Point essentiel : préparer des galettes de thon parfaites commence par une recette facile et des ingrédients simples réunis proprement. La première action à mener est…
Tomates rôties au four prêtes en seulement 15 minutes
Tomates rôties au four prêtes en seulement 15 minutes : une recette rapide, saine et pleine de saveurs méditerranéennes pour transformer des tomates mûres en un plat d’accompagnement ou un apéritif en un clin d’œil. 🍅✨ Cette méthode concentre la…
À lire Ce Taboulet Libanais Authentique Va Ruiner Toutes Les Versions Industrielles 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.
Sauté de porc rapide : la recette idéale pour les soirs pressés
Sauté de porc rapide prêt en moins de 45 minutes : la solution idéale pour un soir pressé qui demande un plat facile, savoureux et fait maison. Ce guide montre exactement quoi préparer, comment cuire et comment adapter la recette…
À lire Cette Salade Grecque Feta Authentique Va Vous Transporter Direct À Santorin En Une Bouchée
Les boulettes de viande sucrées et collantes qui font l’unanimité
Ces boulettes de viande sucrées et collantes font l’unanimité : elles se préparent en moins de 33 minutes, plaisent en apéritif comme en plat, et se conservent facilement pour des restes délicieux. 🍯✨ Recette de boulettes de viande sucrées et…
Les boulettes de viande gourmandes et fondantes qui font l’unanimité
Préparez dès maintenant des boulettes de viande gourmandes et fondantes qui font l’unanimité : suivez une recette simple, testée et adaptable pour un repas convivial. Cette version privilégie la cuisine maison, des ingrédients accessibles et des gestes précis pour obtenir…
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 Ces Tomates Provencales Gratinées Vont Devenir Votre Accompagnement Préféré De L’Été
L’accompagnement aux champignons express en 20 minutes, parfait avec tous vos plats
Préparez un accompagnement aux champignons express en 20 minutes qui rehausse instantanément n’importe quel plat. Ce garniture facile transforme une viande, des pâtes ou un riz en recette de restaurant sans effort, avec une saveur riche et une texture caramélisée.…
Dîner en Cocotte Mijoteuse : 5 Ingrédients et Presque Pas de Préparation
Dîner en Cocotte Mijoteuse : 5 ingrédients, préparation minimale et un repas sain prêt sans stress Préparez un dîner rapide et réconfortant en 10 minutes de préparation : placez cinq ingrédients dans la cocotte mijoteuse, lancez la cuisson et récupérez…