From 204f0da7426738ac6bb0d68be57e305690cde23c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Pracha=C5=99?= <jan.prachar@gmail.com>
Date: Mon, 23 May 2022 19:27:55 +0200
Subject: [PATCH] =?UTF-8?q?org=5Fround:=20P=C5=99ed=C4=9Blan=C3=A1=20str?=
 =?UTF-8?q?=C3=A1nka=20kola?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

 * Tabulka s jednotlivými soutěžemi / podoblastmi je hned vlevo nahoře.
 * Metadata ke kolu jsou rozdělena do tří panelů na pravé straně. Každý
   panel mé kontextově odpovídající tlačítka na další akce.
---
 mo/web/templates/org_round.html | 170 +++++++++++++++++++++-----------
 1 file changed, 113 insertions(+), 57 deletions(-)

diff --git a/mo/web/templates/org_round.html b/mo/web/templates/org_round.html
index 39e4b99a..5e4447a7 100644
--- a/mo/web/templates/org_round.html
+++ b/mo/web/templates/org_round.html
@@ -10,86 +10,140 @@
 {% set can_add_contest = g.gatekeeper.rights_generic().have_right(Right.add_contest) %}
 
 {% block title %}
-	{{ round.name }} kategorie {{ round.category }}{% if in_hier %}: {{ ctx.hier_place.name }}{% endif %}
+	{{ round.name }} {{ round.category }}{% if in_hier %}: {{ ctx.hier_place.name }}{% endif %}
 {% endblock %}
 {% block breadcrumbs %}
 {{ ctx.breadcrumbs() }}
 {% endblock %}
 
 {% block body %}
+<div class="row">
 
-<table class="table table-bordered table-condensed table-auto">
-	<tr><td>Moje role<td>{% if g.user.is_admin %}správce{% elif roles %}{{ roles|join(", ") }}{% else %}–{% endif %}
-	{% if group_rounds|length > 1 %}
-	<tr><td>Skupina kol<td>
-		{% for r in group_rounds %}
-			{% if r == round %}{{ r.name }} {{ r.category }}<br>
-			{% else %}<a href="{{ url_for('org_round', round_id=r.round_id) }}">{{ r.name }} {{ r.category }}</a><br>
-			{% endif %}
-		{% endfor %}
+<div class="col-md-5 col-md-push-7">
+<div class="panel panel-default">
+	<table class="table table-bordered">
+		<tr><td>Stav kola<td>{{ round.state.friendly_name() }}
+		<tr>
+			<td>Zadání úloh
+			<td>
+				{% if offer_view_statement %}
+				<a class="btn btn-default" href='{{ ctx.url_for('org_task_statement') }}'>
+					<img class="media-object" src="{{ url_for('static', filename='img/pdficon.svg') }}" alt="PDF" style="width: 24px; display: inline-block">
+					Stáhnout
+				</a>
+				{% else %}
+					{{ offer_view_statement_reason }}
+				{% endif %}
+		<tr><td>Moje role<td>{% if g.user.is_admin %}správce{% elif roles %}{{ roles|join(", ") }}{% else %}–{% endif %}
+		{% if group_rounds|length > 1 %}
+		<tr><td>Skupina kol<td>
+			{% for r in group_rounds %}
+				{% if r == round %}{{ r.name }} {{ r.category }}<br>
+				{% else %}<a href="{{ url_for('org_round', round_id=r.round_id) }}">{{ r.name }} {{ r.category }}</a><br>
+				{% endif %}
+			{% endfor %}
+		{% endif %}
+	</table>
+	<div class="panel-footer">
+	{% if can_manage_round %}
+	<a class="btn btn-sm btn-default" href='{{ ctx.url_for('org_edit_statement') }}'>
+		<span class="glyphicon glyphicon-file"></span>
+		Zadání
+	</a>
+	<a class="btn btn-sm btn-default" href='{{ ctx.url_for('org_round_edit') }}'>
+		<span class="glyphicon glyphicon-cog"></span>
+		Nastavení
+	</a>
 	{% endif %}
-	<tr><td>Stav<td>{{ round.state.friendly_name() }}
-	{% with state=round.ct_state() %}
-	<tr><td>Stav pro účastníky<td>{{ state.friendly_name() }}
-	{% endwith %}
-	<tr><td>Režim přihlašování<td>{{ round.enroll_mode.friendly_name() }}
-	<tr><td>Popis v přihlášce<td>{{ round.enroll_advert }}
-	<tr>
-		<td>Účastníci vidí zadání a odevzdávají
-		<td>{{ round.ct_tasks_start|timeformat if round.ct_tasks_start else Markup('<i>nenastaveno</i>') }} – {{ round.ct_submit_end|timeformat if round.ct_submit_end else Markup('<i>nenastaveno</i>') }}
-	<tr>
-		<td>Dozor vidí zadání a odevzdává
-		<td>{{ round.pr_tasks_start|timeformat if round.pr_tasks_start else Markup('<i>nenastaveno</i>') }} – {{ round.pr_submit_end|timeformat if round.pr_submit_end else Markup('<i>nenastaveno</i>') }}
-	<tr><td>Zadání<td>
-{% if round.tasks_file %}
-	{% if not statement_exists %}
-		<span class=error>soubor neexistuje</span>
-	{% elif offer_view_statement %}
-		<a href='{{ ctx.url_for('org_task_statement') }}'>stáhnout</a>
-	{% else %}
-		není dostupné
+	{% if round.has_messages %}
+	<a class="btn btn-sm btn-default" href='{{ ctx.url_for('org_round_messages') }}'>
+		<span class="glyphicon glyphicon-phone"></span>
+		Zprávičky
+	</a>
 	{% endif %}
-{% else %}
-	–
-{% endif %}
-	<tr><th colspan=2>Nastavení výsledkové listiny{% if round.is_subround() %}
-		<i>(přejato z <a href="{{ url_for('org_round', round_id=round.master.round_id) }}">{{ round.master.round_code() }}</a>)</i>
+	{% if g.user.is_admin and not in_hier %}
+	<a class="btn btn-sm btn-info" href='{{ log_url('round', round.round_id) }}'>Historie</a>
 	{% endif %}
-	<tr><td>Výsledková listina<td>{{ round.master.score_mode.friendly_name() }}
-	<tr><td>Hranice bodů pro vítěze<td>{{ round.master.score_winner_limit|decimal|none_value(Markup('<i>nenastaveno</i>')) }}
-	<tr><td>Podmínka pro úspěšné řešitele<td>{% if round.master.score_successful_limit is not none %}{{ round.master.score_successful_limit|decimal }} bodů{% if round.master.tasks_successful_limit is not none %}, {{ round.master.tasks_successful_limit|inflected("úspěšná úloha", "úspěšné úlohy", "úspěšných úloh") }}{% endif %}{% else %}<i>nenastaveno</i>{% endif %}
-	<tr><td>Přesnost bodování<td>{{ round.master.points_step_name() }}
-</table>
-<div style="clear: both;"></div>
+	</div>
+</div>
 
-{% if can_view_contestants or can_manage_contest or can_manage_round or round.has_messages %}
-<div>
+<div class="panel panel-default">
+	<div class="panel-heading">
+		<h3 class="panel-title">
+            <span class="glyphicon glyphicon-time"></span>
+            Přihláška a termíny
+        </h3>
+	</div>
+	<table class="table table-bordered">
+		<tr><td>Režim přihlašování<td>{{ round.enroll_mode.friendly_name() }}
+		<tr><td>Popis v přihlášce<td>{{ round.enroll_advert }}
+		<tr>
+			<td>Účastníci vidí zadání a odevzdávají
+			<td>{{ round.ct_tasks_start|timeformat if round.ct_tasks_start else Markup('<i>nenastaveno</i>') }} – {{ round.ct_submit_end|timeformat if round.ct_submit_end else Markup('<i>nenastaveno</i>') }}
+		<tr>
+			<td>Dozor vidí zadání a odevzdává
+			<td>{{ round.pr_tasks_start|timeformat if round.pr_tasks_start else Markup('<i>nenastaveno</i>') }} – {{ round.pr_submit_end|timeformat if round.pr_submit_end else Markup('<i>nenastaveno</i>') }}
+	</table>
+	<div class="panel-footer">
 	{% if can_view_contestants %}
-	<a class="btn btn-primary" href='{{ ctx.url_for('org_generic_list') }}'>Seznam účastníků</a>
-	{% endif %}
-	{% if (can_view_contestants and round.state in [RoundState.grading, RoundState.delegate] or round.state == RoundState.closed) %}
-	<a class="btn btn-warning" href='{{ ctx.url_for('org_score') }}'>Výsledky</a>
+	<a class="btn btn-sm btn-primary" href='{{ ctx.url_for('org_generic_list') }}'>
+		<span class="glyphicon glyphicon-user"></span>
+		Seznam účastníků
+	</a>
 	{% endif %}
 	{% if can_manage_contest %}
-	<a class="btn btn-default" href='{{ ctx.url_for('org_generic_import') }}'>Importovat data</a>
+	<a class="btn btn-sm btn-default" href='{{ ctx.url_for('org_generic_import') }}'>
+		<span class="glyphicon glyphicon-import"></span>
+		Importovat data
+	</a>
 	{% endif %}
 	{% if can_manage_round %}
-	<a class="btn btn-default" href='{{ ctx.url_for('org_round_edit') }}'>Nastavení a termíny</a>
-	<a class="btn btn-default" href='{{ ctx.url_for('org_edit_statement') }}'>Zadání</a>
+	<a class="btn btn-sm btn-default" href='{{ ctx.url_for('org_round_edit') }}'>
+		<span class="glyphicon glyphicon-cog"></span>
+		Nastavení
+	</a>
 	{% endif %}
-	{% if round.has_messages %}
-	<a class="btn btn-default" href='{{ ctx.url_for('org_round_messages') }}'>Zprávičky</a>
+	</div>
+</div>
+
+<div class="panel panel-default">
+	<div class="panel-heading">
+		{% if round.is_subround() %}
+		<small class="pull-right">přejato z <a href="{{ url_for('org_round', round_id=round.master.round_id) }}">{{ round.master.round_code() }}</a></small>
+		{% endif %}
+		<h3 class="panel-title">
+            <span class="glyphicon glyphicon-stats"></span>
+            Výsledková listina
+        </h3>
+	</div>
+	<table class="table table-bordered">
+		<tr><td>Pořadí<td>{{ round.master.score_mode.friendly_name() }}
+		<tr><td>Hranice bodů pro vítěze<td>{{ round.master.score_winner_limit|decimal|none_value(Markup('<i>nenastaveno</i>')) }}
+		<tr><td>Podmínka pro úspěšné řešitele<td>{% if round.master.score_successful_limit is not none %}{{ round.master.score_successful_limit|decimal }} bodů{% if round.master.tasks_successful_limit is not none %}, {{ round.master.tasks_successful_limit|inflected("úspěšná úloha", "úspěšné úlohy", "úspěšných úloh") }}{% endif %}{% else %}<i>nenastaveno</i>{% endif %}
+		<tr><td>Přesnost bodování<td>{{ round.master.points_step_name() }}
+	</table>
+	<div class="panel-footer">
+	{% if (can_view_contestants and round.state in [RoundState.grading, RoundState.delegate] or round.state == RoundState.closed) %}
+	<a class="btn btn-sm btn-warning" href='{{ ctx.url_for('org_score') }}'>
+		<span class="glyphicon glyphicon-bullhorn"></span>
+		Výsledky
+	</a>
 	{% endif %}
-	{% if g.user.is_admin and not in_hier %}
-	<a class="btn btn-info" href='{{ log_url('round', round.round_id) }}'>Historie</a>
+	{% if can_manage_round %}
+	<a class="btn btn-sm btn-default" href='{{ ctx.url_for('org_round_edit') }}'>
+		<span class="glyphicon glyphicon-cog"></span>
+		Nastavení
+	</a>
 	{% endif %}
+	</div>
+</div>
 </div>
-{% endif %}
 
-<h3>Soutěže</h3>
+<div class="col-md-7 col-md-pull-5">
+<h3 class="visible-sm visible-xs">Soutěže</h3>
 {% if reg_total.num_contests %}
 	{% set show_contests = reg_stats[0].contest != None %}
-	<table class="table table-bordered table-condensed table-auto">
+	<table class="table table-bordered">
 		<thead>
 			<tr>
 			{% if show_contests %}
@@ -153,6 +207,8 @@
 	{{ wtf.form_field(form_add_contest.create_contest) }}
 </form>
 {% endif %}
+</div>
+</div>
 
 <h3>Úlohy</h3>
 {% if task_info %}
-- 
GitLab