Trois demandes distinctes de l'utilisateur, regroupées car elles touchent
toutes à la navigation d'un jeu :
1. Fil d'Ariane retiré (devenu redondant avec la barre de navigation du
jeu ajoutée au commit précédent) : bloc breadcrumb_wrap retiré de
base.html, et son override ({% block breadcrumb %}) retiré des 9
templates qui le définissaient encore. .breadcrumbBar (CSS) retiré,
y compris des règles flex:0 0 auto de body.objectEditBody/builderBody.
2. Liens de .gameNavBar centrés (justify-content:center).
3. "Jouer" déplacé en dernier lien (c'est une action à part — ouvre
l'aperçu jouable dans un nouvel onglet — pas un éditeur de plus comme
les 4 autres).
4. game_dashboard.html devient un vrai tableau de bord : une grille de
cartes (Écrans/Objets/Éléments de jeu/Variables), chacune listant les
entrées existantes avec un accès direct (clic = éditeur concerné) et
un lien "Gérer" vers la page dédiée pour créer/réorganiser. Remplace
l'ancien panneau "Créer" (redondant avec la barre de navigation
persistante) et la simple table "Objets définis". routes/games/
game_dashboard.py alimente maintenant aussi screen_list, element_types
(+ usage) et variables, en réutilisant list_screens/
list_element_types/element_type_usage_count/list_global_variables déjà
utilisés ailleurs.
Vérifié en rendant toutes les pages concernées via le client de test
Flask : barre de nav présente partout où un `game` est dans le contexte
(absente sur l'accueil), fil d'Ariane absent partout, ordre des liens
avec "Jouer" en dernier.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
72 lines
3.4 KiB
HTML
72 lines
3.4 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Variables — {{ game.name }}{% endblock %}
|
|
{% block content_class %}content-wide content-objectEdit{% endblock %}
|
|
{% block body_class %}objectEditBody{% endblock %}
|
|
{% block content %}
|
|
<h1 class="title">Variables globales</h1>
|
|
<p class="hint mb-4">Des propriétés/valeurs communes à tout le jeu (pas attachées à un objet de données précis) — utile par exemple pour une porte ouverte ou non, un niveau débloqué... Une variable peut être lue dans une "Condition de visibilité" (propriétés d'un élément) et modifiée par une action "Modifier une variable" (Logique de la scène).</p>
|
|
|
|
<div class="twoCol">
|
|
<div class="colLeft">
|
|
<h2>Créer</h2>
|
|
<form method="post" action="{{ url_for('create_global_var', slug=game.slug) }}" class="card">
|
|
<div class="formField">
|
|
<label for="new-var-name">Nom</label>
|
|
<input type="text" id="new-var-name" name="name" placeholder="ex. porte_ouverte" required autocomplete="off">
|
|
</div>
|
|
<div class="formField">
|
|
<label for="new-var-type">Type</label>
|
|
<select id="new-var-type" name="type">
|
|
{% for key, val in variable_types.items() %}
|
|
<option value="{{ key }}">{{ val.label }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="formField">
|
|
<label for="new-var-value">Valeur de départ</label>
|
|
<input type="text" id="new-var-value" name="default_value" placeholder="ex. 0" autocomplete="off">
|
|
</div>
|
|
<div class="actionsRow"><button type="submit" class="primary">+ Créer la variable</button></div>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="colRight">
|
|
<h2>Variables définies</h2>
|
|
{% if variables %}
|
|
{% for v in variables %}
|
|
<form method="post" action="{{ url_for('global_var_edit', slug=game.slug, var_id=v.id) }}" id="varEditForm{{ v.id }}"></form>
|
|
{% endfor %}
|
|
<div class="fieldsTableWrap">
|
|
<table class="table is-fullwidth is-hoverable fieldsTable">
|
|
<thead><tr><th>Nom</th><th>Type</th><th>Valeur</th><th></th></tr></thead>
|
|
<tbody>
|
|
{% for v in variables %}
|
|
<tr>
|
|
<td>{{ v.name }}</td>
|
|
<td>
|
|
<select form="varEditForm{{ v.id }}" name="type" aria-label="Type de « {{ v.name }} »">
|
|
{% for key, val in variable_types.items() %}
|
|
<option value="{{ key }}" {{ 'selected' if v.type == key else '' }}>{{ val.label }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</td>
|
|
<td><input type="text" form="varEditForm{{ v.id }}" name="value" value="{{ v.value or '' }}" aria-label="Valeur de « {{ v.name }} »"></td>
|
|
<td class="fieldsTableActions">
|
|
<button type="submit" form="varEditForm{{ v.id }}" class="button is-small">Enregistrer</button>
|
|
<form method="post" action="{{ url_for('global_var_delete', slug=game.slug, var_id=v.id) }}"
|
|
onsubmit="return confirm('Supprimer la variable « {{ v.name }} » ? Toute condition de visibilité ou action qui la référence cessera de fonctionner.');">
|
|
<button type="submit" class="button is-small is-danger">🗑️</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% else %}
|
|
<p class="hint">Aucune variable pour l'instant — crée la première à gauche.</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|