Implemente le mini-jeu Mots meles (grille reelle, placement 4 directions)
Build and deploy / test-python (push) Failing after 1m0s
Build and deploy / test-js (push) Failing after 50s
Build and deploy / lint-python (push) Failing after 1m2s
Build and deploy / lint-js (push) Failing after 1m7s
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 1m0s
Build and deploy / test-js (push) Failing after 50s
Build and deploy / lint-python (push) Failing after 1m2s
Build and deploy / lint-js (push) Failing after 1m7s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Build and deploy / sonarqube (push) Failing after 1m1s
Quatrieme mini-jeu du support de formation : le createur ecrit 5 a 10 mots (recommandation souple, comme MIN_PAIRS/MIN_CARDS), places par le serveur dans une grille carree horizontalement, verticalement, ou en diagonale (deux sens seulement, jamais a l'envers) via un vrai algorithme de placement avec retry/agrandissement de grille en cas de conflit. La grille ET la position exacte de chaque mot sont calculees cote serveur puis embarquees en JSON ; le client valide chaque selection (glisser ou cliquer-cliquer) par comparaison de coordonnees exactes, jamais une simple comparaison de texte (qui se tromperait sur des lettres partagees entre deux mots qui se croisent). Comme Association/Memory, la grille reste affichee une fois tous les mots trouves : seul le bouton Recommencer (.docMinigameRestartBar, partage) apparait. Verifie via simulation DOM reelle (jsdom) : selection au glisser ET au clic-clic, mot invalide sans crash, barre de fin qui bascule, panneau Proprietes (ajout/suppression de mot avec revalidation serveur). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
1b1307bb85
commit
d8be80ebd1
@@ -14,14 +14,15 @@ def document_element_update(slug: str, element_id: int) -> Response | tuple[Resp
|
||||
Propriétés (voir static/document/js/document-editor.js) envoie
|
||||
systématiquement l'état complet de ses champs.
|
||||
|
||||
Quiz, Association et Memory sont les seuls kinds revalidés côté
|
||||
serveur (sanitize_quiz_config/sanitize_association_config/
|
||||
sanitize_memory_config, même convention que
|
||||
Quiz, Association, Memory et Mots mêlés sont les seuls kinds
|
||||
revalidés côté serveur (sanitize_quiz_config/
|
||||
sanitize_association_config/sanitize_memory_config/
|
||||
sanitize_mots_config, même convention que
|
||||
game_engine/rendering/quiz_box_config.py côté jeu) : leur forme (liste
|
||||
de questions/choix, liste de paires, liste de cartes) doit rester
|
||||
structurellement correcte pour que le rendu ne plante jamais,
|
||||
contrairement aux autres kinds (texte/forme/image...) dont les
|
||||
attributs sont de simples valeurs scalaires sans structure à
|
||||
de questions/choix, liste de paires, liste de cartes, liste de mots)
|
||||
doit rester structurellement correcte pour que le rendu ne plante
|
||||
jamais, contrairement aux autres kinds (texte/forme/image...) dont
|
||||
les attributs sont de simples valeurs scalaires sans structure à
|
||||
garantir."""
|
||||
element = document_engine.get_document_element(slug, element_id)
|
||||
if element is None:
|
||||
@@ -33,6 +34,8 @@ def document_element_update(slug: str, element_id: int) -> Response | tuple[Resp
|
||||
attributes = document_engine.sanitize_association_config(attributes)
|
||||
elif element["kind"] == "memory":
|
||||
attributes = document_engine.sanitize_memory_config(attributes)
|
||||
elif element["kind"] == "mots":
|
||||
attributes = document_engine.sanitize_mots_config(attributes)
|
||||
document_engine.update_document_element_attributes(slug, element_id, attributes)
|
||||
element = db.assert_not_none(
|
||||
document_engine.get_document_element(slug, element_id),
|
||||
|
||||
Reference in New Issue
Block a user