Vylepšení odevzdávátka #13
Merged
zelvuska
merged 17 commits from vylepseni_odevzdavatka
into master
2 years ago
17 changed files with 217 additions and 169 deletions
@ -0,0 +1,22 @@ |
|||||
|
// Kontrola, že org neposílá nějakou blbost v detail.html
|
||||
|
|
||||
|
function zkontroluj_hodnoceni() { |
||||
|
const pocet = $('.hodnoceni').length; |
||||
|
if (pocet === 1) { // vidím pouze plusko
|
||||
|
const vysledek = confirm("Odstranil jsi všechny problémy tohoto řešení. Nepůjde tedy dohledat přes problémy, co řeší, tj. například v došlých řešeních. Přesto odeslat?"); |
||||
|
if (!vysledek) { |
||||
|
event.preventDefault(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function problem_is_empty(elem, index, array) {return elem.firstElementChild.children.length !== 1 && elem.firstElementChild.children[1].textContent === "";} |
||||
|
|
||||
|
if ($('.hodnoceni').toArray().some(problem_is_empty)) { |
||||
|
alert("Neuloženo! Nezadal jsi problém, ke kterému posíláš hodnocení. Pokud je toto hodnocení navíc, smaž ho prosím křížkem a znovu odešli.") |
||||
|
event.preventDefault() |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
return true; |
||||
|
} |
@ -0,0 +1,56 @@ |
|||||
|
// FIXME: Necopypastovat! Tohle je zkopírované ze static/odevzdavatko/dynamic_formsets.js
|
||||
|
|
||||
|
|
||||
|
// Credit https://medium.com/all-about-django/adding-forms-dynamically-to-a-django-formset-375f1090c2b0
|
||||
|
function updateElementIndex(el, prefix, ndx) { |
||||
|
var id_regex = new RegExp('(' + prefix + '-\\d+)'); |
||||
|
var replacement = prefix + '-' + ndx; |
||||
|
if ($(el).attr("for")) { |
||||
|
$(el).attr("for", $(el).attr("for").replace(id_regex, replacement)); |
||||
|
} |
||||
|
if (el.id) { |
||||
|
el.id = el.id.replace(id_regex, replacement); |
||||
|
} |
||||
|
if (el.name) { |
||||
|
el.name = el.name.replace(id_regex, replacement); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Credit https://medium.com/all-about-django/adding-forms-dynamically-to-a-django-formset-375f1090c2b0
|
||||
|
function deleteForm(prefix, btn) { |
||||
|
var total = parseInt($('#id_' + prefix + '-TOTAL_FORMS').val()); |
||||
|
if (total >= 1){ |
||||
|
btn.closest('tr').remove(); |
||||
|
var forms = $('.hodnoceni'); |
||||
|
var formCount = forms.length - 1; // There is one extra such form hidden as template!
|
||||
|
$('#id_' + prefix + '-TOTAL_FORMS').val(formCount); |
||||
|
for (var i=0; i<formCount; i++) { |
||||
|
$(forms.get(i)).find(':input').each(function() { |
||||
|
updateElementIndex(this, prefix, i); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
// Credit: https://simpleit.rocks/python/django/dynamic-add-form-with-add-button-in-django-modelformset-template/
|
||||
|
$(document).ready(function(){ |
||||
|
$('#pridat_hodnoceni').click(function() { |
||||
|
var form_idx = $('#id_form-TOTAL_FORMS').val(); |
||||
|
var new_form = $('#empty_form').html().replace(/__prefix__/g, form_idx); |
||||
|
$('#form_set').append(new_form); |
||||
|
// Newly created form has not the binding between remove button and remove function
|
||||
|
// We need to add it manually
|
||||
|
$('.smazat_hodnoceni').click(function(){ |
||||
|
deleteForm("form",this); |
||||
|
}); |
||||
|
// Copy deadline
|
||||
|
if (form_idx !== "0") { |
||||
|
$('#id_form-' + form_idx + '-deadline_body')[0].value = $('#id_form-' + (form_idx - 1) + '-deadline_body')[0].value |
||||
|
} |
||||
|
$('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1); |
||||
|
}); |
||||
|
$('.smazat_hodnoceni').click(function(){ |
||||
|
deleteForm("form",this); |
||||
|
}); |
||||
|
}); |
@ -1,51 +0,0 @@ |
|||||
{% extends "base.html" %} |
|
||||
{% load static %} |
|
||||
{% load deadliny %} |
|
||||
|
|
||||
{% block content %} |
|
||||
|
|
||||
<p>Řešené problémy: {{ object.problem.all | join:", " }}</p> |
|
||||
|
|
||||
<p>Řešitelé: {% for r in object.resitele.all %} {{ r }} |
|
||||
{% if forloop.revcounter0 != 0 %}, {% endif %} {% endfor %}</p> |
|
||||
|
|
||||
{# https://docs.djangoproject.com/en/3.1/ref/models/instances/#django.db.models.Model.get_FOO_display #} |
|
||||
<p>Forma: {{ object.get_forma_display }}</p> |
|
||||
|
|
||||
<p>Doručeno {{ object.cas_doruceni }}, deadline: {{object.deadline_reseni | deadline_html }}</p> |
|
||||
|
|
||||
{# Soubory: #} |
|
||||
<h3>Přílohy:</h3> |
|
||||
{% if object.prilohy.all %} |
|
||||
<table class="dosla_reseni"> |
|
||||
<tr><th>Soubor</th><th>Řešitelova poznámka</th><th>Datum</th></tr> |
|
||||
{% for priloha in object.prilohy.all %} |
|
||||
<tr> |
|
||||
<td><a href="{{ priloha.soubor.url }}" download>{{ priloha.split | last }}</a></td> |
|
||||
<td>{{ priloha.res_poznamka }}</td> |
|
||||
<td>{{ priloha.vytvoreno }}</td></tr> |
|
||||
{# TODO: Orgo-poznámka, ideálně jako formulář #} |
|
||||
{% endfor %} |
|
||||
</table> |
|
||||
{% else %} |
|
||||
<p>Žádné přílohy</p> |
|
||||
{% endif %} |
|
||||
|
|
||||
{#<h3>Poznámka:</h3>#} |
|
||||
{#<p>{{ poznamka }}</p>#} |
|
||||
|
|
||||
{# Hodnocení: #} |
|
||||
<h3>Hodnocení:</h3> |
|
||||
<table id="form_set" class="dosla_reseni"> |
|
||||
<tr><th>Problém</th><th>Body</th><th>Zpětná vazba od opravovatele</th>{# <th>Deadline pro body</th> #}</tr> |
|
||||
{% for h in hodnoceni %} |
|
||||
<tr class="hodnoceni"> |
|
||||
<td>{{ h.problem }}</td> |
|
||||
<td>{{ h.body }}</td> |
|
||||
<td>{{ h.feedback }}</td> |
|
||||
{# <td>{{ h.deadline_body }}</td>#} |
|
||||
</tr> |
|
||||
{% endfor %} |
|
||||
</table> |
|
||||
|
|
||||
{% endblock %} |
|
@ -0,0 +1,18 @@ |
|||||
|
# Generated by Django 2.2.28 on 2022-11-21 22:07 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('seminar', '0109_hodnoceni_feedback'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='resitel', |
||||
|
name='prezdivka_resitele', |
||||
|
field=models.CharField(blank=True, max_length=256, null=True, unique=True, verbose_name='přezdívka řešitele'), |
||||
|
), |
||||
|
] |
Loading…
Reference in new issue
Tenhle způsob zalámání nejspíš nikde nemáme – trochu mi to rozbíjí čtení kódu. Ale možná nikde nemáme takovýhle kód, takže by to pokus o fluent kód (vizte níž) udělal možná taky…
Pod fluent kódem si představuji cca toto:
(Je to o něco kratší a neskáče tam odsazení jak na pile, což mi přijde trošičku lepší pro čtení, ale je to jen malá preference…)
Tak takhle mi zase chvíli trvá, než mi dojde, k čemu ta tečka na začátku řádku patří…