From 30817c829be3b8955b47019b48f2750fbf4cef56 Mon Sep 17 00:00:00 2001 From: "gauthier.chombart" Date: Sun, 19 Jul 2026 17:59:02 +0200 Subject: [PATCH] =?UTF-8?q?Retravaille=20l'exercice=20FDS=20:=20boutons,?= =?UTF-8?q?=20=C3=A9tiquette=20et=20r=C3=A9capitulatif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - index : emoji de la carte "Corriger un exercice" ✔️ → ✅ - Boutons de toutes les slides centralisés et uniformisés dans la bottom bar - Slide 1 : encadré "Durée 30 min" remonté au-dessus des trois parties - Slides 3 et 5 : suppression du bouton "Vérifier mes réponses" et blocage du passage à la partie suivante tant que tout n'est pas rempli/relié - Slide 7 : bouton "Terminer l'exercice" (ex "Voir le récapitulatif") réparé, faux pictogrammes remplacés par les vraies images SGH, volet de correction de droite et encadré de résultats supprimés - Slide 8 : encadrés 💡 retirés, boutons déplacés sous le tableau comparatif, bouton "Retour aux exercices" supprimé - Confettis déplacés de la slide 6 vers la slide 8 --- data/ghs05-corrosif.jpg | Bin 0 -> 7677 bytes data/ghs07-nocif.jpg | Bin 0 -> 6745 bytes data/ghs09-environnement.jpg | Bin 0 -> 7851 bytes exercices/Exo_FDS.html | 287 +++++++++++++++++++++++------------ index.html | 2 +- 5 files changed, 193 insertions(+), 96 deletions(-) create mode 100644 data/ghs05-corrosif.jpg create mode 100644 data/ghs07-nocif.jpg create mode 100644 data/ghs09-environnement.jpg diff --git a/data/ghs05-corrosif.jpg b/data/ghs05-corrosif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a62caab6735e8f05c44d8fddec6f12e06ff9bf02 GIT binary patch literal 7677 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 literal 0 HcmV?d00001 diff --git a/data/ghs07-nocif.jpg b/data/ghs07-nocif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..099549edbcf4bdf53707c7889b61ffc80f6d05ae GIT binary patch literal 6745 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
- - - + + +
@@ -726,7 +735,6 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
Certibiocide — Travaux dirigés
FDS, FT
& Étiquettes

Maîtrisez les trois documents essentiels des produits biocides : fiche de sécurité, fiche technique et étiquetage réglementaire.

-
@@ -736,6 +744,10 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
Trois documents, trois usages

Vous allez apprendre à localiser une information dans chacun des documents de référence d'un produit biocide.

+
+ ⏱️ +
Durée ≈ 30 min. Pour chaque question, sélectionnez la zone du document où trouver l'information, puis vérifiez votre score.
+
📄
@@ -753,10 +765,6 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
Interface directe avec l'utilisateur
-
- ⏱️ -
Durée ≈ 30 min. Pour chaque question, sélectionnez la zone du document où trouver l'information, puis vérifiez votre score.
-
👥 Identification du groupe
@@ -771,7 +779,6 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
- @@ -784,7 +791,6 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl 🎯
Pour chaque question, indiquez dans quelle rubrique (1 à 16) trouver la réponse — ou « Absent » si l'information n'y figure pas. Les questions sont mélangées à chaque chargement.
- @@ -796,12 +802,7 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
-
-
- - -
@@ -814,7 +815,6 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl 🎯
Indiquez la section de la FT où trouver chaque information : Description, Propriétés biocides, Conditionnements, Utilisations — ou « Absent ».
- @@ -827,12 +827,7 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
-
-
- - -
@@ -846,7 +841,6 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl 🎯
Sur une étiquette réelle (produit professionnel DÉS'INFECT), cliquez la zone qui répond à chaque question : nom commercial, pictogrammes, mention d'avertissement, phrases H, phrases P (EPI, premiers secours, élimination), contenu net et centre antipoison. Chaque clic ouvre la justification réglementaire de la zone.
- @@ -911,9 +905,9 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
- 🐟 - 🧪 - ! + Pictogramme SGH09 — danger pour le milieu aquatique + Pictogramme SGH05 — corrosif + Pictogramme SGH07 — nocif / irritant DANGER @@ -923,21 +917,9 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
-
👉 Cliquez une zone de l'étiquette : sa justification réglementaire s'affiche ici, à côté du bidon.
- -
-
- - -
@@ -950,11 +932,6 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl
- -
- - -
@@ -979,19 +956,10 @@ span.hotspot { display: inline; padding: 0 2px; -webkit-box-decoration-break: cl ÉtiquetteDangers essentiels, interface rapideÀ chaque prise du produitTous les utilisateurs -
    -
  • FDS = Sécurité et dangers → à consulter AVANT manipulation.
  • -
  • FT = Mode d'emploi et applications → à consulter pour l'utilisation.
  • -
  • Étiquette = Interface rapide → lecture obligatoire avant ouverture du produit.
  • -
  • Les trois documents sont complémentaires, jamais redondants — chacun cible un besoin et un public différents.
  • -
✔ Corriger un rendu -
-
- Retour aux exercices
@@ -1093,6 +1061,7 @@ let etiAnswers = {}; // { zoneCible : zoneCliquée en 1re tentative } — p let etiFirstTry = {}; // { zoneCible : true si trouvée sans erreur } let etiCurError = false; // une erreur a-t-elle eu lieu sur la question courante let etiInit = false; // écouteur de clic posé une seule fois +let etiRecapShown = false;// panneau récapitulatif affiché (slide 7) function buildEtiquette() { etiOrder = shuffleArray(etiZones.map((_, i) => i)); @@ -1107,9 +1076,10 @@ function buildEtiquette() { closeEtiPop(); const r = document.getElementById('etiquette-result'); r.className = 'result-message'; r.innerHTML = ''; - document.getElementById('eti-recap-btn').disabled = true; + etiRecapShown = false; document.getElementById('eti-exercise').style.display = 'flex'; document.getElementById('eti-recap').style.display = 'none'; + if (currentSlide === 7) renderBarActions(); if (!etiInit) { card.addEventListener('click', onEtiClick); @@ -1136,11 +1106,8 @@ function onEtiClick(e) { if (!hs) return; const clicked = hs.dataset.zone; - // Exploration libre une fois l'exercice terminé - if (etiPos >= etiOrder.length) { - openEtiPop(hs, 'info', clicked); - return; - } + // Exercice terminé : plus d'interaction (les corrections sont dans la correction générale) + if (etiPos >= etiOrder.length) return; const target = etiZones[etiOrder[etiPos]]; if (clicked === target.zone) { @@ -1148,7 +1115,6 @@ function onEtiClick(e) { hs.classList.add('hs-correct'); if (etiAnswers[target.zone] === undefined) etiAnswers[target.zone] = clicked; etiFirstTry[target.zone] = !etiCurError; - openEtiPop(hs, 'ok', clicked); etiPos++; etiCurError = false; renderEtiQuestion(); @@ -1160,14 +1126,12 @@ function onEtiClick(e) { hs.classList.remove('hs-wrong'); void hs.offsetWidth; // relance l'animation hs.classList.add('hs-wrong'); setTimeout(() => hs.classList.remove('hs-wrong'), 700); - openEtiPop(hs, 'ko', clicked); } } function finishEtiquette() { - const correct = etiZones.filter(z => etiFirstTry[z.zone]).length; - showScore(document.getElementById('etiquette-result'), correct, etiZones.length); - document.getElementById('eti-recap-btn').disabled = false; + const b = document.getElementById('eti-recap-btn'); + if (b) b.disabled = false; } /* Info-bulle réglementaire positionnée près de la zone cliquée */ @@ -1243,6 +1207,8 @@ function showEtiRecap() { document.getElementById('eti-exercise').style.display = 'none'; document.getElementById('eti-recap').style.display = 'flex'; + etiRecapShown = true; + renderBarActions(); // Animation : l'étiquette glisse à gauche, le tableau apparaît à sa droite const rl = document.getElementById('recap-layout'); @@ -1255,6 +1221,8 @@ function showEtiRecap() { function hideEtiRecap() { document.getElementById('eti-recap').style.display = 'none'; document.getElementById('eti-exercise').style.display = 'flex'; + etiRecapShown = false; + renderBarActions(); const sa = document.querySelector('#slide-7 .scroll-area'); if (sa) sa.scrollTop = 0; } @@ -1296,7 +1264,7 @@ function buildFtMatch() { initFtMatch(); document.getElementById('ft-svg').innerHTML = ''; - document.getElementById('ft-verify').disabled = true; + refreshFtState(); } function resetFT() { @@ -1354,7 +1322,8 @@ function refreshFtState() { dot.closest('.match-item').classList.toggle('connected', used); }); const all = ftQuestions.every(q => ftConnections[q.id] != null); - document.getElementById('ft-verify').disabled = !all; + const btn = document.getElementById('ft-next'); + if (btn) btn.disabled = !all; } function initFtMatch() { @@ -1474,7 +1443,8 @@ function initFdsDnd() { function updateFdsGate() { const slots = document.querySelectorAll('#slide-3 .drop-slot'); const all = Array.from(slots).every(s => (s.dataset.value || '') !== ''); - document.getElementById('fds-verify').disabled = !all; + const btn = document.getElementById('fds-next'); + if (btn) btn.disabled = !all; } function wireVerifyGate(containerId, btnId) { @@ -1676,6 +1646,7 @@ function goTo(n) { const sa = next.querySelector('.scroll-area'); if (sa) sa.scrollTop = 0; updateUI(); + if (n === 8) setTimeout(launchConfetti, 200); } function goBack() { @@ -1691,20 +1662,73 @@ function goBack() { updateUI(); } +/* Boutons centralisés dans la bottom bar, un jeu par slide */ +function barBtn(bar, html, cls, fn, opts) { + opts = opts || {}; + const b = document.createElement('button'); + b.className = 'btn ' + cls; + b.innerHTML = html; + if (opts.id) b.id = opts.id; + if (opts.disabled) b.disabled = true; + b.addEventListener('click', fn); + bar.appendChild(b); + return b; +} + +function renderBarActions() { + const bar = document.getElementById('barActions'); + if (!bar) return; + bar.innerHTML = ''; + switch (currentSlide) { + case 0: + barBtn(bar, 'Démarrer le TD →', 'btn-amber', () => goTo(1)); + break; + case 1: + barBtn(bar, 'Commencer la partie 1 →', 'btn-amber', startPart1); + break; + case 2: + barBtn(bar, 'Répondre aux questions →', 'btn-amber', () => goTo(3)); + break; + case 3: + barBtn(bar, '↺ Recommencer', 'btn-outline', resetFDS); + barBtn(bar, 'Passer à la partie 2 →', 'btn-coral', () => goTo(4), { id: 'fds-next' }); + updateFdsGate(); + break; + case 4: + barBtn(bar, 'Répondre aux questions →', 'btn-coral', () => goTo(5)); + break; + case 5: + barBtn(bar, '↺ Recommencer', 'btn-outline', resetFT); + barBtn(bar, 'Passer à la partie 3 →', 'btn-teal', () => goTo(6), { id: 'ft-next' }); + refreshFtState(); + break; + case 6: + barBtn(bar, 'Répondre aux questions →', 'btn-teal', () => goTo(7)); + break; + case 7: + if (etiRecapShown) { + barBtn(bar, '← Retour à l\'exercice', 'btn-outline', hideEtiRecap); + barBtn(bar, 'Voir la synthèse générale →', 'btn-amber', () => goTo(8)); + } else { + barBtn(bar, '↺ Recommencer', 'btn-outline', resetEtiquette); + barBtn(bar, 'Terminer l\'exercice →', 'btn-teal', showEtiRecap, + { id: 'eti-recap-btn', disabled: etiPos < etiOrder.length }); + } + break; + case 8: + // Boutons placés sous le tableau comparatif, dans la slide (pas dans la bottom bar) + break; + } +} + function updateUI() { document.getElementById('progressFill').style.width = currentSlide === 0 ? '0%' : ((currentSlide / totalSlides) * 100) + '%'; document.getElementById('slideCounter').textContent = currentSlide === 0 ? '' : currentSlide + ' / ' + totalSlides; - document.getElementById('bottomBar').style.display = currentSlide === 0 ? 'none' : 'flex'; + document.getElementById('bottomBar').style.display = 'flex'; document.getElementById('backBtn').style.display = history.length > 0 ? 'block' : 'none'; - - const badge = document.getElementById('phaseBadge'); - const set = (bg, col, txt) => { badge.style.display = 'block'; badge.style.background = bg; badge.style.color = col; badge.textContent = txt; }; - if (currentSlide === 2 || currentSlide === 3) set('var(--amber-light)', 'var(--amber-dark)', 'Partie 1 — FDS'); - else if (currentSlide === 4 || currentSlide === 5) set('var(--coral-light)', 'var(--coral)', 'Partie 2 — FT'); - else if (currentSlide === 6 || currentSlide === 7) set('var(--teal-light)', 'var(--teal-dark)', 'Partie 3 — Étiquette'); - else badge.style.display = 'none'; + renderBarActions(); } function restartAll() { @@ -1719,6 +1743,79 @@ function restartAll() { updateUI(); } +/* ======================== CONFETTIS ======================== */ +function launchConfetti() { + const canvas = document.getElementById('confettiCanvas'); + if (!canvas) return; + const ctx = canvas.getContext('2d'); + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + canvas.style.display = 'block'; + + const colors = ['#BA7517', '#D85A30', '#F5DFB8', '#633806', '#F0A855', '#E8C068', '#FF8C5A']; + const particles = Array.from({ length: 180 }, () => ({ + x: Math.random() * canvas.width, + y: -(Math.random() * canvas.height * 0.5), + w: Math.random() * 10 + 5, + h: Math.random() * 5 + 3, + color: colors[Math.floor(Math.random() * colors.length)], + rotation: Math.random() * Math.PI * 2, + rotSpeed: (Math.random() - 0.5) * 0.18, + vx: (Math.random() - 0.5) * 2.5, + vy: Math.random() * 3 + 2, + opacity: 1, + shape: Math.random() < 0.4 ? 'circle' : 'rect' + })); + + let rafId; + let start = null; + const totalDuration = 3800; + + function draw(ts) { + if (!start) start = ts; + const elapsed = ts - start; + + ctx.clearRect(0, 0, canvas.width, canvas.height); + let active = false; + + particles.forEach(p => { + p.x += p.vx; + p.y += p.vy; + p.vy += 0.04; + p.rotation += p.rotSpeed; + p.opacity = elapsed < totalDuration * 0.55 + ? 1 + : Math.max(0, 1 - (elapsed - totalDuration * 0.55) / (totalDuration * 0.45)); + + if (p.y < canvas.height + 20) active = true; + + ctx.save(); + ctx.translate(p.x, p.y); + ctx.rotate(p.rotation); + ctx.globalAlpha = p.opacity; + ctx.fillStyle = p.color; + if (p.shape === 'circle') { + ctx.beginPath(); + ctx.arc(0, 0, p.w / 2, 0, Math.PI * 2); + ctx.fill(); + } else { + ctx.fillRect(-p.w / 2, -p.h / 2, p.w, p.h); + } + ctx.restore(); + }); + + if (active && elapsed < totalDuration * 1.3) { + rafId = requestAnimationFrame(draw); + } else { + canvas.style.display = 'none'; + ctx.clearRect(0, 0, canvas.width, canvas.height); + } + } + + if (rafId) cancelAnimationFrame(rafId); + rafId = requestAnimationFrame(draw); +} + document.addEventListener('DOMContentLoaded', () => { generateQuizzes(); updateUI(); diff --git a/index.html b/index.html index b72dd84..c9aa315 100644 --- a/index.html +++ b/index.html @@ -141,7 +141,7 @@
-
✔️
+

Corriger un exercice

Correction des rendus