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 %}