Ajoute 4 mécanismes moteur manquants pour le thème sécurité incendie : étiquette, carte, image SVG inline, bouton avec pièce jointe
Contenu et mécanisme uniquement, aucun style ajouté (voir consigne du 24/09/2026) : deux nouveaux kinds de contenu (badge/carte, rendu en div brutes sans CSS), un mode SVG inline pour l'image (svg_markup, nettoyé par un nouveau sanitizer allow-list avant chaque rendu) et un fichier téléchargeable joignable à un bouton (upload/download routes, stockage sous db.support_dir). Le futur système de templates portera l'habillage visuel de ces éléments. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
e7c6ed7159
commit
a34bcf4159
@@ -11,7 +11,7 @@ from .mots_config import DEFAULT_MOTS_CONFIG
|
||||
from .quiz_config import DEFAULT_QUIZ_CONFIG
|
||||
from .scenario_config import DEFAULT_SCENARIO_CONFIG
|
||||
|
||||
CONTENT_KINDS = ("titre", "paragraphe", "image", "bouton", "liste_puces", "liste_numerotee")
|
||||
CONTENT_KINDS = ("titre", "paragraphe", "image", "bouton", "liste_puces", "liste_numerotee", "badge", "carte")
|
||||
MINIGAME_KINDS = ("quiz", "association", "memory", "mots", "scenario", "zones")
|
||||
|
||||
# "row" n'apparaît jamais dans la bibliothèque (créé implicitement par le
|
||||
@@ -30,6 +30,8 @@ ELEMENT_KIND_LABELS: dict[str, str] = {
|
||||
"bouton": "Bouton",
|
||||
"liste_puces": "Liste à puces",
|
||||
"liste_numerotee": "Liste numérotée",
|
||||
"badge": "Étiquette",
|
||||
"carte": "Carte",
|
||||
"quiz": "Quiz",
|
||||
"association": "Association",
|
||||
"memory": "Memory",
|
||||
@@ -56,15 +58,32 @@ def element_default_attributes(kind: str) -> dict[str, Any]:
|
||||
if kind == "paragraphe":
|
||||
return {"content": "Nouveau paragraphe de texte.", "style": "paragraphe", **_TEXT_DEFAULTS}
|
||||
if kind == "image":
|
||||
return {"src": "", "alt": ""}
|
||||
# svg_markup (optionnel) prend le pas sur src au rendu (voir
|
||||
# render_document_element._render_image) — un contenu vectoriel
|
||||
# dessiné/collé directement plutôt qu'un fichier hébergé.
|
||||
return {"src": "", "alt": "", "svg_markup": ""}
|
||||
if kind == "bouton":
|
||||
return {"label": "Bouton", "target": ""}
|
||||
# attachment_stored_name/attachment_filename (optionnels) : un
|
||||
# fichier téléchargeable joint au bouton (voir routes/document/
|
||||
# document_element_upload_attachment.py), indépendant de `target`
|
||||
# qui reste réservé à la navigation (URL/ancre). Jamais les deux
|
||||
# à la fois côté UI (voir document-editor.js), mais rien ne
|
||||
# l'empêche structurellement ici.
|
||||
return {"label": "Bouton", "target": "", "attachment_stored_name": "", "attachment_filename": ""}
|
||||
if kind in ("liste_puces", "liste_numerotee"):
|
||||
# Une seule et même structure d'attributs pour les deux kinds —
|
||||
# "ordonnée ou non" se lit directement sur le kind au moment du
|
||||
# rendu (voir render_document_element._render_list), jamais un
|
||||
# attribut "ordered" redondant à tenir synchronisé avec le kind.
|
||||
return {"items": ["Premier élément", "Deuxième élément"]}
|
||||
if kind == "badge":
|
||||
return {"content": "Étiquette"}
|
||||
if kind == "carte":
|
||||
# Contenu pur (lettre/repère court + titre + description) — sans
|
||||
# aucun choix de couleur/forme, laissé au futur système de
|
||||
# templates (voir consigne du 24/09/2026 : moteur = contenu et
|
||||
# mécanisme uniquement, jamais de style).
|
||||
return {"label": "A", "title": "Titre de la carte", "description": "Description de la carte."}
|
||||
if kind == "row":
|
||||
return {"gap": 16, "align": "stretch", "justify": "flex-start"}
|
||||
if kind == "quiz":
|
||||
|
||||
@@ -6,12 +6,17 @@ attributs par défaut posés à la création de chaque type.
|
||||
|
||||
## `CONTENT_KINDS: tuple[str, ...]`
|
||||
`("titre", "paragraphe", "image", "bouton", "liste_puces",
|
||||
"liste_numerotee")` — éléments du flux, peuvent être top-niveau ou
|
||||
enfants d'une rangée. `"liste_puces"`/`"liste_numerotee"` partagent la
|
||||
même structure d'attributs (`items`) ; c'est le `kind` lui-même qui
|
||||
décide `<ul>` ou `<ol>` au rendu (voir
|
||||
"liste_numerotee", "badge", "carte")` — éléments du flux, peuvent être
|
||||
top-niveau ou enfants d'une rangée. `"liste_puces"`/`"liste_numerotee"`
|
||||
partagent la même structure d'attributs (`items`) ; c'est le `kind`
|
||||
lui-même qui décide `<ul>` ou `<ol>` au rendu (voir
|
||||
`document_engine/rendering/render_document_element.py::_render_list`),
|
||||
jamais un attribut `ordered` redondant.
|
||||
jamais un attribut `ordered` redondant. `"badge"` et `"carte"` sont du
|
||||
contenu PUR, sans aucun attribut de style/couleur/forme (décision du
|
||||
24/09/2026 : le moteur ne porte que contenu et mécanisme, tout habillage
|
||||
visuel revient à un futur système de templates) — voir aussi le mode SVG
|
||||
inline de `"image"` (`svg_markup`) et la pièce jointe téléchargeable de
|
||||
`"bouton"` (`attachment_filename`), ci-dessous.
|
||||
|
||||
## `MINIGAME_KINDS: tuple[str, ...]`
|
||||
`("quiz", "association", "memory", "mots", "scenario", "zones")` —
|
||||
@@ -35,12 +40,17 @@ Attributs posés à la création d'un élément de ce type (voir
|
||||
`document_engine/elements/add_document_element.py`).
|
||||
- **Retour** : un dict d'attributs par défaut, dépendant du `kind` :
|
||||
texte (`content/style` + `bold/italic/underline/align/color`),
|
||||
image (`src/alt`), bouton (`label/target`), liste à puces/numérotée
|
||||
(`items`, une liste de chaînes), rangée (`gap/align/justify`),
|
||||
quiz (`DEFAULT_QUIZ_CONFIG`, voir `quiz_config.py`), association
|
||||
(`DEFAULT_ASSOCIATION_CONFIG`, voir `association_config.py`), memory
|
||||
(`DEFAULT_MEMORY_CONFIG`, voir `memory_config.py`), autre mini-jeu
|
||||
(`theme_color`), ou `{}` pour un `kind` inconnu.
|
||||
image (`src/alt/svg_markup` — `svg_markup` prend le pas sur `src` au
|
||||
rendu, voir rendering.md), bouton (`label/target/
|
||||
attachment_stored_name/attachment_filename` — la pièce jointe est
|
||||
indépendante de `target`, réservé à la navigation), liste à
|
||||
puces/numérotée (`items`, une liste de chaînes), badge (`content`),
|
||||
carte (`label/title/description`, contenu pur sans couleur/forme),
|
||||
rangée (`gap/align/justify`), quiz (`DEFAULT_QUIZ_CONFIG`, voir
|
||||
`quiz_config.py`), association (`DEFAULT_ASSOCIATION_CONFIG`, voir
|
||||
`association_config.py`), memory (`DEFAULT_MEMORY_CONFIG`, voir
|
||||
`memory_config.py`), autre mini-jeu (`theme_color`), ou `{}` pour un
|
||||
`kind` inconnu.
|
||||
- **Exceptions** : aucune.
|
||||
|
||||
## `quiz_config.py` — modèle de données du mini-jeu Quiz
|
||||
|
||||
Reference in New Issue
Block a user