From 5e030d32e5623b9ae5992d04c95d03c4d168e5ad 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:18:59 +0200 Subject: [PATCH] =?UTF-8?q?Tabulka=20=C5=99e=C5=A1en=C3=AD:=20Zm=C4=9Bna?= =?UTF-8?q?=20ikonek=20a=20po=C5=99ad=C3=AD=20sloupc=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Odevzdané řešení má zelenou barvu pozadí (success). Opravené řešení má světle modrou barvu pozadí (info). --- mo/web/templates/org_contest_solutions.html | 60 ++++++++++++--------- mo/web/templates/org_submit_list.html | 4 +- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/mo/web/templates/org_contest_solutions.html b/mo/web/templates/org_contest_solutions.html index 3b52c2ea..8d08cd8d 100644 --- a/mo/web/templates/org_contest_solutions.html +++ b/mo/web/templates/org_contest_solutions.html @@ -14,7 +14,7 @@ e.preventDefault(); var table = e.target; while (table.tagName != 'TABLE') { table = table.parentNode; } - var checkboxes = table.querySelectorAll('tr.state-active td:nth-child('+(2+2*(col-1)+1)+') input[type=checkbox]'); + var checkboxes = table.querySelectorAll('tr.state-active td:nth-child('+(2+(col-1)+1)+') input[type=checkbox]'); if (states[col] === true) { Array.prototype.forEach.call(checkboxes, function(el, i){ @@ -44,15 +44,17 @@ {% block body %} {% include "parts/org_submit_warning.html" %} -<p><i> +<p> {% if edit_form %} Zaškrtnutím políček u řešení, která dosud neexistují, a odesláním tlačítkem pod tabulkou tato řešení založíte. To se hodí, pokud se nechystáte do systému nahrávat soubory řešení, ale jen chcete řešení vytvořit, aby jim bylo možné vyplnit body. Pokud nějaké řešení založíte omylem, lze toto prázdné řešení smazat v jeho detailu. {% else %} -Přes ikonku <span class="icon">🔍</span> se dostanete na detail, kde můžete nahrávat soubory a hodnotit odevzdané řešení. Symbol <span class="glyphicon glyphicon-duplicate"></span> značí, že existuje více verzí dostupných v detailu. +Přes ikonku <span class="glyphicon glyphicon-search"></span> se dostanete na detail, kde můžete nahrávat soubory a hodnotit odevzdané řešení. +Odevzdaná řešení jsou <span class="text-success">zeleně</span>, opravená řešení jsou <span class="text-info">modře</span>. +Symbol <span class="glyphicon glyphicon-duplicate"></span> značí, že existuje více verzí dostupných v detailu. {% endif %} -</i></p> +</p> {% if edit_form %} <form class="form" method="POST"> @@ -64,14 +66,17 @@ Přes ikonku <span class="icon">🔍</span> se dostanete na detail, kde můžete {% for i in range((tasks|length)//4 + (1 if (tasks|length)%4 > 0 else 0)) %} <div class="table-responsive"> <table class="table table-bordered table-hover table-condensed"> - <colgroup><col span="2"></colgroup> + <colgroup> + <col span="2"> {% for task in tasks[4*i:4*(i+1)] %} - <colgroup style="border-left: 2px #aaa solid;"><col span="4"></colgroup> + <col style="border-left: 2px #aaa solid;"></col> + <col span="3"></col> {% endfor %} {% if loop.last %} {% set last_loop = True %} - <colgroup style="border-left: 2px #aaa solid;"><col></colgroup> + <col style="border-left: 2px #aaa solid;"><col> {% endif %} + </colgroup> <thead> <tr> <th colspan="2"> @@ -98,7 +103,7 @@ Přes ikonku <span class="icon">🔍</span> se dostanete na detail, kde můžete <tr> <th>Účastník <th>Stav účasti - {% for task in tasks[4*i:4*(i+1)] %}<th title="Řešení">Ř<th title="Oprava">O<th title="Body">B<th title="Detail"><span class="icon">🔍</span>{% endfor %} + {% for task in tasks[4*i:4*(i+1)] %}<th><th class="text-center" title="Řešení">Ř<th class="text-center" title="Oprava">O<th title="Body">B{% endfor %} {% if last_loop %} <th>Body celkem {% endif %} @@ -112,35 +117,39 @@ Přes ikonku <span class="icon">🔍</span> se dostanete na detail, kde můžete <td>{{ pion.state.friendly_name() }} {% for task in tasks[4*i:4*(i+1)] %} {% if u.user_id in tasks_sols[task.task_id] %} + <td style="border-right: none; padding-right: 2px"> + <a class="btn btn-xs btn-default" title="Detail řešení" href="{{ ctx.url_for('org_submit_list', user_id=u.user_id, task_id=task.task_id) }}"> + <span class="glyphicon glyphicon-search"></span> + </a> {% set sol = tasks_sols[task.task_id][u.user_id] %} + <td class="text-center" style="border-left: none; border-right: none; padding-left: 2px; padding-right: 2px"> {% if sol.final_submit_obj %} {% set p = sol.final_submit_obj %} {% set late = p.check_deadline(round, contest) %} {% set key = (u.user_id, task.task_id, "solution") %} - <td class="text-center {% if late or p.broken %}danger{% else %}success{% endif %}"> - <a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }}{% if p.is_broken() %} – nekorektní PDF{% endif %}{% if p.pages != None %} – {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% endif %}{% if late %} – {{ late }}{% endif %}{% if key in paper_counts and paper_counts[key] > 1 %} – {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}{% endif %}"> + <a href="{{ paper_link(u, p) }}" + class="btn btn-xs {% if late %}btn-danger{% elif p.is_broken() %}btn-warning{% else %}btn-success{% endif %}" + title="Řešení ze dne {{ p.uploaded_at|timeformat }}{% if p.is_broken() %} – nekorektní PDF{% endif %}{% if p.pages != None %} – {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% endif %}{% if late %} – {{ late }}{% endif %}{% if key in paper_counts and paper_counts[key] > 1 %} – {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}{% endif %}"> {% if key in paper_counts and paper_counts[key] > 1 %} <span class="glyphicon glyphicon-duplicate"></span> {% else %} <span class="glyphicon glyphicon-file"></span> {% endif %} </a> - {% else %} - <td> {% endif %} + <td class="text-center" style="border-left: none; padding-left: 2px"> {% if sol.final_feedback_obj %} {% set p = sol.final_feedback_obj %} {% set key = (u.user_id, task.task_id, "feedback") %} - <td class="text-center {% if p.broken %}danger{% else %}success{% endif %}"> - <a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }}{% if p.is_broken() %} – nekorektní PDF{% endif %}{% if p.pages != None %} – {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% endif %}{% if key in paper_counts and paper_counts[key] > 1 %} – {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}{% endif %}"> + <a href="{{ paper_link(u, p) }}" + class="btn btn-xs btn-info" + title="Oprava ze dne {{ p.uploaded_at|timeformat }}{% if p.is_broken() %} – nekorektní PDF{% endif %}{% if p.pages != None %} – {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% endif %}{% if key in paper_counts and paper_counts[key] > 1 %} – {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}{% endif %}"> {% if key in paper_counts and paper_counts[key] > 1 %} <span class="glyphicon glyphicon-duplicate"></span> {% else %} <span class="glyphicon glyphicon-file"></span> {% endif %} </a> - {% else %} - <td> {% endif %} <td> {% if sol.points is not none %} @@ -149,18 +158,19 @@ Přes ikonku <span class="icon">🔍</span> se dostanete na detail, kde můžete {% else %} <span class="unknown">?</span> {% endif %} - <td> {% else %} - <td colspan=3> + <td colspan="4"> {% if edit_form %} <label> <input type="checkbox" name="create_sol_{{task.task_id}}_{{u.user_id}}"> Založit </label> - {% else %}–{% endif %} - <td> + {% else %} + <a class="btn btn-xs btn-default" title="Založit a nahrát řešení" href="{{ ctx.url_for('org_submit_list', user_id=u.user_id, task_id=task.task_id) }}"> + <span class="glyphicon glyphicon-search"></span> + </a> + {% endif %} {% endif %} - <a class="btn btn-xs btn-link icon" title="Detail řešení" href="{{ ctx.url_for('org_submit_list', user_id=u.user_id, task_id=task.task_id) }}">🔍</a> {% endfor %} {% if last_loop %} <th>{{ sum_points[pion]|sum|decimal }}</th> @@ -177,9 +187,11 @@ Přes ikonku <span class="icon">🔍</span> se dostanete na detail, kde můžete Zaškrtnout vše </a> {% else %} - <td> + <td style="border-right: none; padding-right: 2px"> + <a class="btn btn-xs btn-primary" href="{{ ctx.url_for('org_contest_task', task_id=task.task_id) }}" title="Podrobný výpis odevzdaných řešení k úloze {{ task.code }}"><span class="glyphicon glyphicon-search"></span></a> + <td class="text-center" style="border-left: none; border-right: none; padding-left: 2px; padding-right: 2px"> <a class='btn btn-xs btn-default' href="{{ ctx.url_for('org_generic_batch_download', task_id=task.task_id) }}" title="Stáhnout ZIP řešení úlohy {{ task.code }}"><span class="glyphicon glyphicon-cloud-download"></span></a> - <td> + <td class="text-center" style="border-left: none; padding-left: 2px"> {% if rights.can_upload_feedback() %} <a class='btn btn-xs btn-default' href="{{ ctx.url_for('org_generic_batch_upload', task_id=task.task_id) }}" title="Nahrát ZIP řešení úlohy {{ task.code }}"><span class="glyphicon glyphicon-cloud-upload"></span></a> {% endif %} @@ -187,8 +199,6 @@ Přes ikonku <span class="icon">🔍</span> se dostanete na detail, kde můžete {% if edit_points or edit_create %} <a class="btn btn-xs btn-default" href="{{ ctx.url_for('org_contest_task_edit', task_id=task.task_id) }}" title="{% if edit_points %}Zadat body{% else %}Založit řešení{% endif %} k úloze {{ task.code }}"><span class="glyphicon glyphicon-pencil"></span></a> {% endif %} - <td> - <a class="btn btn-xs btn-primary" href="{{ ctx.url_for('org_contest_task', task_id=task.task_id) }}" title="Podrobný výpis odevzdaných řešení k úloze {{ task.code }}"><span class="glyphicon glyphicon-search"></span></a> {% endif %} {% endfor %} {% if last_loop %} diff --git a/mo/web/templates/org_submit_list.html b/mo/web/templates/org_submit_list.html index b7b7a778..7dcda533 100644 --- a/mo/web/templates/org_submit_list.html +++ b/mo/web/templates/org_submit_list.html @@ -213,10 +213,10 @@ Existuje více než jedna verze oprav, finální je podbarvená. <div class="col-sm-offset-2 col-sm-10"> <p> {% if allow_upload_solutions %} - {{ wtf.form_field(form.submit_sol, class='btn btn-primary', value=action + ' a nahrát soubor jako řešení' )}} + {{ wtf.form_field(form.submit_sol, class='btn btn-success', value=action + ' a nahrát soubor jako řešení' )}} {% endif %} {% if allow_upload_feedback %} - {{ wtf.form_field(form.submit_fb, class='btn btn-success', value=action + ' a nahrát soubor jako opravu' )}} + {{ wtf.form_field(form.submit_fb, class='btn btn-info', value=action + ' a nahrát soubor jako opravu' )}} {% endif %} </p> </div> -- GitLab