from flask import request, redirect, url_for import screens from core.flask_app import app from core.sprite_gate import forbid_admin_only_character @app.route("/game//screens//elements/add", methods=["POST"]) def element_add(slug, screen_id): widget = request.form.get("widget", "conteneur") from_catalogue = widget == "__catalogue__" element_type_id = request.form.get("element_type_id") or None if from_catalogue else None if from_catalogue and not element_type_id: return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id)) if from_catalogue: types = {t["id"]: t for t in screens.list_element_types(slug)} et = types.get(int(element_type_id)) widget = et["default_widget"] if et else "conteneur" new_id = screens.add_element(slug, screen_id, widget, element_type_id) icon_slug = request.form.get("icon_class") if widget == "icone" and icon_slug in screens.FONTAWESOME_ICONS: # Posé depuis la galerie d'icônes (voir le panneau de propriétés, # section "Icônes") : l'icône choisie remplace celle posée par # défaut à la création plutôt que de repartir d'une icône neutre que # l'utilisateur devrait ensuite changer manuellement. screens.save_element_controls(slug, new_id, {"ctrl_icon_class": icon_slug}) if widget == "personnage": # Posé depuis la galerie "🎭 Personnages" (voir addPersonnageElement() # dans tree-panels.js) : remplace le personnage Forge par défaut # (male-adventurer, voir default_style_for_widget.py) par celui # réellement cliqué. forge_character = request.form.get("forge_character") if forge_character and forge_character in screens.SPRITE_LIBRARY: forbid_admin_only_character(forge_character) screens.set_personnage_data(slug, new_id, {"source": "forge", "forge_character": forge_character}) return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id, selected=new_id))