La consequence du Scenario remplace la situation, pas un feedback Quiz
Build and deploy / test-python (push) Failing after 1m2s
Build and deploy / test-js (push) Successful in 51s
Build and deploy / lint-python (push) Failing after 58s
Build and deploy / lint-js (push) Failing after 51s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Build and deploy / sonarqube (push) Failing after 1m1s

Retour utilisateur : "ce n'est pas un quiz, la consequence s'affiche a
la place de la situation precedente". L'ancien design affichait la
situation ET les choix en permanence avec un encart de feedback separe
en dessous (calque sur le Quiz). Desormais un seul bloc de texte
(.docScenarioSituation) sert successivement a la situation PUIS, une
fois un choix fait, a la consequence a sa place ; les boutons de choix
disparaissent avec elle. Supprime l'element .docScenarioConsequence
devenu inutile.

Verifie via simulation DOM reelle (jsdom) : la consequence remplace bien
le texte de la situation (jamais affichee a cote), les choix
disparaissent, le retour a une situation neutre au scenario suivant/au
redemarrage fonctionne.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-20 17:10:56 +02:00
co-authored by Claude Sonnet 5
parent b2292de122
commit c04a81cfec
3 changed files with 43 additions and 30 deletions
+19 -17
View File
@@ -1163,14 +1163,15 @@ function forgeDocRenderScenarioPlayerScenario(playerEl, state) {
const item = state.scenarios[state.current];
const situationEl = playerEl.querySelector('.docScenarioSituation');
const choicesEl = playerEl.querySelector('.docScenarioChoices');
const consequenceEl = playerEl.querySelector('.docScenarioConsequence');
const progEl = playerEl.querySelector('.docScenarioProg');
const nextBtn = playerEl.querySelector('.docScenarioNextBtn');
// Repart d'un bloc "situation" neutre (jamais un résidu des classes
// is-visible/is-ok/is-ko posées par une réponse précédente, voir
// forgeDocScenarioPlayerAnswer ci-dessous).
situationEl.className = 'docScenarioSituation docQuizQuestionText';
situationEl.textContent = item.situation;
choicesEl.innerHTML = '';
consequenceEl.className = 'docScenarioConsequence docQuizFeedback';
consequenceEl.textContent = '';
nextBtn.classList.remove('is-visible');
playerEl.querySelector('.docMinigameRestartBar').classList.remove('is-visible');
item.choices.forEach((choice, idx) => {
@@ -1180,30 +1181,31 @@ function forgeDocRenderScenarioPlayerScenario(playerEl, state) {
btn.textContent = choice.text;
btn.addEventListener('click', (e) => {
e.stopPropagation();
forgeDocScenarioPlayerAnswer(playerEl, state, idx, btn);
forgeDocScenarioPlayerAnswer(playerEl, state, idx);
});
choicesEl.appendChild(btn);
});
progEl.textContent = `Scénario ${state.current + 1} sur ${state.scenarios.length}`;
}
function forgeDocScenarioPlayerAnswer(playerEl, state, idx, btn) {
function forgeDocScenarioPlayerAnswer(playerEl, state, idx) {
if (state.answered) return;
state.answered = true;
const item = state.scenarios[state.current];
const buttons = playerEl.querySelectorAll('.docScenarioChoice');
buttons.forEach((b) => { b.disabled = true; });
const consequenceEl = playerEl.querySelector('.docScenarioConsequence');
const situationEl = playerEl.querySelector('.docScenarioSituation');
const choicesEl = playerEl.querySelector('.docScenarioChoices');
const isLast = state.current === state.scenarios.length - 1;
if (idx === item.correct_index) {
btn.classList.add('is-correct');
consequenceEl.classList.add('is-visible', 'is-ok');
} else {
btn.classList.add('is-wrong');
buttons[item.correct_index].classList.add('is-correct');
consequenceEl.classList.add('is-visible', 'is-ko');
}
consequenceEl.textContent = item.choices[idx].consequence || 'Aucune conséquence renseignée pour ce choix.';
const isCorrect = idx === item.correct_index;
const consequenceText = item.choices[idx].consequence || 'Aucune conséquence renseignée pour ce choix.';
// Ce n'est pas un Quiz : la conséquence REMPLACE la situation (le récit
// avance), et les boutons de choix disparaissent avec elle — jamais un
// encart de feedback séparé pendant que la situation resterait affichée
// (retour utilisateur du 20/09/2026).
situationEl.className = `docScenarioSituation docQuizFeedback is-visible ${isCorrect ? 'is-ok' : 'is-ko'}`;
situationEl.textContent = consequenceText;
choicesEl.innerHTML = '';
if (isLast) {
playerEl.querySelector('.docMinigameRestartBar').classList.add('is-visible');
} else {