diff --git a/course/flow.py b/course/flow.py
index 19957024d..28aa92a7a 100644
--- a/course/flow.py
+++ b/course/flow.py
@@ -2080,11 +2080,6 @@ def view_flow_page(
"viewing_prior_version": viewing_prior_version,
"prev_answer_visits": prev_answer_visits,
"prev_visit_id": prev_visit_id,
-
- # Wrappers used by JavaScript template (tmpl) so as not to
- # conflict with Django template's tag wrapper
- "JQ_OPEN": "{%",
- "JQ_CLOSE": "%}",
}
if fpctx.page.expects_answer() and fpctx.page.is_answer_gradable():
@@ -2103,7 +2098,8 @@ def view_flow_page(
@course_view
-def get_prev_answer_visits_dropdown_content(pctx, flow_session_id, page_ordinal):
+def get_prev_answer_visits_dropdown_content(
+ pctx, flow_session_id, page_ordinal, prev_visit_id):
"""
:return: serialized prev_answer_visits items for past-submission-dropdown
"""
@@ -2120,16 +2116,13 @@ def get_prev_answer_visits_dropdown_content(pctx, flow_session_id, page_ordinal)
FlowPageData, flow_session=flow_session, page_ordinal=page_ordinal)
prev_answer_visits = get_prev_answer_visits_qset(page_data)
- def serialize(obj):
- return {
- "id": obj.id,
- "visit_time": (
- format_datetime_local(as_local_time(obj.visit_time))),
- "is_submitted_answer": obj.is_submitted_answer,
- }
-
- return http.JsonResponse(
- {"result": [serialize(visit) for visit in prev_answer_visits]})
+ return render(request, "course/flow-page-prev-visits.html", {
+ "prev_answer_visits": prev_answer_visits,
+ "prev_visit_id": (
+ None
+ if prev_visit_id == "None" else
+ int(prev_visit_id)),
+ })
def get_pressed_button(form: StyledForm) -> str:
diff --git a/course/grading.py b/course/grading.py
index af2bd8179..df4ed319f 100644
--- a/course/grading.py
+++ b/course/grading.py
@@ -33,7 +33,7 @@
PermissionDenied,
SuspiciousOperation,
)
-from django.shortcuts import get_object_or_404, redirect # noqa
+from django.shortcuts import get_object_or_404, redirect, render # noqa
from django.utils.translation import gettext as _
from course.constants import participation_permission as pperm
@@ -53,8 +53,6 @@
)
from course.views import get_now_or_fake_time
from relate.utils import (
- as_local_time,
- format_datetime_local,
retry_transaction_decorator,
)
@@ -92,7 +90,8 @@ def get_prev_visit_grades(
@course_view
-def get_prev_grades_dropdown_content(pctx, flow_session_id, page_ordinal):
+def get_prev_grades_dropdown_content(pctx, flow_session_id, page_ordinal,
+ prev_grade_id):
"""
:return: serialized prev_grades items for rendering past-grades-dropdown
"""
@@ -111,17 +110,13 @@ def get_prev_grades_dropdown_content(pctx, flow_session_id, page_ordinal):
prev_grades = get_prev_visit_grades(pctx.course_identifier,
flow_session_id, page_ordinal, True)
- def serialize(obj):
- return {
- "id": obj.id,
- "visit_time": (
- format_datetime_local(as_local_time(obj.visit.visit_time))),
- "grade_time": format_datetime_local(as_local_time(obj.grade_time)),
- "value": obj.value(),
- }
-
- return http.JsonResponse(
- {"result": [serialize(pgrade) for pgrade in prev_grades]})
+ return render(pctx.request, "course/prev-grades-dropdown.html", {
+ "prev_grades": prev_grades,
+ "prev_grade_id": (
+ None
+ if prev_grade_id == "None" else
+ int(prev_grade_id)),
+ })
# {{{ grading driver
@@ -398,12 +393,6 @@ def grade_flow_page(
"correct_answer": fpctx.page.correct_answer(
fpctx.page_context, fpctx.page_data.data,
answer_data, grade_data),
-
-
- # Wrappers used by JavaScript template (tmpl) so as not to
- # conflict with Django template's tag wrapper
- "JQ_OPEN": "{%",
- "JQ_CLOSE": "%}",
})
diff --git a/course/templates/course/course-base-with-markup.html b/course/templates/course/course-base-with-markup.html
index 391728f6d..165eb325a 100644
--- a/course/templates/course/course-base-with-markup.html
+++ b/course/templates/course/course-base-with-markup.html
@@ -4,13 +4,5 @@
{% block bundle_loads %}
{# contains mathjax config #}
-
-
-
-
{% endblock %}
diff --git a/course/templates/course/course-datatables.html b/course/templates/course/course-datatables.html
index 845523a84..9c48be2d4 100644
--- a/course/templates/course/course-datatables.html
+++ b/course/templates/course/course-datatables.html
@@ -3,7 +3,4 @@
{% block bundle_loads %}
-
{% endblock %}
diff --git a/course/templates/course/flow-page-prev-visits.html b/course/templates/course/flow-page-prev-visits.html
new file mode 100644
index 000000000..8c608f74c
--- /dev/null
+++ b/course/templates/course/flow-page-prev-visits.html
@@ -0,0 +1,21 @@
+{% load i18n %}
+
+{% if not prev_answer_visits %}
+
+{% else %}
+ {% for visit in prev_answer_visits %}
+
+ {% if forloop.first %}
+
+ {% else %}
+
+ {% endif %}
+ {% if visit.id == prev_visit_id %}{% endif %}
+ {{ visit.visit_time }}
+ {% if forloop.first %}(current){% endif %}
+ {% if visit.id == prev_visit_id %}{% endif %}
+ {% if visit.is_submitted_answer %}(submitted){% endif %}
+
+
+ {% endfor %}
+{% endif %}
diff --git a/course/templates/course/flow-page.html b/course/templates/course/flow-page.html
index 6c0787040..8fa6c81a9 100644
--- a/course/templates/course/flow-page.html
+++ b/course/templates/course/flow-page.html
@@ -130,11 +130,19 @@
{% if expects_answer %}
-
-
+
-
@@ -545,51 +553,4 @@
{% endblock %}
-{% block page_bottom_javascript_extra %}
-
- {% if expects_answer %}
-
-
- {# https://github.com/blueimp/JavaScript-Templates #}
-
- {% endif %}
- {{ block.super }}
-{% endblock %}
{# vim: set foldmethod=marker: #}
diff --git a/course/templates/course/grade-flow-page.html b/course/templates/course/grade-flow-page.html
index ee2aea81a..d66d15ab3 100644
--- a/course/templates/course/grade-flow-page.html
+++ b/course/templates/course/grade-flow-page.html
@@ -111,12 +111,18 @@ {% trans "Grading" %}: {{ flow_identifier}} - {{ page_data.group_id }}/
{% if expects_answer %}
-