From ff0b26a60b7b79e7f6dc4a4436f717fc65f09a14 Mon Sep 17 00:00:00 2001 From: Daniel Kleinert Date: Sun, 30 May 2010 21:28:25 +0200 Subject: [PATCH] Restructured css: all syles should be in styles.css in it's apropriate 'namespace'. No more asyncronus js for checker progress - simple spinner instead. Closes #4, Closes #5. Tables with forms were replaced with divs. Closes #2. Breadcrumbs for easyier navigation. Some minor style and bug fixes. --- media/images/loading.gif | Bin 0 -> 9427 bytes media/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes media/styles/style.css | 234 ++++++++++++++---- src/praktomat/attestation/views.py | 11 +- src/praktomat/checker/views.py | 15 -- src/praktomat/solutions/models.py | 16 +- src/praktomat/solutions/views.py | 12 +- src/praktomat/tasks/models.py | 6 +- src/praktomat/tasks/views.py | 2 +- .../admin/tasks/task/model_solution.html | 28 ++- .../attestation/attestation_edit.html | 38 ++- .../attestation/attestation_list.html | 16 +- .../attestation/attestation_view.html | 47 ++-- src/praktomat/templates/base.html | 9 +- .../templates/solutions/js_redirect.html | 13 - .../templates/solutions/solution_detail.html | 26 +- .../templates/solutions/solution_list.html | 106 +++----- .../templates/tasks/task_detail.html | 22 +- src/praktomat/templates/tasks/task_list.html | 9 +- src/praktomat/urls.py | 1 - 20 files changed, 349 insertions(+), 262 deletions(-) create mode 100644 media/images/loading.gif create mode 100644 media/images/ui-icons_ffffff_256x240.png delete mode 100755 src/praktomat/templates/solutions/js_redirect.html diff --git a/media/images/loading.gif b/media/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..7eca54a3f46ea0ff0c2f73e274d92d58e090c1b1 GIT binary patch literal 9427 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 literal 0 HcmV?d00001 diff --git a/media/images/ui-icons_ffffff_256x240.png b/media/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..42f8f992c727ddaa617da224a522e463df690387 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/media/styles/style.css b/media/styles/style.css index 262a37e4..68286808 100755 --- a/media/styles/style.css +++ b/media/styles/style.css @@ -2,10 +2,57 @@ /* @group Global */ -/* @group Page Structure */ +/* @group Browser reset */ + +h1, h2, h3, h4, h5, h6 { + margin-bottom: 10px; +} + +h1{ + font-size: 20px; + margin-bottom: 20px; +} +h2{ + font-size: 16px; + margin-bottom: 16px; +} + +#help_icon { + float: right; +} +h3{ + font-size: 12px; +} + +p, ol, pre, input{ + margin-bottom: 10px; +} + +pre{ + left: -14px; + padding-left: 20px; +} + +ul li{ + list-style-type: disc; +} + +ol li{ + list-style-type: decimal; +} + +li { + padding-left: 20px; + margin-bottom: 10px; + list-style-position: inside; +} + +/* @end */ + +/* @group Page structure */ body { - background: #FFFFFF none repeat scroll 0 0; + background: #fff none repeat scroll 0 0; color: #333333; font-family: "Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; font-size: 12px; @@ -17,7 +64,6 @@ body { position: relative; width: 100%; min-width: 760px; - padding: 0; } #content { @@ -25,8 +71,7 @@ body { margin-right: auto; margin-left: auto; margin-bottom: 10px; - padding-right: 20px; - padding-bottom: 20px; + padding: 20px; } #footer { @@ -45,44 +90,62 @@ body { width: 100%; } -#header a:link, #header a:visited { - color: white; +#sub_header { + background: #005094; + overflow: hidden; + width: 100%; + color: #eaeaea; + font-size: 11px; + padding-top: 3px; + padding-bottom: 4px; } -#header a:hover { - text-decoration: underline; +.inner { + width: 800px; + margin-right: auto; + margin-left: auto; + padding-left: 20px; + padding-right: 20px; } #title h1 { - padding: 0 10px; + font-size: 18px; - margin: 8px 0; font-weight: normal; color: white; + float: left; + margin-top: 8px; + margin-bottom: 8px; } -#title h2 { - padding: 0 10px; - font-size: 14px; - margin: -8px 0 8px 0; - font-weight: normal; - color: #ffc; +#user-tools { + float: right; + margin-top: 12px; } -#user-tools { - position: absolute; - top: 0; - right: 0; - padding: 1.2em 10px; - font-size: 11px; - text-align: right; +#header a:link, #header a:visited{ + color: white; + text-decoration: none; +} + +#sub_header a:link, #sub_header a:visited, #sub_header a{ + color: #eaeaea; + text-decoration: none; +} + +#sub_header a:hover{ + text-decoration: underline; +} + +#header a:hover{ + text-decoration: underline; } /* @end */ /* @group Forms */ -th { +form th { text-align: right; vertical-align: top; } @@ -96,6 +159,14 @@ label { font-size: 10pt; font-family: sans-serif; vertical-align: top; + float: left; + width: 8em; + display: block; +} + +form .help{ + margin-left: 9em; + color: #999999; } .errorlist { @@ -139,6 +210,11 @@ label { background-image: url(../images/ui-icons_c31818_256x240.png); } +.icon-white { + background-image: url(../images/ui-icons_ffffff_256x240.png); +} + + .icon-none { background-image: none !important; } @@ -160,20 +236,90 @@ label { /* @group Task */ +/* @group Task Detail */ + +#task_detail #submission_date { + float: right; +} + +/* @end */ + /* @group Task List */ -div.left { +#task_list div.left { + float: left; + width: 48%; + padding-right: 2%; +} + +#task_list div.right { + float: right; + width: 48%; + padding-left: 2%; +} + + + +/* @end */ + + + +/* @end */ + +/* @group Solution */ + +/* @group Solution Detail */ + +#solution_detail #commit_text { + display: inline; +} + +#solution_detail form { + display: inline; +} + + + +/* @end */ + +/* @group Solution Upload */ + +#soluion_upload div.left { float: left; width: 48%; padding-right: 2%; } -div.right { +#soluion_upload div.right { float: right; width: 48%; padding-left: 2%; } +#soluion_upload div.left a { + float: right; +} + +#soluion_upload .simple_overlay { + /* must be initially hidden */ + display:none; + + /* styling */ + color:#fff; + width: 30%; + min-height:200px; + padding:35px; + font-size: 20px; +} + +#soluion_upload img#spinner { + display: inline; + float: left; + position: relative; + top: 4px; + margin-right: 10px; +} + /* @end */ @@ -186,73 +332,77 @@ div.right { /* @group Attestation Edit */ -.activeFile { +#attestation_edit .activeFile { font-weight: bold; } -.ui-tabs .ui-tabs-hide, .hidden { - - +#attestation_edit .ui-tabs .ui-tabs-hide, .hidden { /* override display:none of hidden tab to instantiate bespin see http://jqueryui.com/demos/tabs/ */ position: absolute; left: -10000px; } -h3.result { +#attestation_edit h3.result { text-decoration: none; } -div.result span.icon { +#attestation_edit div.result span.icon { float: left; margin-right: .3em; width: 16px; height: 16px; } -.bespin { +#attestation_edit .bespin { margin: 0; margin-top: 10px; padding: 0; border: 0; height: 500px; - border: 10px - solid #ddd; + border: 10px solid #ddd; -moz-border-radius: 10px; -webkit-border-radius: 10px; } - - /* @end */ /* @group Attestation List */ -#comment { +#attestation_list #comment { color: #c0c0c0; width: 80%; float: right; } -div.attestation { +#attestation_list div.attestation { position: relative; left: 20px; } -#Solutions form { +#attestation_list #Solutions form { margin-top: 40px; } +#soluion_upload div.attestation { + margin-left: 15px; +} + /* @end */ /* @group Attestation View */ -div.changed { +#attestation_view div.changed { background-color: #c4ff6f; } +#attestation_view form .help { + display: inline; + margin-left: 60px; +} + /* @end */ diff --git a/src/praktomat/attestation/views.py b/src/praktomat/attestation/views.py index 3d49759a..967109ad 100755 --- a/src/praktomat/attestation/views.py +++ b/src/praktomat/attestation/views.py @@ -29,12 +29,15 @@ def attestation_list(request, task_id): # don't allow a new attestation if one already exists solution_list = map(lambda solution:(solution, not solution.attestations_by(requestuser)), solutions) # first published => all published - published = solutions[0].attestations_by(requestuser)[0].published - all_solutions_attested = not reduce(lambda x,y: x or y, [new_attest_possible for (solution, new_attest_possible) in solution_list]) + try: + published = solutions[0].attestations_by(requestuser)[0].published + except IndexError: + published = False + all_solutions_attested = not reduce(lambda x,y: x or y, [new_attest_possible for (solution, new_attest_possible) in solution_list], False) all_attestations_final = reduce(lambda x,y: x and y, map(lambda attestation: attestation.final , - sum([list(solution.attestations_by(requestuser)) for solution in solutions],[]))) - publishable = all_solutions_attested and all_attestations_final + sum([list(solution.attestations_by(requestuser)) for solution in solutions],[])), True) + publishable = all_solutions_attested and all_attestations_final and task.expired() if request.method == "POST" and publishable: for solution in solutions: for attestation in solution.attestations_by(requestuser): diff --git a/src/praktomat/checker/views.py b/src/praktomat/checker/views.py index 9a572db9..8b137891 100755 --- a/src/praktomat/checker/views.py +++ b/src/praktomat/checker/views.py @@ -1,16 +1 @@ -from django.contrib.auth.decorators import login_required -from django.http import HttpResponse, HttpResponseBadRequest -from django.views.decorators.cache import never_cache -from django.utils import simplejson -@login_required -@never_cache -def checker_progress(request): - """ Return JSON object with information about the progress of the checker run.""" - try: - checker_progress = request.session['checker_progress'] - except: - checker_progress = 0 - # return HttpResponseBadRequest('Server Error') - json = simplejson.dumps({'progress': checker_progress}) - return HttpResponse(json) diff --git a/src/praktomat/solutions/models.py b/src/praktomat/solutions/models.py index c2b42c2d..2c6660b4 100755 --- a/src/praktomat/solutions/models.py +++ b/src/praktomat/solutions/models.py @@ -35,11 +35,9 @@ def copySolutionFiles(self, toTempDir): for file in self.solutionfile_set.all(): file.copyTo(toTempDir) - def check(self, session, run_secret = 0): + def check(self, run_secret = 0): """Builds and tests this solution.""" - session['checker_progress'] = 0 - # Delete previous results if the checker have allready been run self.checkerresult_set.all().delete() # set up environment @@ -63,7 +61,7 @@ def check(self, session, run_secret = 0): os.makedirs(env.tmpdir(), TMP_DIR_MODE) os.chmod(env.tmpdir(), TMP_DIR_MODE) self.copySolutionFiles(env.tmpdir()) - self.run_checks(env, session, run_secret) + self.run_checks(env, run_secret) finally: # reset default temp dir location tempfile.tempdir = None @@ -76,7 +74,7 @@ def check(self, session, run_secret = 0): - def run_checks(self, env, session, run_all): # , task + def run_checks(self, env, run_all): # , task """ Check program. The case `Nothing submitted' is handled by the Saver. Also, this does not work when submitting archives, since at this point, archives are not unpacked yet, and hence, @@ -106,9 +104,6 @@ def run_checks(self, env, session, run_all): # , task task.dejagnusetup_set.all(), task.dejagnutester_set.all() ] - number_of_checkers_total = sum(map(lambda x:x.count(), checkersets)) - number_of_finished_checkers = 0 - for checkers in checkersets: for checker in checkers: @@ -145,11 +140,6 @@ def run_checks(self, env, session, run_all): # , task if result.passed: passed_checkers.append(checker) - - number_of_finished_checkers += 1 - session['checker_progress'] = int(100.0 * number_of_finished_checkers / number_of_checkers_total) - session.save() - self.save() def attestations_by(self, user): diff --git a/src/praktomat/solutions/views.py b/src/praktomat/solutions/views.py index 35751b54..95f8b567 100755 --- a/src/praktomat/solutions/views.py +++ b/src/praktomat/solutions/views.py @@ -1,4 +1,3 @@ -from datetime import datetime import zipfile import tempfile @@ -19,23 +18,16 @@ def solution_list(request, task_id): task = get_object_or_404(Task,pk=task_id) my_solutions = task.solution_set.filter(author = request.user) - submission_possible = task.submission_date > datetime.now() and not my_solutions.filter(final = True) + submission_possible = not task.expired() and not my_solutions.filter(final = True) if request.method == "POST": solution = Solution(task = task, author=request.user) formset = SolutionFormSet(request.POST, request.FILES, instance=solution) if formset.is_valid(): try: - request.session['checker_progress'] = 0 - request.session.save() solution.save() formset.save() - solution.check(request.session) - # the form's submit targets an iframe, this allaows webkit based browsers (and probably others) to make ajax calls while posting - # so we are returning an javascript which will redirect the parent window of the iframe - #import time - #time.sleep(600) - #return render_to_response("solutions/js_redirect.html", {"redirect_url": reverse('solution_detail', args=[solution.id])}, context_instance=RequestContext(request)) + solution.check() return HttpResponseRedirect(reverse('solution_detail', args=[solution.id])) except: solution.delete() # delete files diff --git a/src/praktomat/tasks/models.py b/src/praktomat/tasks/models.py index 6cdb58bf..bffb39e4 100755 --- a/src/praktomat/tasks/models.py +++ b/src/praktomat/tasks/models.py @@ -1,7 +1,7 @@ from django.db import models from django.db import transaction from django.core import serializers -from datetime import date, datetime +from datetime import date, datetime, timedelta import tempfile import zipfile @@ -23,9 +23,9 @@ def solutions(self,user): def checker(self): return self.AnonymityChecker_set.all() + self.LineCounter_set.all() - def expiered(self): + def expired(self): """docstring for expiered""" - return self.submission_date + datetime.timedelta(hour=1) > datetime.now() + return self.submission_date + timedelta(hours=1) < datetime.now() @classmethod def export_Tasks(cls, qureyset): diff --git a/src/praktomat/tasks/views.py b/src/praktomat/tasks/views.py index 84072157..60e73f12 100755 --- a/src/praktomat/tasks/views.py +++ b/src/praktomat/tasks/views.py @@ -23,7 +23,7 @@ def taskList(Request): return render_to_response('tasks/task_list.html',{'upcoming_tasks':upcoming_tasks, 'expired_tasks':expired_tasks, 'tutors':tutors}, context_instance=RequestContext(Request)) #return object_list(Request, Task.objects.all(), template_object_name='tasks') -#@login_required +@login_required def taskDetail(Request,task_id): my_solutions = Task.objects.get(pk=task_id).solution_set.filter(author = Request.user) return object_detail(Request, Task.objects.all(), task_id, extra_context={'solutions': my_solutions}, template_object_name='task') diff --git a/src/praktomat/templates/admin/tasks/task/model_solution.html b/src/praktomat/templates/admin/tasks/task/model_solution.html index 99d42379..139087aa 100755 --- a/src/praktomat/templates/admin/tasks/task/model_solution.html +++ b/src/praktomat/templates/admin/tasks/task/model_solution.html @@ -18,16 +18,20 @@ -
-

Checker results

- {% with task.model_solution.checkerresult_set.all as results %} - {% include "solutions/checker_results_inline.html" %} - {% endwith %} -
-
-

Files

- {% with task.model_solution.solutionfile_set.all as solutionfiles %} - {% include "solutions/solution_files_inline.html" %} - {% endwith %} -
+{% if task.model_solution.checkerresult_set %} +
+

Checker results

+ {% with task.model_solution.checkerresult_set.all as results %} + {% include "solutions/checker_results_inline.html" %} + {% endwith %} +
+{% endif %} +{% if task.model_solution.solutionfile_set.all %} +
+

Files

+ {% with task.model_solution.solutionfile_set.all as solutionfiles %} + {% include "solutions/solution_files_inline.html" %} + {% endwith %} +
+{% endif %} {% endblock %} diff --git a/src/praktomat/templates/attestation/attestation_edit.html b/src/praktomat/templates/attestation/attestation_edit.html index a201e9a4..a374f8e4 100755 --- a/src/praktomat/templates/attestation/attestation_edit.html +++ b/src/praktomat/templates/attestation/attestation_edit.html @@ -36,9 +36,9 @@ $("#file"+index).addClass("activeFile"); } -{% endblock %}{% block content %} - -{% trans "Back to attestation list" %} +{% endblock %} +{% block breadcrumbs %} {{block.super}} > {{solution.task.title}} > My attestations > Attestation {% endblock %} +{% block content %}

{{solution.task.title}}

@@ -80,11 +80,10 @@

Checker results

Annotated solution files

- {{ attestFileFormSet.non_form_errors }}
- - {{ attestFileFormSet }} -
+ {% with attestFileFormSet as formset %} + {% include "forms/formset_as_div.html" %} + {% endwith %}
-{% endblock %} \ No newline at end of file +
{% endblock %} \ No newline at end of file diff --git a/src/praktomat/templates/attestation/attestation_list.html b/src/praktomat/templates/attestation/attestation_list.html index 6556d871..8838e223 100755 --- a/src/praktomat/templates/attestation/attestation_list.html +++ b/src/praktomat/templates/attestation/attestation_list.html @@ -1,7 +1,7 @@ {% extends "base.html" %} -{% load i18n %}{% block content %} - -{% trans "Back to task list" %} +{% load i18n %} +{% block breadcrumbs %} {{block.super}} > {{task.title}} > Attestations{% endblock %} +{% block content %}

{{task.title}}

@@ -12,7 +12,7 @@

{% trans "Solutions ready to be attested" %}

Solution {{forloop.counter}}

{% for attestation in solution.attestation_set.all %}
- {%ifequal attestation.author requestuser %} + {% if attestation.author = requestuser %} {% if attestation.final %} {% if attestation.published %} @@ -32,7 +32,7 @@

Solution {{forloop.counter}}

View Attestation by {{author}} {% endblocktrans %} - {% endifequal %} + {% endif %} {{ attestation.private_comment|truncatewords:15}}
@@ -43,6 +43,8 @@

Solution {{forloop.counter}}

{% trans "Add Attestation" %}
{% endif %}
+ {% empty %} +

There are no solutions yet.

{%endfor%}
{% csrf_token %} @@ -50,10 +52,10 @@

Solution {{forloop.counter}}

{% if published %} Allready published {% else %} - {% if not publishable %} Not all attestations are read to be published. {% endif %} + {% if not publishable %} Not all attestations are read to be published or the submission deadline isn't reached. {% endif %} {% endif %}
-{% endblock %} \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/src/praktomat/templates/attestation/attestation_view.html b/src/praktomat/templates/attestation/attestation_view.html index 5901cf0b..65609419 100755 --- a/src/praktomat/templates/attestation/attestation_view.html +++ b/src/praktomat/templates/attestation/attestation_view.html @@ -1,5 +1,5 @@ {% extends "base.html" %} -{% load highlight %}{% load i18n %} +{% load highlight %}{% load i18n %}{% load in_group %} {% block extrahead %}{{ block.super }} -{% endblock %}{% block content %} - -{% trans "Back to task list" %} +{% endblock %} +{% block breadcrumbs %} {{block.super}} > {{attest.solution.task.title}} +{% if user|in_group:"Tutor"%} + > My attestations + > Attestation + > Preview +{% else %} + > My solutions + > Solution {{attest.solution.id}} + > Attestation {{attest.id}} +{% endif %} +{% endblock %} +{% block content %}

{% trans "Attestation"%}: {{attest.solution.task.title}}

-by {{attest.author.get_full_name}} +

by {{attest.author.get_full_name}}

-

Comment

-
- {{attest.public_comment}} -
- -

Ratings

-{% for ratingresult in attest.ratingresult_set.all%} -
-

{{ratingresult.aspect.name}}: {{ratingresult.mark}}

- {{ratingresult.aspect.description}} +{% if attest.public_comment %} +

Comment

+
+ {{attest.public_comment}}
-{%endfor%} +{% endif %} + +{% if attest.ratingresult_set.all %} +

Ratings

+ {% for ratingresult in attest.ratingresult_set.all%} +
+

{{ratingresult.aspect.name}}: {{ratingresult.mark}}

+ {{ratingresult.aspect.description}} +
+ {%endfor%} +{% endif %}

{% trans "Annotated Files" %}

{% for anotfile in attest.annotatedsolutionfile_set.all%} @@ -39,7 +53,6 @@

{{anotfile}}

{%endfor%} - {% if submitable %}

{% csrf_token %} diff --git a/src/praktomat/templates/base.html b/src/praktomat/templates/base.html index 2c3f1178..29f59280 100755 --- a/src/praktomat/templates/base.html +++ b/src/praktomat/templates/base.html @@ -4,7 +4,7 @@ - + {% block extrahead %}{% endblock %} @@ -13,7 +13,7 @@
-
+
+ {% block breadcrumbs %}Home{% endblock %} +
{% block content %}{% endblock %}
diff --git a/src/praktomat/templates/solutions/js_redirect.html b/src/praktomat/templates/solutions/js_redirect.html deleted file mode 100755 index 436507f9..00000000 --- a/src/praktomat/templates/solutions/js_redirect.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/praktomat/templates/solutions/solution_detail.html b/src/praktomat/templates/solutions/solution_detail.html index 794e382f..91154dad 100755 --- a/src/praktomat/templates/solutions/solution_detail.html +++ b/src/praktomat/templates/solutions/solution_detail.html @@ -3,9 +3,9 @@ {% block extrahead %}{{ block.super }} -{% endblock %}{% block content %} - -{% trans "Back to solution list" %} +{% endblock %} +{% block breadcrumbs %} {{block.super}} > {{solution.task.title}} > My solutions > Solution {{solution.id}} {% endblock %} +{% block content %}

{{solution.task.title}}

@@ -13,23 +13,25 @@

{{solution.task.title}}

You have commited this Solution.

{% endif %} +{% if submission_possible %} + {% csrf_token %} + + +{% endif %} + {% if solution.accepted %} {% if solution.warnings %} -

{% trans "You have passed all required tests." %} +

{% trans "You have passed all required tests." %} {% if submission_possible %}{% trans "Nevertheless you've got at least one warning and should consider correcting it before submitting." %}{% endif %}

{% else %} -

{% trans "Congratulations you have passed all required tests." %} +

{% trans "Congratulations you have passed all required tests." %} {% if submission_possible %}{% trans "You can go ahead an make your submission final." %}{% endif %}

{% endif %} {% else %} -

{% trans "Sorry, you haven't passed all required tests." %} +

{% trans "Sorry, you haven't passed all required tests." %} {% if submission_possible %}{% trans "Please corect the errors below and try again!" %}{% endif %}

{% endif %} -{% if submission_possible %} -
{% csrf_token %} - -
-{% endif %} +

{% trans "Results" %}

{% with solution.publicCheckerResults as results %} @@ -41,4 +43,4 @@

{% trans "Files" %}

{% include "solutions/solution_files_inline.html" %} {% endwith %} -{% endblock %} \ No newline at end of file +
{% endblock %} \ No newline at end of file diff --git a/src/praktomat/templates/solutions/solution_list.html b/src/praktomat/templates/solutions/solution_list.html index db7b37f6..9214fdde 100755 --- a/src/praktomat/templates/solutions/solution_list.html +++ b/src/praktomat/templates/solutions/solution_list.html @@ -2,34 +2,11 @@ {% load i18n %} {% block extrahead %}{{ block.super }} - - -{% endblock %}{% block content %} + +{% endblock %} +{% block breadcrumbs %} {{block.super}} > {{task.title}} > My solutions{% endblock %} -{% trans "Back to task list" %} +{% block content %}

{{task.title}}

-

{%trans "Upload solution" %}

{% if submission_possible %} - {%trans "Time left:" %} {{ task.submission_date|timeuntil }}

- + {%trans "Time left:" %} {{ task.submission_date|timeuntil }} +

{%trans "Upload solution" %}

{% csrf_token %} - - {{ formset.non_form_errors }} - {{ formset }} - - - - - -
- -
+ {% include "forms/formset_as_div.html" %} +
{% else %} - {%trans "You've allreay commited a solution. Therefore resubmission is not possible." %} +

{%trans "Upload solution" %}

+ {%trans "You've allreay commited a solution or the deadline has past. Therefore (re)submission is not possible." %} {% endif %}
- - - - - - - -{% if solutions %}
+
+
+
+ +

{% trans "Submitted solutions" %}

- {% for solution in solutions %}
{% spaceless %} @@ -129,14 +80,15 @@

{% trans "Submitted solutions" %}

Attestation by {{attest.author.get_full_name}}
{% endif %}
- {%endfor%} - - {%endfor%}
-{% endif %} - + {%endfor%} + {% empty %} + {%trans "You have't uploaded any solutions jet." %} + {%endfor%} +
-

Uploading & testing solution ...

-
+ + loading +

Please wait while your solution is examined.

-{% endblock %} \ No newline at end of file +
{% endblock %} \ No newline at end of file diff --git a/src/praktomat/templates/tasks/task_detail.html b/src/praktomat/templates/tasks/task_detail.html index 6fe870d9..a5760a35 100755 --- a/src/praktomat/templates/tasks/task_detail.html +++ b/src/praktomat/templates/tasks/task_detail.html @@ -3,15 +3,23 @@ {% block extrahead %}{{ block.super }} {% endblock %} -{% block content %} - -{% trans "Back to task list" %} +{% block breadcrumbs %} + {{ block.super }} > {{task.title}} +{% endblock %} +{% block content %}
+ + Submission date: {{task.submission_date.date}} +

{{task.title}}

-{% blocktrans with task.publication_date.date as pub_date and task.submission_date.date as sub_date %} - Publication date: {{pub_date}}, Submission date: {{sub_date}} -{% endblocktrans %} +

+{% if user|in_group:"Tutor"%} + {% trans "My Attestations" %} +{% endif %} +{% if user|in_group:"User"%} + {% trans "My Solutions" %} +{% endif %}

{{task.description|markdown:"codehilite"}} -{% endblock %} +

{% endblock %} diff --git a/src/praktomat/templates/tasks/task_list.html b/src/praktomat/templates/tasks/task_list.html index 64a72111..491a03f3 100755 --- a/src/praktomat/templates/tasks/task_list.html +++ b/src/praktomat/templates/tasks/task_list.html @@ -1,6 +1,7 @@ {% extends "base.html" %} {% load i18n %} {% load in_group %} {% load chunks %} -{% block content %} +{% block breadcrumbs %}Home{% endblock %} +{% block content %}

{% trans "Welcome" %}, {% firstof user.get_full_name user.username %}!

@@ -20,7 +21,7 @@

{{task.title}}

{% if user|in_group:"User" %} {% trans "Solutions"%} {% endif %} - {% if user.is_superuser or user|in_group:"Tutor"%} + {% if user|in_group:"Tutor"%} {% trans "Attestation"%} {% endif %} {% if user.is_superuser or user|in_group:"Trainer"%} @@ -40,7 +41,7 @@

{{task.title}}

{% if user|in_group:"User" %} {% trans "Solutions"%} {% endif %} - {% if user.is_superuser or user|in_group:"Tutor"%} + {% if user|in_group:"Tutor"%} {% trans "Attestation"%} {% endif %} {% if user.is_superuser or user|in_group:"Trainer"%} @@ -54,4 +55,4 @@

{{task.title}}

-{% endblock %} \ No newline at end of file +
{% endblock %} \ No newline at end of file diff --git a/src/praktomat/urls.py b/src/praktomat/urls.py index 36f7045d..cd6cc71d 100755 --- a/src/praktomat/urls.py +++ b/src/praktomat/urls.py @@ -31,7 +31,6 @@ url(r'^solutions/(?P\d+)/$', 'praktomat.solutions.views.solution_detail', name='solution_detail'), url(r'^solutions/(?P\d+)/attestation/$', 'praktomat.attestation.views.new_attestation', name='new_attestation'), url(r'^tasks/(?P\d+)/solutionupload/$', 'praktomat.solutions.views.solution_list', name='solution_list'), - url(r'^checkerprogress/$', 'praktomat.checker.views.checker_progress', name='checker_progress'), #Attestation url(r'^tasks/(?P\d+)/attestation/statistics$', 'praktomat.attestation.views.statistics', name='statistics'),