from flask import jsonify, request from werkzeug.wrappers import Response import document_engine from core.flask_app import app @app.route("/document//render") def document_render(slug: str) -> Response | tuple[Response, int]: """Rendu HTML complet et à jour d'UNE PAGE du document (?page_id=) — appelé par le moteur de layout côté client après toute mutation structurelle (ajout/déplacement/suppression) pour reconstruire le canevas depuis la vérité serveur (recalcul réel des rangées, jamais une simple retouche DOM locale, voir docs/plan/PLAN.md — "recalcul au déplacement"). Le canevas n'affiche jamais qu'une seule page à la fois (voir document_engine/pages/), d'où ce paramètre. `elements` est revalidé (document_engine.sanitize_element_attributes) avant d'être renvoyé au client — même raison que routes/document/ document_edit.py : le panneau Propriétés reçoit `data.elements` directement depuis cette route à chaque rafraîchissement du canevas.""" page_id = request.args.get("page_id", type=int) if page_id is None: return jsonify({"error": "page introuvable"}), 404 page = document_engine.get_document_page(slug, page_id) if page is None: return jsonify({"error": "page introuvable"}), 404 elements = [ {**el, "attributes": document_engine.sanitize_element_attributes(el["kind"], el["attributes"])} for el in document_engine.list_document_elements(slug, page_id) ] return jsonify( { "html": document_engine.render_document(elements), "elements": elements, "vertical_align": page["vertical_align"], } )