←/→ et contrôles à l'écran changent de projet; navigation manuelle = pause de rotation 90 s; Espace = pause franche avec badge. La position survit aux rechargements via sessionStorage (le cycle de 12 projets x 30 s dépassait le refresh de sécurité de 5 min: le mur semblait figé). Fix: l'écoute SSE utilisait onmessage, inerte pour les événements nommés 'gitea' du hub.
79 lines
3.2 KiB
HTML
79 lines
3.2 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Kanbante — Wallboard</title>
|
||
<link rel="stylesheet" href="/static/css/style.css">
|
||
</head>
|
||
<body class="wall-body">
|
||
{% if slides %}
|
||
<div class="wall-stage" id="wall-stage">
|
||
{% for slide in slides %}
|
||
<section class="wall-slide{% if loop.first %} active{% endif %}">
|
||
<header class="wall-head">
|
||
<div>
|
||
<div class="wall-kicker">📂 Projet</div>
|
||
<h1 class="wall-project">{{ slide.full_name }}</h1>
|
||
</div>
|
||
<div class="wall-clock">
|
||
<div class="wall-time" data-clock>--:--</div>
|
||
<div class="wall-date" data-date></div>
|
||
{% if not single and slides|length > 1 %}
|
||
<div class="wall-rotation">{{ loop.index }} / {{ slides|length }}</div>
|
||
{% endif %}
|
||
</div>
|
||
</header>
|
||
|
||
<div class="wall-counts">
|
||
{% for col in columns %}
|
||
<div class="wall-count" style="--col: {{ column_colors[col] }}">
|
||
<span class="wall-count-n">{{ slide.counts[col] }}</span>
|
||
<span class="wall-count-l">{{ column_labels[col] }}</span>
|
||
</div>
|
||
{% endfor %}
|
||
</div>
|
||
|
||
{% if slide.cards %}
|
||
<ul class="wall-cards">
|
||
{% for card in slide.cards %}
|
||
<li class="wall-card">
|
||
<span class="wall-card-col" style="--col: {{ column_colors[card.column] }}">{{ card.column_label }}</span>
|
||
<span class="wall-card-title">#{{ card.number }} · {{ card.title }}</span>
|
||
{% if card.age_days is not none and card.age_days >= 1 %}
|
||
<span class="wall-card-age{% if card.aging %} hot{% endif %}">⏳ {{ card.age_days }} j</span>
|
||
{% endif %}
|
||
</li>
|
||
{% endfor %}
|
||
</ul>
|
||
{% else %}
|
||
<p class="wall-idle">🌿 Rien en vol pour le moment — tout est au Backlog ou terminé.</p>
|
||
{% endif %}
|
||
|
||
<footer class="wall-foot">
|
||
<span>✅ Fermées aujourd'hui : <strong>{{ slide.closed_today }}</strong></span>
|
||
<span>📋 Ouvertes : <strong>{{ slide.open_total }}</strong></span>
|
||
<span class="wall-live">● EN DIRECT</span>
|
||
</footer>
|
||
</section>
|
||
{% endfor %}
|
||
</div>
|
||
{% if not single and slides|length > 1 %}
|
||
<nav class="wall-nav" aria-label="Navigation des projets">
|
||
<button type="button" class="wall-nav-btn" id="wall-prev" title="Projet précédent (←)">❮</button>
|
||
<div class="wall-dots" id="wall-dots"></div>
|
||
<button type="button" class="wall-nav-btn" id="wall-next" title="Projet suivant (→)">❯</button>
|
||
<div class="wall-paused" id="wall-paused" hidden>⏸️ Rotation en pause — Espace pour reprendre</div>
|
||
</nav>
|
||
{% endif %}
|
||
{% else %}
|
||
<div class="wall-empty">
|
||
<h1>🖥️ Wallboard</h1>
|
||
<p>Aucun projet actif à afficher{% if single %} pour ce dépôt{% endif %}.</p>
|
||
<p class="wall-empty-hint">Astuce : <code>/wall?repo=Proprietaire/depot</code> fige un seul projet.</p>
|
||
</div>
|
||
{% endif %}
|
||
<script src="/static/js/wall.js"></script>
|
||
</body>
|
||
</html>
|