Comportement SYSTÉMATIQUE à chaque création de jeu (admin compris), pas une formalité réservée à l'inscription : /onboarding (routes/onboarding/) devient le point d'entrée unique — 4 cartes retournables (survol = explication au dos), défilement horizontal animé vers le nom du jeu. Un admin y repasse à volonté (pas de project_slug dédié, jamais bloqué/ redirigé vers un projet précédent) ; un compte "user" n'en a plus qu'un créé d'office (routes/auth/register_2fa.py), guidé ici à la place. - db/games/game_type_catalog.py : catalogue des 4 types (Quiz/ Embranchement-escape game/RPG/Créer mon jeu de A à Z), _meta['onboarding_type'] décide du "kind" du premier écran créé et si le tableau de bord complet reste accessible. - routes/games/game_dashboard.py, templates/game_dashboard_simple.html : un type restreint (quiz/embranchement/rpg) voit désormais SON tableau de bord (même route que "custom"), rendu en version simplifiée — juste ses écrans en cartes avec un aperçu RÉEL du contenu (scène mise à l'échelle par container query CSS, adaptée à la largeur réelle de la carte). "+ Ajouter un écran" n'y propose pas de choix de type : imposé par le projet (routes/screens/screens_new.py), verrouillé aussi côté serveur. - core/auth_guard.py : plus de blocage de game_dashboard par type — la restriction se fait au rendu, pas à l'accès à la route. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
55 lines
2.4 KiB
HTML
55 lines
2.4 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Forge Engine — Mes jeux{% endblock %}
|
|
{% block content_class %}content-wide content-objectEdit{% endblock %}
|
|
{% block body_class %}objectEditBody{% endblock %}
|
|
{% block content %}
|
|
<div class="dashPanelHeader">
|
|
<h2 class="title is-4 mb-0">Mes jeux</h2>
|
|
<span class="forge-badge">{{ games|length }} jeu{{ 's' if games|length != 1 else '' }}</span>
|
|
</div>
|
|
|
|
<div class="twoCol">
|
|
<div class="colLeft">
|
|
<h2>Créer un jeu</h2>
|
|
<!-- Onboarding guidé (voir routes/onboarding/onboarding_new.py) :
|
|
comportement SYSTÉMATIQUE à chaque création de jeu, pas une
|
|
formalité réservée à l'inscription — un admin y repasse à
|
|
volonté (illimité, pas de project_slug dédié qui bloquerait le
|
|
retour). Choisir un type ici, ce n'est pas juste pour un compte
|
|
"user" : ça prépare aussi le jour où un admin (ou un compte
|
|
payant multi-projet) gère plusieurs jeux de types différents. -->
|
|
<div class="card">
|
|
<p class="hint" style="margin-top:0;">Choisis un type de jeu, nomme-le : Forge Engine crée le projet et t'envoie directement sur l'éditeur adapté.</p>
|
|
<div class="actionsRow"><a href="{{ url_for('onboarding_new') }}" class="button primary">+ Créer un jeu</a></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="colRight">
|
|
<h2>Jeux existants</h2>
|
|
{% if games %}
|
|
<div class="fieldsTableWrap">
|
|
<table class="table is-fullwidth is-hoverable fieldsTable">
|
|
<thead><tr><th>Nom</th><th>Dossier</th><th></th></tr></thead>
|
|
<tbody>
|
|
{% for g in games %}
|
|
<tr>
|
|
<td><a href="{{ url_for('game_dashboard', slug=g.slug) }}">{{ g.name }}</a></td>
|
|
<td class="has-text-grey">projects/{{ g.slug }}/</td>
|
|
<td class="fieldsTableActions">
|
|
<form method="post" action="{{ url_for('game_delete', slug=g.slug) }}"
|
|
onsubmit="return confirm('Supprimer définitivement le jeu « {{ g.name }} » et tout son contenu (dossier + base de données) ?');">
|
|
<button type="submit" class="button is-small is-danger" title="Supprimer ce jeu">🗑️</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% else %}
|
|
<p class="hint">Aucun jeu pour l'instant — crée le premier à gauche.</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|