92 lines
3.4 KiB
HTML
92 lines
3.4 KiB
HTML
{% extends "base.html" %}
|
|
{% from "partials/macros.html" import avatar, badge_chip %}
|
|
{% block title %}Highscoreboard · Putzliga{% endblock %}
|
|
{% block page_title %}Highscoreboard{% endblock %}
|
|
{% block content %}
|
|
<section class="hero-grid">
|
|
<article class="hero-card">
|
|
<p class="eyebrow">Aktueller Monat</p>
|
|
<h2>{{ current_label }}</h2>
|
|
<p>Aufgabenpunkte und Badge-Boni zählen nur im aktuellen Monat. Zum Monatswechsel landet alles im Archiv und die Liga startet wieder bei null.</p>
|
|
</article>
|
|
<article class="panel highlight-panel">
|
|
<p class="eyebrow">Archiv</p>
|
|
<form method="get" class="inline-form">
|
|
<select name="archive">
|
|
{% for year, month in archive_options %}
|
|
{% set archive_value = year ~ '-' ~ '%02d'|format(month) %}
|
|
<option value="{{ archive_value }}" {% if selected_archive == archive_value %}selected{% endif %}>{{ month|month_name }} {{ year }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<button type="submit" class="button button--secondary">Anzeigen</button>
|
|
</form>
|
|
</article>
|
|
</section>
|
|
|
|
<section class="scoreboard">
|
|
{% for row in current_rows %}
|
|
<article class="score-row {% if row.rank == 1 %}score-row--leader{% endif %}">
|
|
<div class="score-row__head">
|
|
<div class="score-row__person">
|
|
<span class="rank-badge">#{{ row.rank }}</span>
|
|
{{ avatar(row.user) }}
|
|
<div>
|
|
<strong>{{ row.user.name }}</strong>
|
|
<p>{{ row.completed_tasks_count }} erledigte Aufgaben</p>
|
|
</div>
|
|
</div>
|
|
<div class="score-row__points">
|
|
<strong>{{ row.total_points }}</strong>
|
|
<span>Punkte</span>
|
|
</div>
|
|
</div>
|
|
<div class="score-bar">
|
|
<span style="width: {{ 0 if max_points == 0 else (row.total_points / max_points * 100) }}%"></span>
|
|
</div>
|
|
<div class="score-row__meta">
|
|
<span>Basis: {{ row.base_points }}</span>
|
|
<span>Badges: +{{ row.bonus_points }}</span>
|
|
</div>
|
|
{% if row.badges %}
|
|
<div class="badge-cloud">
|
|
{% for badge in row.badges %}
|
|
{{ badge_chip(badge) }}
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
{% if row.user.awarded_badges %}
|
|
<div class="badge-cloud">
|
|
{% for badge in row.user.awarded_badges[:3] %}
|
|
{{ badge_chip(badge) }}
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
</article>
|
|
{% else %}
|
|
<div class="empty-state">Noch keine Punkte in diesem Monat.</div>
|
|
{% endfor %}
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<p class="eyebrow">Monatsarchiv</p>
|
|
<h2>{{ archive_label or 'Noch kein Archiv' }}</h2>
|
|
<div class="archive-list">
|
|
{% for row in archived_rows %}
|
|
<article class="archive-row">
|
|
<div class="archive-row__left">
|
|
<span class="rank-badge">#{{ row.rank }}</span>
|
|
{{ avatar(row.user) }}
|
|
<strong>{{ row.user.name }}</strong>
|
|
</div>
|
|
<div class="archive-row__right">
|
|
<span>{{ row.total_points }} Punkte</span>
|
|
<small>{{ row.completed_tasks_count }} Aufgaben</small>
|
|
</div>
|
|
</article>
|
|
{% else %}
|
|
<div class="empty-state">Sobald ein Monat archiviert wurde, taucht er hier auf.</div>
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|