Remplace les onglets texte de pages par de vraies vignettes miniatures
Build and deploy / test-python (push) Successful in 7m23s
Build and deploy / test-js (push) Successful in 1m24s
Build and deploy / lint-python (push) Successful in 6m29s
Build and deploy / lint-js (push) Failing after 1m31s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Build and deploy / sonarqube (push) Failing after 5m18s

Les vignettes réutilisent le HTML réellement rendu de chaque page
(CSS scale trick) et sont centrées dans le conteneur du milieu, au
lieu d'une barre pleine largeur.

Corrige au passage deux bugs réels trouvés en écrivant les tests :
- une page contenant un mini-jeu (bouton Suivant/Recommencer) cassait
  le parsing HTML car .docPageThumbCard était un <button> englobant
  un autre <button> ; passage en div role="button" + équivalent
  clavier, contenu copié rendu inert.
- le renommage d'une page par double-clic ne fonctionnait plus du
  tout (sélecteur .docPageTab oublié lors du renommage des classes).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-21 13:50:05 +02:00
co-authored by Claude Sonnet 5
parent ecd483f352
commit 57c4de3d8a
5 changed files with 273 additions and 125 deletions
+25 -6
View File
@@ -1,3 +1,5 @@
from typing import Any
from flask import render_template
import db
@@ -21,6 +23,14 @@ def document_edit(slug: str) -> str:
(voir static/document/js/document-editor.js), jamais un rechargement
complet de cette route.
`rendered_pages` (retour utilisateur du 21/09/2026 : "je préfère
avoir des miniatures") rend le document de CHAQUE page — pas
seulement la page active — pour construire les vraies vignettes
miniatures de la bande au-dessus du canevas (voir templates/document/
document_edit.html, .docPageThumbInner) : un rendu réduit (CSS
`transform: scale()`) du contenu RÉEL de chaque page, pas une carte
générique numéro+titre.
Les attributs de chaque élément sont revalidés (document_engine.
sanitize_element_attributes) avant d'atteindre le client — jamais les
valeurs brutes stockées telles quelles : un élément dont le schéma a
@@ -31,17 +41,26 @@ def document_edit(slug: str) -> str:
support = db.support_meta(slug)
pages = document_engine.list_document_pages(slug)
active_page = pages[0]
elements = [
{**el, "attributes": document_engine.sanitize_element_attributes(el["kind"], el["attributes"])}
for el in document_engine.list_document_elements(slug, active_page["id"])
]
rendered_pages: dict[int, str] = {}
active_elements: list[dict[str, Any]] = []
for page in pages:
page_elements = [
{**el, "attributes": document_engine.sanitize_element_attributes(el["kind"], el["attributes"])}
for el in document_engine.list_document_elements(slug, page["id"])
]
rendered_pages[page["id"]] = document_engine.render_document(page_elements)
if page["id"] == active_page["id"]:
active_elements = page_elements
return render_template(
"document/document_edit.html",
support=support,
pages=pages,
active_page=active_page,
elements=elements,
rendered_document=document_engine.render_document(elements),
elements=active_elements,
rendered_document=rendered_pages[active_page["id"]],
rendered_pages=rendered_pages,
element_library=document_engine.ELEMENT_LIBRARY,
element_kind_labels=document_engine.ELEMENT_KIND_LABELS,
)