Refonte du Scenario en arbre de decision (modale dediee, plus de vrai/faux
Build and deploy / test-python (push) Failing after 1m15s
Build and deploy / test-js (push) Successful in 54s
Build and deploy / lint-python (push) Failing after 1m12s
Build and deploy / lint-js (push) Failing after 1m8s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Build and deploy / sonarqube (push) Failing after 1m4s
Build and deploy / test-python (push) Failing after 1m15s
Build and deploy / test-js (push) Successful in 54s
Build and deploy / lint-python (push) Failing after 1m12s
Build and deploy / lint-js (push) Failing after 1m8s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Build and deploy / sonarqube (push) Failing after 1m4s
Retour utilisateur : "une consequence peut mener a d'autres choix et
ainsi de suite, il n'y a pas de notion vrai/faux, il faut une modale
avec la possibilite de construire un veritable arbre de choix
consequence". Remplace le modele plat (situation + 2-4 choix + un seul
bon choix + une consequence terminale) par un vrai graphe de nœuds :
{"title", "nodes": [{"id", "text", "choices": [{"text", "target_id"}]}]}
- nodes[0] est la situation initiale, chaque choix peut pointer vers
n'importe quel autre nœud (branchement, convergence, fins multiples),
un nœud sans choix est une fin de branche valide. Aucune notion de
bonne/mauvaise reponse.
L'arbre se construit desormais dans une modale dediee (trop de
structure pour la colonne etroite du panneau Proprietes) : liste de
nœuds, chaque choix avec un menu deroulant "mene a" listant les autres
nœuds ou "fin de branche". La modale est un composant generique
(.docModal*) independant de tout framework externe.
sanitize_scenario_config degrade silencieusement tout target_id
orphelin (nœud supprime) vers None plutot que de faire echouer le
scenario entier. Le lecteur cote client navigue le graphe nœud par
nœud, le texte du nœud visite remplace le precedent (toujours pas un
Quiz), jusqu'a une fin de branche puis passage au scenario suivant.
Verifie via simulation DOM reelle (jsdom) : navigation ramifiee
(branchement, convergence, fin via nœud vide ET via choix sans cible),
plusieurs arbres a la suite, et l'editeur modal complet (ouverture,
ajout/suppression de nœud avec reparation des references pendantes,
changement de cible, fermeture bouton/fond/Echap).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
c04a81cfec
commit
a529857379
@@ -461,23 +461,27 @@ def _render_mots(el: dict[str, Any], _children_by_parent: dict[int | None, list[
|
||||
def _render_scenario_player(config: dict[str, Any]) -> str:
|
||||
"""Mise en situation RÉELLEMENT interactive — affichée uniquement en
|
||||
Mode Aperçu, même principe que les autres mini-jeux : aucun
|
||||
aller-retour serveur, tout le déroulé (lecture de la situation, choix,
|
||||
conséquence révélée, scénario suivant) est géré par
|
||||
static/document/js/document-editor.js à partir du JSON embarqué. Les
|
||||
scénarios gardent l'ORDRE d'écriture du créateur (contrairement à
|
||||
aller-retour serveur, tout le déroulé (navigation dans l'arbre de
|
||||
décision, scénario suivant) est géré par static/document/js/
|
||||
document-editor.js à partir du JSON embarqué (voir scenario_config.py
|
||||
pour la forme exacte d'un scénario : {"title", "nodes"}, nodes[0]
|
||||
étant la situation initiale). Les scénarios (plusieurs arbres
|
||||
indépendants) gardent l'ORDRE d'écriture du créateur (contrairement à
|
||||
l'Association/Memory/Mots mêlés, jamais mélangés) : ce sont des mises
|
||||
en situation séquentielles, pas des éléments à faire correspondre ou
|
||||
retrouver — un mélange n'aurait ici aucun sens pédagogique. Un seul
|
||||
bloc de texte (.docScenarioSituation) sert successivement à afficher
|
||||
la situation PUIS, une fois un choix fait, la conséquence à sa place
|
||||
(les boutons de choix disparaissent aussi) — volontairement PAS le
|
||||
comportement du Quiz, où la question reste affichée à côté d'un
|
||||
encart de feedback séparé (retour utilisateur du 20/09/2026 : "ce
|
||||
n'est pas un quiz, la conséquence s'affiche à la place de la
|
||||
situation précédente"). Réutilise les classes visuelles du Quiz
|
||||
(.docQuizOptions/.docQuizFeedback/.docQuizNextBar/
|
||||
.docQuizQuestionText) plutôt que de dupliquer ces règles, même esprit
|
||||
que .docAssocCard/.docMinigameRestartBar."""
|
||||
le texte de chaque nœud visité : une fois un choix fait, le texte du
|
||||
nœud suivant REMPLACE le précédent (les boutons de choix disparaissent
|
||||
avec lui) — volontairement PAS le comportement du Quiz, où la
|
||||
question resterait affichée à côté d'un encart de feedback séparé.
|
||||
Aucune notion de bonne/mauvaise réponse ici (retour utilisateur du
|
||||
20/09/2026 : "il n'y a pas de notion vrai/faux, l'utilisateur observe
|
||||
les conséquences") — un nœud sans choix est simplement une fin de
|
||||
branche. Réutilise les classes visuelles du Quiz
|
||||
(.docQuizOptions/.docQuizNextBar/.docQuizQuestionText) plutôt que de
|
||||
dupliquer ces règles, même esprit que .docAssocCard/
|
||||
.docMinigameRestartBar."""
|
||||
config_json = html_lib.escape(json.dumps({"scenarios": config["scenarios"]}), quote=True)
|
||||
return (
|
||||
f'<div class="docScenarioPlayer" data-scenario-config="{config_json}">'
|
||||
|
||||
Reference in New Issue
Block a user