Implémente toutes les options manquantes identifiées pour l'élément
Bouton : typographie (gras/italique/transformation/police/taille/
espacement des lettres/couleur), icône SVG optionnelle avec position
(avant/après le texte) et taille réglables — au-delà de l'Étiquette,
qui n'a qu'une icône fixe —, tous les attributs de boîte partagés déjà
créés pour Titre/Paragraphe/Image, et un effet visuel universel au
survol/clic.
Deux ajouts transversaux demandés pendant le test : un réglage "les 4
côtés de la bordure à la fois" dans le module de boîte partagé
(bénéficie automatiquement à tous les éléments qui l'utilisent), et le
glisser-déposer d'un élément du canevas vers une autre page via le
panneau Pages (le mécanisme serveur existait déjà pour la pagination
automatique, seule l'interaction manuelle manquait).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Implémente toutes les options manquantes identifiées pour l'élément
Image : dimensionnement/ratio/object-fit, filtres CSS, upload de
fichier (en plus de l'URL), lien/plein écran au clic, chargement
différé, légende, et tous les attributs de boîte partagés déjà créés
pour Titre/Paragraphe (padding/margin/fond/bordure/ombre/opacité/
position du bloc).
Système de pages : un support peut désormais avoir 0 page (un nouveau
support démarre vide), suppression de toutes les pages en un clic, et
la pagination automatique insère intelligemment la nouvelle page juste
après celle qui déborde plutôt qu'en toute fin de liste.
Bugs réels trouvés et corrigés en cours de route : le style de bloc
(dont align-self) ciblait l'élément interne au lieu de son enveloppe
(légende/lien) ; une image à sa taille native pouvait déclencher une
pagination infinie ; upload/mise à jour d'attribut ne déclenchaient
jamais le contrôle de débordement.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nouveau module partagé document_engine/rendering/box_style.py
(padding/margin/background_color/border_radius/border par côté/height/
min-height/max-height/min-width/box-shadow/opacity/align_self) —
réutilisable tel quel par tous les kinds suivants du tableau d'audit.
Titre/Paragraphe gagnent : barré, police de caractère, taille de
police, hauteur de ligne, espacement des lettres, majuscules/
minuscules/capitales, ombre du texte, et tous les attributs de boîte
partagés ci-dessus. Interface entièrement à base de curseurs/cases à
cocher/listes déroulantes/sélecteurs de couleur natifs — plus aucun
champ de texte libre pour une valeur CSS (retour utilisateur).
Deux bugs transversaux corrigés au passage (concernent tout
l'éditeur) :
- Le panneau Propriétés n'était jamais reconstruit après un clic sur un
bouton (gras/alignement/segments...) — il fallait recharger la page
pour voir l'état réel. Corrigé dans forgeDocUpdateAttributes, point
d'entrée unique de toute mise à jour d'attribut.
- Les cases à cocher et curseurs héritaient à tort le style d'un champ
de texte (padding/bordure/fond/largeur 100%) via la règle générique
.docField input.
Ajoute docs/plan/AUDIT_MISE_EN_FORME.md : suivi de l'audit élément par
élément (Titre/Paragraphe traité, Image ensuite).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Un apprenant n'a jamais acces a l'editeur : un etat "publie" persiste
en base (published_at) ne servait donc a rien tant qu'aucune vue
apprenant/export ne le consomme (retour utilisateur direct). Retrait
complet : route /document/<slug>/publish, db.mark_support_published,
la colonne logique published_at dans support_meta, le bouton et son
CSS/JS. "Aperçu" devient l'action primaire du bandeau (repond au vrai
besoin : voir le rendu avant un futur export). Un export reel (SCORM
ou equivalent) reste a specifier separement le jour venu.
SKIP=djlint : meme backlog H021 pre-existant que le commit precedent,
aucun fichier touche ici n'y figure. ruff/mypy --strict/vulture/
bandit/import-linter/eslint/stylelint tous verts ; 615 tests Python
(617 - 2 tests du Publier retire) + verification manuelle live du
retrait (route 404, bouton absent du HTML, Apercu confirme
fonctionnel par simulation DOM).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
La section 0 décrivait encore un simple renommage screens->game_engine,
dépassé le même jour par la réorganisation effective en sous-dossiers
game/document dans routes/, scripts/, static/, templates/, tests/ (voir
commit b2e933f3). Réécrite pour refléter l'état réel : contenu exact
déplacé dans chaque game/, styles/ volontairement intact, ai/publish/
non déplacés, les 2 fichiers orphelins signalés. Étape 1 de la section 5
marquée faite. Aucun changement sur le contenu fonctionnel des sections
1/3/4 (travail futur, non concerné par cette réorganisation).
SKIP=djlint : aucun template touché par ce commit, backlog H021 deja
documente comme dette assumee (CODE_QUALITY.md section 6).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Prepare la scission a venir entre l'editeur Jeu 2D et le futur editeur
Support de formation (voir docs/plan/PLAN.md), sans toucher a
l'architecture en couches existante :
- screens/ renomme en game_engine/ (nom clair pour le moteur du jeu 2D,
avant l'arrivee d'un second "moteur" cote document) : ~85 imports
corriges, contrat import-linter mis a jour, meme forme de couches.
- routes/, scripts/, static/, templates/, tests/ : tout ce qui est
propre au jeu 2D deplace dans un sous-dossier game/ de chacun
(routes/game/, static/game/, templates/game/, tests/game/,
scripts/game/) ; ce qui est partage par le site (auth, onboarding,
dashboard, uploads, db/) reste a la racine de chaque dossier. Un
sous-dossier document/ (vide) cree dans chacun pour le futur chantier.
- styles/ volontairement inchange : les 3 fichiers sources sont
concatenes en un seul static/style.css charge par tout le site,
scinder leur CONTENU (editeur vs partage) serait un refactor CSS
distinct, pas un deplacement mecanique.
- Chaine d'export SCORM (publish/build_scorm_package.py) mise a jour en
profondeur : copie des assets, URLs d'icones relatives a
static/style.css (qui ne bouge pas), manifeste, wrapper SCORM.
- Deux regressions d'un sweep de renommage anterieur corrigees au passage
(screens.js/screens/scene-objects incorrectement convertis en
game_engine.js/game_engine/scene-objects dans des commentaires).
- Effet de bord Windows decouvert et corrige : git mv + Path.write_text
convertissent des fichiers en CRLF (core.autocrlf=true) - ~189 fichiers
normalises en LF.
- .eslintrc.json/package.json : uniquement les chemins de glob mis a jour
(static/game/js/...) ; la preparation eslint-plugin-unicorn du lot 7
reste volontairement non committee (package-lock.json restaure a la
version precedente).
Verifications : ruff, mypy --strict (391 fichiers), vulture, bandit,
lint-imports tous verts ; 591/591 tests Python, 276/276 tests JS ;
demarrage serveur + requetes HTTP manuelles confirmant que les assets
deplaces repondent en 200 au nouvel emplacement et 404 a l'ancien.
SKIP=djlint : backlog H021 (styles inline) deja documente comme dette
assumee dans CODE_QUALITY.md section 6, aucun template touche par ce
commit au-dela d'un deplacement de fichier.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>