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
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:
co-authored by
Claude Sonnet 5
parent
b2292de122
commit
c04a81cfec
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user