Fusionne les 4 pages de création dans le dashboard, retire le titre/BDD
Suite de la demande précédente : les 4 pages autrefois listées dans la barre de navigation n'existent plus en tant que pages séparées — tout vit désormais dans les onglets du tableau de bord (commit précédent) ou, pour la création d'un objet, dans un panneau déplaçable. - screens_list.html + sa route (screens_list) : supprimés (l'onglet "Écrans du jeu" du dashboard couvre déjà tout : créer, réordonner, éditer, supprimer). screen_new/screen_move/screen_delete redirigent maintenant vers le dashboard (tab=screens) au lieu de cette page. - element_types.html : supprimé, mais la route element_types est conservée (GET redirige vers le dashboard, POST — utilisé par la barre de création repliable de l'onglet "Éléments de jeu" — continue de fonctionner). element_type_edit/element_type_delete redirigent aussi vers le dashboard. - game_variables.html + sa route (game_variables) : supprimés (l'onglet "Variables" du dashboard couvre déjà tout). create_global_var/ global_var_edit/global_var_delete redirigent vers le dashboard (tab=variables) au lieu de cette page. - object_form.html : supprimé. La route object_new (POST) est conservée pour traiter la soumission du panneau — voir plus bas — mais ne rend plus de page pour un GET (redirige vers le dashboard). Nouveau panneau déplaçable "Nouvel objet" sur le dashboard (bouton "+ Nouvel objet" de l'onglet Objets) : réutilise .floatPanel/ .floatPanelHeader/.floatPanelBody (déjà utilisées dans l'éditeur d'écran) avec une nouvelle variante centrée (.floatPanel--center) et son propre glisser-déposer minimal (pas de position persistée, contrairement aux panneaux de l'éditeur d'écran — inutile pour un panneau ouvert ponctuellement). Contenu et script (object_form.js) repris tels quels de l'ancienne page. base.html : la barre de navigation du jeu n'a donc plus que 2 liens — "📊 Tableau de bord" (nouveau) et "▶️ Jouer" (toujours en dernier). game_dashboard.html : titre du jeu et chemin de la base de données retirés (redondants avec le nom déjà visible dans l'onglet du navigateur/la barre de nav). Les liens "crée-en un"/"gérer les variables" dans l'éditeur d'écran (screen_edit.html) pointent maintenant vers le dashboard avec le bon onglet (?tab=...), lu et appliqué au chargement de la page (switchDashTab() côté JS). 2 tests (test_screens_and_elements.py) mis à jour : ils vérifiaient le contenu des pages supprimées (element-types, screens) — adaptés pour vérifier la même chose sur le dashboard, qui porte maintenant cette information. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
65450a5719
commit
d875557254
@@ -9,4 +9,4 @@ from core.flask_app import app
|
||||
def element_type_delete(slug, element_type_id):
|
||||
if screens.element_type_usage_count(slug, element_type_id) == 0:
|
||||
screens.delete_element_type(slug, element_type_id)
|
||||
return redirect(url_for("element_types", slug=slug))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="element_types"))
|
||||
|
||||
@@ -13,4 +13,4 @@ def element_type_edit(slug, element_type_id):
|
||||
name = request.form.get("name", "").strip() or None
|
||||
bound_definition_id = request.form.get("bound_definition_id") or None
|
||||
screens.update_element_type(slug, element_type_id, name=name, bound_definition_id=bound_definition_id)
|
||||
return redirect(url_for("element_types", slug=slug))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="element_types"))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
from flask import render_template, request, redirect, url_for
|
||||
from flask import request, redirect, url_for
|
||||
|
||||
import db
|
||||
import screens
|
||||
|
||||
from core.flask_app import app
|
||||
@@ -8,18 +7,16 @@ from core.flask_app import app
|
||||
|
||||
@app.route("/game/<slug>/element-types", methods=["GET", "POST"])
|
||||
def element_types(slug):
|
||||
game = db.game_meta(slug)
|
||||
"""La création/gestion d'un élément de jeu se fait désormais depuis
|
||||
l'onglet "Éléments de jeu" du tableau de bord (voir game_dashboard.html)
|
||||
plutôt qu'une page dédiée — cette route ne fait donc plus que traiter la
|
||||
création (barre de création repliable de cet onglet). Un GET direct
|
||||
redirige vers le tableau de bord."""
|
||||
if request.method == "POST":
|
||||
name = request.form.get("name", "").strip()
|
||||
icon = request.form.get("icon", "").strip() or "🧩"
|
||||
bound_definition_id = request.form.get("bound_definition_id") or None
|
||||
if name:
|
||||
screens.create_element_type(slug, name, icon, bound_definition_id)
|
||||
return redirect(url_for("element_types", slug=slug))
|
||||
types = screens.list_element_types(slug)
|
||||
usage = {t["id"]: screens.element_type_usage_count(slug, t["id"]) for t in types}
|
||||
definitions = db.list_definitions(slug)
|
||||
return render_template(
|
||||
"element_types.html", game=game, types=types, usage=usage, widgets=screens.WIDGETS,
|
||||
definitions=definitions,
|
||||
)
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="element_types"))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="element_types"))
|
||||
|
||||
@@ -24,5 +24,5 @@ def game_dashboard(slug):
|
||||
"game_dashboard.html", game=game, definitions=definitions,
|
||||
screen_list=screen_list, element_types=element_types,
|
||||
element_type_usage=element_type_usage, variables=variables,
|
||||
variable_types=db.GLOBAL_VARIABLE_TYPES,
|
||||
variable_types=db.GLOBAL_VARIABLE_TYPES, field_types=db.FIELD_TYPES,
|
||||
)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
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
|
||||
|
||||
@@ -15,4 +15,4 @@ def create_global_var(slug):
|
||||
default_value = request.form.get("default_value") or ""
|
||||
if name:
|
||||
db.create_global_variable(slug, name, var_type, default_value)
|
||||
return redirect(url_for("game_variables", slug=slug))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="variables"))
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
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,
|
||||
)
|
||||
@@ -8,4 +8,4 @@ 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))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="variables"))
|
||||
|
||||
@@ -10,4 +10,4 @@ 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))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="variables"))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from flask import render_template, request, redirect, url_for
|
||||
from flask import request, redirect, url_for
|
||||
|
||||
import db
|
||||
|
||||
@@ -8,20 +8,16 @@ from .parse_field_rows import _parse_field_rows
|
||||
|
||||
@app.route("/game/<slug>/objects/new", methods=["GET", "POST"])
|
||||
def object_new(slug):
|
||||
game = db.game_meta(slug)
|
||||
existing_definitions = db.list_definitions(slug)
|
||||
|
||||
"""La création d'un objet se fait désormais depuis un panneau déplaçable
|
||||
sur le tableau de bord du jeu (voir game_dashboard.html, formulaire
|
||||
#objectForm) plutôt qu'une page dédiée — cette route ne fait donc plus
|
||||
que traiter la soumission de CE formulaire. Un GET direct (ex. lien
|
||||
externe obsolète) redirige simplement vers le tableau de bord."""
|
||||
if request.method == "POST":
|
||||
name = request.form.get("object_name", "").strip()
|
||||
fields = _parse_field_rows(request.form)
|
||||
|
||||
if name and fields:
|
||||
definition_id = db.create_definition(slug, name, fields)
|
||||
return redirect(url_for("object_view", slug=slug, definition_id=definition_id))
|
||||
|
||||
return render_template(
|
||||
"object_form.html",
|
||||
game=game,
|
||||
existing_definitions=existing_definitions,
|
||||
field_types=db.FIELD_TYPES,
|
||||
)
|
||||
return redirect(url_for("game_dashboard", slug=slug))
|
||||
|
||||
@@ -1 +1 @@
|
||||
from . import screens_list, screens_new, screen_rename, screen_move, screen_delete, screen_edit, screen_set_aspect
|
||||
from . import screens_new, screen_rename, screen_move, screen_delete, screen_edit, screen_set_aspect
|
||||
|
||||
@@ -9,6 +9,6 @@ from core.flask_app import app
|
||||
def screen_delete(slug, screen_id):
|
||||
referencing = screens.screens_referencing(slug, screen_id)
|
||||
if referencing:
|
||||
return redirect(url_for("screens_list", slug=slug, blocked_screen=screen_id))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="screens", blocked_screen=screen_id))
|
||||
screens.delete_screen(slug, screen_id)
|
||||
return redirect(url_for("screens_list", slug=slug))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="screens"))
|
||||
|
||||
@@ -9,4 +9,4 @@ from core.flask_app import app
|
||||
def screen_move(slug, screen_id):
|
||||
direction = -1 if request.form.get("direction") == "up" else 1
|
||||
screens.move_screen(slug, screen_id, direction)
|
||||
return redirect(url_for("screens_list", slug=slug))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="screens"))
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
from flask import render_template
|
||||
|
||||
import db
|
||||
import screens
|
||||
|
||||
from core.flask_app import app
|
||||
|
||||
|
||||
@app.route("/game/<slug>/screens")
|
||||
def screens_list(slug):
|
||||
game = db.game_meta(slug)
|
||||
return render_template("screens_list.html", game=game, screen_list=screens.list_screens(slug))
|
||||
@@ -11,4 +11,4 @@ def screens_new(slug):
|
||||
if name:
|
||||
screen_id = screens.create_screen(slug, name)
|
||||
return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id))
|
||||
return redirect(url_for("screens_list", slug=slug))
|
||||
return redirect(url_for("game_dashboard", slug=slug, tab="screens"))
|
||||
|
||||
Reference in New Issue
Block a user