web: zadávání z telefonu a zápisník na notebooku
Flask, server-rendered HTML, formuláře přes POST/redirect/GET. Žádný build step, žádný JS framework. - / zakládá hru výběrem známých hráčů v pořadí u stolu - /game/<id> je zadávací pohled: kdo je na tahu, skóre, x/xx, průběžné pořadí, vrácení posledního zápisu - /board/<id> je zápisník po kolech; tahy před vynulováním se škrtnou červeně, sloupec hráče na tahu drží zvýrazňovač - tabule se doptává serveru každé dvě vteřiny a vyměňuje jen hlavičku a zápisník, QR s adresou zůstává mimo obnovovanou část - adresa pro telefon se hledá za běhu, QR se skládá ze čtverečků přímo do SVG, takže není potřeba Pillow - 16 funkčních testů přes Flask test client Vizuálně to stojí na tom, co appka nahrazuje: čtverečkovaný papír, modrá propiska zapisuje, červená škrtá, zvýrazňovač drží tah. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a45a82ae0e
commit
bcbbede258
11 files changed
+1149
No files matched your search
@@ -0,0 +1,57 @@
|
||||
{% if winner %}
|
||||
<div class="win">
|
||||
<p class="eyebrow">Konec hry</p>
|
||||
<h2>{{ winner }}</h2>
|
||||
<p>Vyhrává s {{ totals[winner]|cislo }} body z cílových {{ game.final_score|cislo }}.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="sheet-wrap">
|
||||
<table class="sheet">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="label">Kolo</th>
|
||||
{% for name in game.names %}
|
||||
<th class="{{ 'marked' if name == current }}">{{ name }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in rows %}
|
||||
<tr>
|
||||
<td class="label">{{ row.round }}</td>
|
||||
{% for cell in row.cells %}
|
||||
<td class="{{ 'marked' if game.names[loop.index0] == current }}
|
||||
{{ 'struck' if cell.struck }} {{ 'wiped' if cell.reset }}">
|
||||
{%- if cell.value is none -%}
|
||||
<span class="empty">·</span>
|
||||
{%- elif cell.reset -%}
|
||||
0<small>vynulováno</small>
|
||||
{%- else -%}
|
||||
{{ cell.value|cislo }}
|
||||
{%- endif -%}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td class="label">1</td>
|
||||
{% for name in game.names %}
|
||||
<td class="{{ 'marked' if name == current }}"><span class="empty">·</span></td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="label">Celkem</td>
|
||||
{% for name in game.names %}
|
||||
<td class="{{ 'marked' if name == current }}">
|
||||
{{ totals[name]|cislo }}
|
||||
{%- if streaks[name] %} <span class="ticks">{{ '✕' * streaks[name] }}</span>{% endif %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
Reference in new issue
Block a user