Audit complet de mise en forme — Image (2e élément du tableau)

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>
This commit is contained in:
william
2026-09-26 12:06:44 +02:00
co-authored by Claude Sonnet 5
parent 6c7675fad0
commit 9ad50c58b8
27 changed files with 1299 additions and 174 deletions
+11 -1
View File
@@ -205,12 +205,22 @@ def support(client: FlaskClient) -> Generator[str, None, None]:
"""Crée un support de formation de test frais via /documents/new
(mirroir de la fixture `game` ci-dessus, pour l'autre type de projet —
entité racine séparée, voir docs/plan/PLAN.md) et le supprime après le
test, quel que soit son résultat."""
test, quel que soit son résultat.
Un support neuf n'a plus aucune page par défaut (retour utilisateur
du 26/09/2026, voir document_engine/pages/pages.md) — cette fixture
lui en crée une par convénience, puisque la quasi-totalité des tests
existants portent sur du contenu et présupposent une première page
"Page 1" déjà là (comme avant ce changement). Les tests qui portent
spécifiquement sur l'état "0 page" créent leur propre support brut
via db.create_support(...) plutôt que d'utiliser cette fixture."""
import db.supports
import document_engine
resp = client.post("/documents/new", data={"name": "pytest_test_support"}, follow_redirects=False)
assert resp.status_code == 302
slug = resp.headers["Location"].rstrip("/").split("/")[-2]
document_engine.add_document_page(slug)
yield slug
if os.path.isdir(db.supports.support_dir(slug)):
db.delete_support(slug)