object_form.js declared top-level const bindings, which pjax replays verbatim on every visit — the second visit threw "already declared" and silently broke "Ajouter un champ"/"Créer l'objet". Wrapped it in an IIFE. Also renamed the generic name="name" rename-game field to name="game_name" with autocomplete off, since browsers were autofilling it with unrelated previously-typed values.
62 lines
2.7 KiB
HTML
62 lines
2.7 KiB
HTML
{% extends "base.html" %}
|
||
{% block title %}{{ game.name }} — Forge Engine{% endblock %}
|
||
{% block breadcrumb %}<span class="crumb">{{ game.name }}</span>{% endblock %}
|
||
{% block content %}
|
||
<h1>{{ game.name }}</h1>
|
||
<p class="hint">Base de données : projects/{{ game.slug }}/game.db</p>
|
||
|
||
<div class="fieldRow" style="margin:14px 0;">
|
||
<a class="listRow rowLink" style="flex:1;" href="{{ url_for('screens_list', slug=game.slug) }}">
|
||
<div class="rowTitle">🖥️ Écrans du jeu</div>
|
||
<div class="rowSub">Créer et enchaîner les écrans jouables (accueil, formulaires, scènes...)</div>
|
||
</a>
|
||
<a class="listRow rowLink" style="flex:1;" href="{{ url_for('element_types', slug=game.slug) }}">
|
||
<div class="rowTitle">🧩 Éléments de jeu</div>
|
||
<div class="rowSub">Catalogue réutilisable (Personnage, Outil, IA...)</div>
|
||
</a>
|
||
<a class="listRow rowLink" style="flex:1;" href="{{ url_for('game_play', slug=game.slug) }}" target="_blank">
|
||
<div class="rowTitle">▶️ Jouer</div>
|
||
<div class="rowSub">Aperçu jouable du jeu</div>
|
||
</a>
|
||
</div>
|
||
|
||
<a class="listRow rowLink" href="{{ url_for('object_new', slug=game.slug) }}">
|
||
<div class="rowTitle">➕ Définir un nouvel objet</div>
|
||
<div class="rowSub">Comme une table de base de données : un nom, et des champs typés</div>
|
||
</a>
|
||
|
||
<h2>Objets définis</h2>
|
||
{% if definitions %}
|
||
<div class="list">
|
||
{% for d in definitions %}
|
||
<div class="listRow listRowFlex">
|
||
<a class="rowLink" href="{{ url_for('object_view', slug=game.slug, definition_id=d.id) }}">
|
||
<div class="rowTitle">{{ d.name }}</div>
|
||
<div class="rowSub">table SQL : {{ d.table_name }}</div>
|
||
</a>
|
||
<div class="rowActions">
|
||
<a class="smallBtn" href="{{ url_for('object_edit', slug=game.slug, definition_id=d.id) }}" title="Modifier cet objet">✏️</a>
|
||
</div>
|
||
</div>
|
||
{% endfor %}
|
||
</div>
|
||
{% else %}
|
||
<p class="hint">Aucun objet défini pour l'instant — un objet, c'est comme une table de base de données : un nom, et des champs typés.</p>
|
||
{% endif %}
|
||
|
||
<div class="dangerZone">
|
||
<h3>Paramètres du jeu</h3>
|
||
<form method="post" action="{{ url_for('game_rename', slug=game.slug) }}" class="fieldRow" style="align-items:flex-end;">
|
||
<div>
|
||
<label for="rename">Renommer le jeu</label>
|
||
<input type="text" id="rename" name="game_name" value="{{ game.name }}" required autocomplete="off">
|
||
</div>
|
||
<button type="submit">Renommer</button>
|
||
</form>
|
||
<form method="post" action="{{ url_for('game_delete', slug=game.slug) }}" style="margin-top:12px;"
|
||
onsubmit="return confirm('Supprimer définitivement le jeu « {{ game.name }} », son dossier et sa base de données ? Cette action est irréversible.');">
|
||
<button type="submit" class="danger">🗑️ Supprimer ce jeu</button>
|
||
</form>
|
||
</div>
|
||
{% endblock %}
|