Remplace la création inline de variable par une page de gestion dédiée, redesign du tableau de bord du jeu

Retrait de la création rapide de variable globale depuis le sélecteur de
la Condition de visibilité (bouton "+ Créer") : une variable globale est
désormais gérée comme un objet "jeu" à part entière, avec une vraie page
CRUD ("Variables", nouvelle entrée du menu de gauche) - création, édition
du type/valeur, suppression. Le nom reste volontairement immuable après
création (c'est par ce nom qu'une condition de visibilité ou une action
"Modifier une variable" la référence - la renommer casserait ces réglages
en silence), d'où db.update_global_variable qui ne touche que type/valeur.

Redesign du tableau de bord du jeu (game_dashboard.html) en deux
colonnes : à gauche tout ce qu'on peut créer (écrans, éléments de jeu,
variables, jouer, nouvel objet) plus les paramètres du jeu (renommer/
supprimer) ; à droite ce qui a déjà été créé (objets définis). Remplace
les cartes Bulma par le système de mise en page compact déjà défini dans
style.css (.twoCol/.listRow/.dangerZone/.addBtn) mais jamais utilisé
jusqu'ici - plus dense et cohérent avec le reste de l'éditeur.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-08-25 10:00:35 +02:00
co-authored by Claude Sonnet 5
parent c04bc0b926
commit 11a2d397e8
12 changed files with 227 additions and 105 deletions
+3
View File
@@ -1 +1,4 @@
from .create_global_var import create_global_var
from .game_variables import game_variables
from .global_var_edit import global_var_edit
from .global_var_delete import global_var_delete
+8 -9
View File
@@ -1,19 +1,18 @@
from flask import jsonify, request
from flask import request, redirect, url_for
import db
from core.flask_app import app
@app.route("/game/<slug>/global-vars", methods=["POST"])
@app.route("/game/<slug>/variables/new", methods=["POST"])
def create_global_var(slug):
"""Création rapide d'une variable globale depuis le sélecteur "Variable"
de la Condition de visibilité (voir screen_edit.html, openVisCondVariablePrompt) —
évite d'avoir à quitter le panneau de propriétés pour en créer une."""
"""Depuis la page de gestion des variables (game_variables.html) —
idempotent par nom (voir db.create_global_variable), donc sans risque en
cas de double soumission."""
name = (request.form.get("name") or "").strip()
var_type = request.form.get("type") or "texte"
default_value = request.form.get("default_value") or ""
if not name:
return jsonify({"ok": False, "error": "Nom manquant"}), 400
var_id = db.create_global_variable(slug, name, var_type, default_value)
return jsonify({"ok": True, "id": var_id, "name": name})
if name:
db.create_global_variable(slug, name, var_type, default_value)
return redirect(url_for("game_variables", slug=slug))
+19
View File
@@ -0,0 +1,19 @@
from flask import render_template
import db
from core.flask_app import app
@app.route("/game/<slug>/variables")
def game_variables(slug):
"""Page de gestion des variables globales (voir db/global_vars/) : un
objet "jeu" implicite dont les propriétés/valeurs sont visibles partout
(condition de visibilité, action "Modifier une variable"), plutôt
qu'attachées à un objet de données précis."""
game = db.game_meta(slug)
variables = db.list_global_variables(slug)
return render_template(
"game_variables.html", game=game, variables=variables,
variable_types=db.GLOBAL_VARIABLE_TYPES,
)
+11
View File
@@ -0,0 +1,11 @@
from flask import redirect, url_for
import db
from core.flask_app import app
@app.route("/game/<slug>/variables/<int:var_id>/delete", methods=["POST"])
def global_var_delete(slug, var_id):
db.delete_global_variable_by_id(slug, var_id)
return redirect(url_for("game_variables", slug=slug))
+13
View File
@@ -0,0 +1,13 @@
from flask import request, redirect, url_for
import db
from core.flask_app import app
@app.route("/game/<slug>/variables/<int:var_id>/edit", methods=["POST"])
def global_var_edit(slug, var_id):
var_type = request.form.get("type") or "texte"
value = request.form.get("value") or ""
db.update_global_variable(slug, var_id, var_type, value)
return redirect(url_for("game_variables", slug=slug))