Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion evap/staff/templates/staff_evaluation_textanswers_quick.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ <h5 class="modal-title" id="hotkeys-modal-title">Hotkeys</h5>
<div
class="slider-item card-body"
data-layer="2"
id="textanswer-{{ answer.id }}"
data-id="{{ answer.id }}"
{% if contributor %} data-contribution="yes"{% endif %}
{% if answer.is_reviewed %}
Expand Down Expand Up @@ -200,6 +201,7 @@ <h5 class="modal-title" id="hotkeys-modal-title">Hotkeys</h5>
document.querySelector("#shared-full-textanswer-flag-form"),
"{% url 'staff:evaluation_textanswers_skip' %}",
);
slider.attach();
const hash = document.location.hash
slider.attach(hash.startsWith("#textanswer-") ? hash.substring(12) : null)
</script>
{% endblock %}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<div>{% translate 'Flag' %}</div>
</div>
{% for answer in result.answers %}
<div class="grid-row" id="{{ answer.id }}">
<div class="grid-row" id="textanswer-{{ answer.id }}">
<div>
{{ answer.answer|linebreaksbr }}
{% if answer.original_answer %}
Expand All @@ -26,7 +26,7 @@
</div>
<div>
{% if user.is_manager %}
<a class="btn btn-sm btn-outline-secondary" href="{% url 'staff:evaluation_textanswer_edit' answer.id %}"><span class="fas fa-pencil"></a>
<a class="btn btn-sm btn-outline-secondary" href="{% url 'staff:evaluation_textanswer_edit' answer.id %}?next-view={{ view }}"><span class="fas fa-pencil"></a>
{% endif %}
</div>
<div>
Expand Down
10 changes: 7 additions & 3 deletions evap/staff/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1716,7 +1716,6 @@ def evaluation_textanswers(request: HttpRequest, evaluation_id: int) -> HttpResp
)

template_data = {"semester": semester, "evaluation": evaluation, "view": view}

if view == "quick":
visited = request.session.get("review-visited", set())
skipped = request.session.get("review-skipped", set())
Expand Down Expand Up @@ -1828,11 +1827,16 @@ def evaluation_textanswer_edit(request, textanswer_id):
assert_textanswer_review_permissions(evaluation)

form = TextAnswerForm(request.POST or None, instance=textanswer)

view = request.GET.get("next-view")
if form.is_valid():
form.save()
# jump to edited answer
url = reverse("staff:evaluation_textanswers", args=[evaluation.pk], fragment=str(textanswer.id))
url = reverse(
"staff:evaluation_textanswers",
args=[evaluation.pk],
query={"view": view} if view else None,
fragment="textanswer-" + str(textanswer_id),
)
return HttpResponseRedirect(url)

template_data = {
Expand Down
16 changes: 11 additions & 5 deletions evap/static/ts/src/quick-review-slider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ export class QuickReviewSlider {
//
// DOM
//
public attach = () => {
public attach = (initalTextAnswerId?: string) => {
this.reviewDecisionForm.addEventListener("submit", this.reviewDecisionFormSubmitHandler);
this.flagForm.addEventListener("submit", this.flagFormSubmitHandler);
this.slider.querySelectorAll<HTMLInputElement>("input[name=is_flagged]").forEach(isFlaggedInput => {
Expand All @@ -137,7 +137,7 @@ export class QuickReviewSlider {
trigger.addEventListener("click", this.startOverHandler(trigger)),
);

this.startOver(StartOverWhere.Undecided);
this.startOver(initalTextAnswerId ?? StartOverWhere.Undecided);
this.updateNextEvaluation();
};

Expand Down Expand Up @@ -377,15 +377,21 @@ export class QuickReviewSlider {
//
// Sliding
//
public startOver = (where: StartOverWhere) => {
public startOver = (where: StartOverWhere | string) => {
const decided = this.slider.querySelectorAll<HTMLElement>(`[data-layer="${Layer.Answer}"][data-review]`);
const undecided = this.slider.querySelectorAll<HTMLElement>(
`[data-layer="${Layer.Answer}"]:not([data-review])`,
);
this.answerSlides = Array.from(decided).concat(Array.from(undecided));

const startOverOnUndecided = where === StartOverWhere.Undecided && undecided.length > 0;
const startIndex = startOverOnUndecided ? decided.length : 0;
let startIndex;
if (where === StartOverWhere.All || where === StartOverWhere.Undecided) {
const startOverOnUndecided = where === StartOverWhere.Undecided && undecided.length > 0;
startIndex = startOverOnUndecided ? decided.length : 0;
} else {
startIndex = this.answerSlides.findIndex(element => element.id === `textanswer-${where}`);
assert(startIndex != -1);
}
this.slideTo(startIndex);
this.updateButtons();
};
Expand Down