Files
Forge-Engine/routes/document/document_theme_preview.py
williamandClaude Sonnet 5 746feb3796 Ajoute l'alignement vertical du contenu d'une page, réglable depuis l'onglet "Pages"
Nouvelle colonne _document_pages.vertical_align (top/center/bottom,
"top" par défaut, migration incluse pour les supports existants).
Quand l'onglet "Pages" du panneau gauche est actif, le panneau
Propriétés (droite) affiche maintenant l'alignement de la page active
au lieu des propriétés d'un élément — un contrôle segmenté qui persiste
via une nouvelle route dédiée et met à jour le canevas immédiatement.

Le contenu-seed des thèmes porte désormais aussi ce réglage par page
(seed_pages devient une liste de {vertical_align, blocks} plutôt qu'une
liste de listes de blocs) : la page de titre du thème "Sécurité
Incendie" est centrée verticalement, comme demandé, cohérente avec la
maquette d'origine. L'aperçu de thème (iframe de la modale) reflète
aussi ce réglage par page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 10:24:48 +02:00

34 lines
1.6 KiB
Python

from flask import render_template
from werkzeug.exceptions import NotFound
import document_engine
from core.flask_app import app
@app.route("/document/<slug>/theme/<theme_id>/preview")
def document_theme_preview(slug: str, theme_id: str) -> str:
"""Aperçu isolé (destiné à un <iframe>, voir la modale "Utiliser un
modèle" dans static/document/js/document-editor.js) de TOUTES les
pages de démonstration d'un thème — RÉELLEMENT rendues par le moteur
(document_engine.render_document), jamais une image statique ou une
resucée manuelle du CSS : ce qui est prévisualisé est EXACTEMENT ce
qui s'affichera une fois le thème appliqué. La navigation entre pages
(retour utilisateur du 24/09/2026 : "je dois pouvoir naviguer dans
l'aperçu pour voir toutes les pages") se fait entièrement côté
client dans le template, jamais par un nouvel aller-retour serveur —
toutes les pages sont déjà rendues ici en une fois. `slug` sert
uniquement à la garde de propriété (core/auth_guard.py, générique
sur toute route <slug>) — l'aperçu ne dépend d'aucune donnée de CE
support."""
theme = document_engine.get_document_theme_entry(theme_id)
if theme is None:
raise NotFound
pages = [
{
"vertical_align": seed_page.get("vertical_align", "top"),
"html": document_engine.render_document(document_engine.seed_blocks_to_elements(seed_page["blocks"])),
}
for seed_page in theme["seed_pages"]
]
return render_template("document/document_theme_preview.html", theme=theme, pages=pages)