Commit 71395afb by Albert (AJ) St. Aubin Committed by GitHub

Merge pull request #947 from edx/aj/TNL-5196_headers

Header updated for accessibility
parents de57ee99 f2039cdd
......@@ -5,7 +5,7 @@
{% if assessment.individual_assessments %}
{% for individual_assessment in assessment.individual_assessments %}
{% if individual_assessment.feedback %}
<h5 class="answer_title">
<div class="answer_title">
<span class="answer__source">
{% if individual_assessment.option %}
{% blocktrans with title=individual_assessment.title grade=individual_assessment.option.label start_tag='<span class="answer__source__value">'|safe end_tag="</span>"|safe %}
......@@ -17,7 +17,7 @@
</span>
{% endif %}
</span>
</h5>
</div>
<div class="feedback__value">
<p class="feedback__value__raw">{{ individual_assessment.feedback }}</p>
......@@ -25,11 +25,11 @@
{% endif %}
{% endfor %}
{% else %}
<h5 class="answer_title">
<div class="answer_title">
<span class="answer__source">
<span class="answer__source__value">{{ title }}</span>
</span>
</h5>
</div>
<div class="feedback__value">
<p class="feedback__value__raw">{{ assessment.feedback }}</p>
......
......@@ -2,7 +2,7 @@
{% spaceless %}
<li id="openassessment__grade__{{ xblock_id }}" class="openassessment__steps__step step--grade is--initially--collapsed has--error ui-slidable__container" tabindex="-1">
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" aria-expanded="false" id="oa_grade_{{ xblock_id }}" aria-controls="oa_grade_{{ xblock_id }}_content">
<span class="wrapper--copy">
<span class="step__label">{% trans "Your Grade" %}: </span>
......@@ -22,7 +22,7 @@
</span>
</span>
</button>
</h2>
</h4>
</header>
<div class="ui-slidable__content" id="oa_grade_{{ xblock_id }}_content" aria-labelledby="oa_grade_{{ xblock_id }}">
......
......@@ -2,7 +2,7 @@
{% spaceless %}
<li id="openassessment__grade__{{ xblock_id }}" class="openassessment__steps__step step--grade is--complete is--showing has--grade ui-slidable__container {% if allow_latex %}allow--latex{% endif %}" tabindex="-1">
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" aria-expanded="true" id="oa_grade_{{ xblock_id }}" aria-controls="oa_grade_{{ xblock_id }}_content">
<span class="wrapper--copy">
{% if score %}
......@@ -21,16 +21,15 @@
{% endif %}
</span>
</button>
</h2>
</h4>
</header>
<div class="ui-slidable__content" id="oa_grade_{{ xblock_id }}_content" aria-labelledby="oa_grade_{{ xblock_id }}">
<div class="wrapper--step__content">
<div class="step__content">
<article class="submission__answer__display step__content__section">
<h3 class="submission__answer__display__title">{% trans "Your Response" %}</h3>
{% trans "Your response to the question above:" as translated_label %}
{% trans "Your Response" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=student_submission.answer answer_text_label=translated_label %}
{% trans "Your Upload" as translated_header %}
......@@ -38,13 +37,13 @@
</article>
<article class="submission__peer-evaluations step__content__section">
<h3 class="submission__peer-evaluations__title">{% trans "Assessments of Your Response" %}</h3>
<h5 class="submission__peer-evaluations__title">{% trans "Assessments of Your Response" %}</h5>
<ol class="list submission__peer-evaluations__questions">
{% for criterion in grade_details.criteria %}
{% with criterion_num=forloop.counter %}
<li class="question question--{{ criterion_num }} ui-slidable__container is--showing">
<h4 class="question__title ui-slidable__control">
<div class="question__title ui-slidable__control">
<button class="ui-slidable" id="oa_grade_{{ xblock_id }}_criteria_{{ criterion_num }}" aria-expanded="true" aria-controls="oa_grade_{{ xblock_id }}_criteria_{{ criterion_num }}_content">
<span class="icon fa fa-caret-right" aria-hidden="true"></span>
<span class="question__title__copy">{{ criterion.label }}</span>
......@@ -60,7 +59,7 @@
</span>
</span>
{% endif %}
</h4>
</div>
<div class="ui-slidable__content" aria-labelledby="oa_grade_{{ xblock_id }}_criteria_{{ criterion_num }}" id="oa_grade_{{ xblock_id }}_criteria_{{ criterion_num }}_content">
{% if criterion.options %}
......@@ -84,12 +83,12 @@
{% endfor %}
{% if grade_details.additional_feedback %}
<li class="question question--feedback ui-slidable__container is--showing">
<h4 class="question__title ui-slidable__control">
<div class="question__title ui-slidable__control">
<button class="ui-slidable" aria-expanded="true" id="oa_grade_{{ xblock_id }}_feedback" aria-controls="oa_grade_{{ xblock_id }}_feedback_content">
<span class="icon fa fa-caret-right" aria-hidden="true"></span>
<span class="question__title__copy">{% trans "Additional comments on your response" %}</span>
</button>
</h4>
</div>
<ul class="question__answers ui-slidable__content" id="oa_grade_{{ xblock_id }}_feedback_content" aria-labelledby="oa_grade_{{ xblock_id }}_feedback">
{% for feedback in grade_details.additional_feedback %}
......@@ -103,12 +102,12 @@
{% if peer_assessments %}
<form class="submission__feedback submission__feedback step__content__section ui-slidable__container is--showing" method="post">
<h3 class="submission__feedback__title ui-slidable__control">
<div class="submission__feedback__title ui-slidable__control">
<button class="ui-slidable" aria-expanded="true" id="oa_grade_feedback_{{ xblock_id }}" aria-controls="oa_grade_feedback_{{ xblock_id }}__content">
<span class="icon fa fa-caret-right" aria-hidden="true"></span>
<span class="submission__feedback__title__copy">{% trans "Provide Feedback on Peer Assessments" %}</span>
<span class="submission__feedback__title__copy">{% trans "Provide feedback on peer assessments" %}</span>
</button>
</h3>
</div>
<div class="ui-slidable__content" aria-labelledby="oa_grade_feedback_{{ xblock_id }}" id="oa_grade_feedback_{{ xblock_id }}__content">
<div class="submission__feedback__content {{ has_submitted_feedback|yesno:"is--submitted," }}">
......@@ -121,7 +120,7 @@
<div class="message message--complete {{ has_submitted_feedback|yesno:",is--hidden" }}"
{{ has_submitted_feedback|yesno:'aria-hidden=false,aria-hidden=true' }}>
<h3 class="message__title">{% trans "Your Feedback Has Been Submitted" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
<p>{% trans "Your feedback has been submitted. Course staff will be able to see this feedback when they review course records." %}</p>
</div>
......@@ -135,7 +134,7 @@
<ol class="list list--fields submission__feedback__fields {{ has_submitted_feedback|yesno:"is--hidden," }}"
{{ has_submitted_feedback|yesno:'aria-hidden=true,aria-hidden=false' }}>
<li class="field field-group field--radio feedback__overall">
<h4 id="feedback__overall__prompt__{{ xblock_id }}" class="field-group__label">{% trans "Select the statements below that best reflect your experience with peer assessments" %}:</h4>
<h5 id="feedback__overall__prompt__{{ xblock_id }}" class="field-group__label">{% trans "Select the statements below that best reflect your experience with peer assessments." %}</h5>
<ol class="list--options">
<li class="option option--useful">
<input type="checkbox"
......@@ -189,7 +188,7 @@
<div class="submission__feedback__actions {{ has_submitted_feedback|yesno:"is--hidden," }}"
{{ has_submitted_feedback|yesno:'aria-hidden=true,aria-hidden=false' }}>
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not submit your feedback" %}</h3>
<h5 class="message__title">{% trans "We could not submit your feedback" %}</h5>
<div class="message__content"></div>
</div>
......
......@@ -2,7 +2,7 @@
{% spaceless %}
<li id="openassessment__grade__{{ xblock_id }}" class="openassessment__steps__step step--grade is--unfinished is--initially--collapsed ui-slidable__container" tabindex="-1">
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" aria-expanded="false" id="oa_grade_{{ xblock_id }}" aria-controls="oa_grade_{{ xblock_id }}">
<span class="wrapper--copy">
<span class="step__label">{% trans "Your Grade" %}: </span>
......@@ -11,7 +11,7 @@
</span>
</span>
</button>
</h2>
</h4>
</header>
<div class="ui-slidable__content" aria-labelledby="oa_grade_{{ xblock_id }}" id="oa_grade_{{ xblock_id }}_content">
......
......@@ -2,7 +2,7 @@
{% spaceless %}
<li id="openassessment__grade__{{ xblock_id }}" class="openassessment__steps__step step--grade is--unstarted is--initially--collapsed ui-slidable__container" tabindex="-1">
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" aria-expanded="false" id="oa_grade_{{ xblock_id }}" aria-controls="oa_grade_{{ xblock_id }}_content">
<span class="wrapper--copy">
<span class="step__label">{% trans "Your Grade" %}:</span>
......@@ -11,7 +11,7 @@
</span>
</span>
</button>
</h2>
</h4>
</header>
<div class="ui-slidable__content" aria-labelledby="oa_grade_{{ xblock_id }}" id="oa_grade_{{ xblock_id }}_content">
......
......@@ -2,7 +2,7 @@
{% spaceless %}
<li id="openassessment__grade__{{ xblock_id }}" class="openassessment__steps__step step--grade is--showing {{ is_waiting_staff }} ui-slidable__container" tabindex="-1">
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" aria-expanded="true" id="oa_grade_{{ xblock_id }}" aria-controls="oa_grade_{{ xblock_id }}_content">
<span class="wrapper--copy">
<span class="step__label">{% trans "Your Grade" %}:</span>
......@@ -11,7 +11,7 @@
</span>
</span>
</button>
</h2>
</h4>
</header>
<div class="ui-slidable__content" aria-labelledby="oa_grade_{{ xblock_id }}" id="oa_grade_{{ xblock_id }}_content">
......
......@@ -2,27 +2,26 @@
{% spaceless %}
<li id="openassessment__leaderboard__{{ xblock_id }}" class="openassessment__steps__step step--leaderboard is--complete ui-slidable__container is--showing {% if allow_latex %} allow--latex{% endif %}" tabindex="-1">
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" aria-expanded="true" id="oa_leaderboard_{{ xblock_id }}" aria-controls="oa_leaderboard_{{ xblock_id }}_content">
<span class="wrapper--copy">
<span class="step__label">{% trans "Top Responses" %} </span>
</span>
</button>
</h2>
</h4>
</header>
<div class="wrapper--step__content ui-slidable__content" aria-labelledby="oa_leaderboard_{{ xblock_id }}" id="oa_leaderboard_{{ xblock_id }}_content">
<h3 class="leaderboard__title">{% trans "Top-Scoring Responses for This Assignment" %}</h3>
<ol class="list leaderboard__score__list">
{% for topscore in topscores %}
<li class="leaderboard__score__item">
<h4 class="leaderboard__list__number">{{ forloop.counter }}</h4>
<div class="leaderboard__list__number">{{ forloop.counter }}</div>
{% with num_points=topscore.score %}
<h4 class="leaderboard__score__title">
<div class="leaderboard__score__title">
{% blocktrans %}{{ num_points }} points{% endblocktrans %}
</h4>
</div>
{% endwith %}
<div class="leaderboard__answer">
{% trans "Your peer's response to the question above:" as translated_label %}
{% trans "Your peer's response to the question above" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=topscore.submission.answer answer_text_label=translated_label %}
{% include "openassessmentblock/oa_uploaded_file.html" with file_upload_type=file_upload_type file_url=topscore.file class_prefix="submission__answer"%}
</div>
......
......@@ -2,13 +2,13 @@
{% spaceless %}
<li id="openassessment__leaderboard__{{ xblock_id }}" class="openassessment__steps__step step--leaderboard is--initially--collapsed ui-slidable__container" tabindex="-1">
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" aria-expanded="false" id="oa_leaderboard_{{ xblock_id }}" aria-controls="oa_leaderboard_{{ xblock_id }}_content">
<span class="wrapper--copy">
<span class="step__label">{% trans "Top Responses" %} </span>
</span>
</button>
</h2>
</h4>
</header>
<div class="ui-slidable__content" aria-labelledby="oa_leaderboard_{{ xblock_id }}" id="oa_leaderboard_{{ xblock_id }}_content">
......
{% load i18n %}
{% spaceless %}
<div id="openassessment__message__{{ xblock_id }}" class="openassessment__message message">
<h3 class="message__title">
{% if not_yet_open %}
{% trans "This Task Is Not Yet Available" %}
{% else %}
{% trans "This Assignment Has Closed" %}
{% endif %}
</h3>
<h4 class="message__title">{% trans "Status" %}</h4>
<div class="message__content">
<p>
{% if not_yet_open %}
{% trans "Check back to complete the assignment once this section has opened." %}
{% trans "This task is not yet available. Check back to complete the assignment once this section has opened." %}
{% else %}
{% trans "One or more deadlines for this assignment have passed. You will receive an incomplete grade for this assignment." %}
{% trans "This assignment has closed. One or more deadlines for this assignment have passed. You will receive an incomplete grade for this assignment." %}
{% endif %}
</p>
</div>
......
{% load i18n %}
{% spaceless %}
<div id="openassessment__message__{{ xblock_id }}" class="openassessment__message message">
<h3 class="message__title">{% trans "You Have Completed This Assignment" %} </h3>
<h4 class="message__title">{% trans "Status" %} </h4>
<div class="message__content">
<p>
{% if waiting %}
<p>{% trans "Your final grade will be available when the assessments of your response are complete." %}</p>
<p>{% trans "You have completed this assignment. Your final grade will be available when the assessments of your response are complete." %}</p>
{% else %}
<a data-behavior="ui-scroll" href="#openassessment__grade__{{ xblock_id }}">{% trans "Review your grade and your assessment details." %}</a>
<a data-behavior="ui-scroll" href="#openassessment__grade__{{ xblock_id }}">{% trans "You have completed this assignment. Review your grade and your assessment details." %}</a>
{% endif %}
</p>
</div>
......
{% load i18n %}
{% spaceless %}
<div id="openassessment__message__{{ xblock_id }}" class="openassessment__message message">
<h3 class="message__title">
{% trans "Assignment in progress" %}
</h3>
<h4 class="message__title">{% trans "Status" %}</h4>
<div class="message__content">
<p>
{% if training %}
{% if training_deadline_approaching %}
{% trans "Learner training will close soon. Complete the learner training step to move on." %}
{% trans "This assignment is in progress. Learner training will close soon. Complete the learner training step to move on." %}
{% else %}
{% trans "Complete the learner training step to move on." %}
{% trans "This assignment is in progress. Complete the learner training step to move on." %}
{% endif %}
{% elif self %}
{% if self_not_released %}
{% trans "Check back later when the assessment period has started." %}
{% trans "This assignment is in progress. Check back later when the assessment period has started." %}
{% else %}
{% with start_link='<a data-behavior="ui-scroll" href="#openassessment__self-assessment__'|add:xblock_id|add:'">'|safe %}
{% with start_strong='<strong>'|safe end_strong='</strong>'|safe end_link='</a>'|safe %}
{% if self_approaching %}
{% blocktrans %}
{{ start_strong }}The self assessment step will close soon.{{ end_strong }} You still need to complete the {{ start_link }}self assessment{{ end_link }} step.
{{ start_strong }}This assignment is in progress. The self assessment step will close soon.{{ end_strong }} You still need to complete the {{ start_link }}self assessment{{ end_link }} step.
{% endblocktrans %}
{% else %}
{% blocktrans %}
You still need to complete the {{ start_link }}self assessment{{ end_link }} step.
This assignment is in progress. You still need to complete the {{ start_link }}self assessment{{ end_link }} step.
{% endblocktrans %}
{% endif %}
{% endwith %}
......@@ -32,25 +30,25 @@
{% endif %}
{% elif peer %}
{% if peer_not_released %}
{% trans "Check back later when the assessment period has started." %}
{% trans "This assignment is in progress. Check back later when the assessment period has started." %}
{% else %}
{% with start_link='<a data-behavior="ui-scroll" href="#openassessment__peer-assessment__'|add:xblock_id|add:'">'|safe%}
{% with start_strong='<strong>'|safe end_strong='</strong>'|safe end_link='</a>'|safe %}
{% if peer_approaching and peer_not_available %}
{% blocktrans %}
{{ start_strong }}The peer assessment step will close soon.{{ end_strong }} All submitted peer responses have been assessed. Check back later to see if more learners have submitted responses. You still need to complete the {{ start_link }}peer assessment{{ end_link }} step.
This assignment is in progress.{{ start_strong }}The peer assessment step will close soon.{{ end_strong }} All submitted peer responses have been assessed. Check back later to see if more learners have submitted responses. You still need to complete the {{ start_link }}peer assessment{{ end_link }} step.
{% endblocktrans %}
{% elif not peer_approaching and peer_not_available %}
{% blocktrans %}
All submitted peer responses have been assessed. Check back later to see if more learners have submitted responses. You still need to complete the {{ start_link }}peer assessment{{ end_link }} step.
This assignment is in progress. All submitted peer responses have been assessed. Check back later to see if more learners have submitted responses. You still need to complete the {{ start_link }}peer assessment{{ end_link }} step.
{% endblocktrans %}
{% elif peer_approaching and not peer_not_available %}
{% blocktrans %}
{{ start_strong }}The peer assessment step will close soon.{{ end_strong }} You still need to complete the {{ start_link }}peer assessment{{ end_link }} step.
This assignment is in progress. {{ start_strong }}The peer assessment step will close soon.{{ end_strong }} You still need to complete the {{ start_link }}peer assessment{{ end_link }} step.
{% endblocktrans %}
{% else %}
{% blocktrans %}
You still need to complete the {{ start_link }}peer assessment{{ end_link }} step.
This assignment is in progress. You still need to complete the {{ start_link }}peer assessment{{ end_link }} step.
{% endblocktrans %}
{% endif %}
{% endwith %}
......
{% load i18n %}
{% spaceless %}
<div id="openassessment__message__{{ xblock_id }}" class="openassessment__message message">
<h3 class="message__title">{% trans "Instructions Unavailable" %} </h3>
<h4 class="message__title">{% trans "Instructions Unavailable" %} </h4>
<div class="message__content">
<p> {% trans "The instructions for this step could not be loaded." %}</p>
</div>
......
......@@ -4,7 +4,7 @@
<div class="openassessment problem">
<div class="wrapper--grid">
{% if title %}
<h2 class="openassessment__title problem__header">{% trans title %}</h2>
<h3 class="openassessment__title problem__header">{% trans title %}</h3>
{% endif %}
<div class="wrapper-openassessment__message">
......@@ -22,7 +22,7 @@
{% for assessment in rubric_assessments %}
<li class="{{ assessment.class_id }} openassessment__steps__step is--loading">
<header class="step__header ui-slidable__container">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" aria-expanded="false" disabled>
<span class="step__counter"></span>
<span class="wrapper--copy">
......@@ -31,13 +31,12 @@
</button>
<span class="step__status">
<span class="step__status__label">{% trans "This step's status:" %}</span>
<span class="step__status__value">
<span class="icon fa fa-spinner fa-spin" aria-hidden="true"></span>
<span class="copy">{% trans "Loading" %}</span>
</span>
</span>
</h2>
</h4>
</header>
</li>
{% endfor %}
......
......@@ -6,13 +6,13 @@
<li
class="field field--radio is--required assessment__rubric__question is--showing ui-slidable__container {% if criterion.options %}has--options{% endif %} {{ rubric_type }}__assessment__rubric__question--{{ criterion.order_num }}"
>
<h4 class="question__title ui-slidable__control">
<div class="question__title ui-slidable__control">
<button class="ui-slidable" aria-expanded="true" id="oa_rubric__{{ rubric_type }}__{{ submission.uuid }}__{{ criterion.order_num }}" aria-controls="oa_rubric__{{ rubric_type }}__{{ submission.uuid }}__{{ criterion.order_num }}__content">
<span class="icon fa fa-caret-right" aria-hidden="true"></span>
<span id="{{ rubric_type }}__assessment__rubric__prompt--{{ criterion.order_num }}" class="ui-slidable__control__copy question__title__copy">{{ criterion.prompt }}</span>
<span class="label--required sr">* ({% trans "Required" %})</span>
</button>
</h4>
</div>
<div class="ui-slidable__content" aria-labelledby="oa_rubric__{{ rubric_type }}__{{ submission.uuid }}__{{ criterion.order_num }}" id="oa_rubric__{{ rubric_type }}__{{ submission.uuid }}__{{ criterion.order_num }}__content">
<div class="question__answers">
......
......@@ -3,14 +3,16 @@
<ol class="submission__answer__display__content">
{% for part in answer.parts %}
<li class="submission__answer__part">
<div class="submission__answer__part__text">
<h5 class="submission__answer__part__text__title">{% trans "The question for this section" %}</h5>
</div>
<article class="submission__answer__part__prompt">
<h2 class="submission__answer__part__prompt__title">{% trans "The question for this section." %}</h2>
<div class="submission__answer__part__prompt__value">
{{ part.prompt.description|linebreaks }}
</div>
</article>
<div class="submission__answer__part__text">
<h2 class="submission__answer__part__text__title">{{ answer_text_label }}</h2>
<h5 class="submission__answer__part__text__title">{{ answer_text_label }}</h5>
<div class="submission__answer__part__text__value">
{{ part.text|linebreaks }}
</div>
......
......@@ -4,9 +4,9 @@
{% if file_upload_type %}
{% if header %}
<header class="{{ class_prefix }}__display__header">
<h3 class="{{ class_prefix }}__display__title">
<h5 class="{{ class_prefix }}__display__title">
{{ header }}
</h3>
</h5>
</header>
{% endif %}
......
......@@ -11,7 +11,7 @@
{% spaceless %}
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
{% block button %}
<button class="ui-slidable" aria-expanded="true" id="oa_peer_{{ xblock_id }}" aria-controls="oa_peer{{ xblock_id }}_content">
{% endblock %}
......@@ -34,19 +34,18 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">
{% with graded_string=graded|stringformat:"s" must_grade_string=must_grade|stringformat:"s" %}
{% blocktrans with num_graded='<span class="step__status__value--completed">'|safe|add:graded_string|add:"</span>"|safe num_must_grade='<span class="step__status__value--required">'|safe|add:must_grade_string|add:"</span>"|safe %}
In Progress ({{ num_graded }} of {{ num_must_grade }})
{% with review_num_string=review_num|stringformat:"s" must_grade_string=must_grade|stringformat:"s" %}
{% blocktrans with review_number='<span class="step__status__number--current">'|safe|add:review_num_string|add:"</span>"|safe num_must_grade='<span class="step__status__value--required">'|safe|add:must_grade_string|add:"</span>"|safe %}
In Progress ({{ review_number }} of {{ num_must_grade }})
{% endblocktrans %}
{% endwith %}
</span>
</span>
</span>
{% endblock %}
</h2>
</h4>
</header>
{% block body %}
......@@ -61,17 +60,8 @@
<li class="list--peer-assessments__item">
<article class="peer-assessment peer-assessment--001">
<div class="peer-assessment__display">
<header class="peer-assessment__display__header">
<h3 class="peer-assessment__display__title">
{% with review_num_string=review_num|stringformat:"s" must_grade_string=must_grade|stringformat:"s" %}
{% blocktrans with review_number='<span class="peer-assessment__number--current">'|safe|add:review_num_string|add:'</span>'|safe num_must_grade='<span class="peer-assessment__number--required">'|safe|add:must_grade_string|add:'</span>'|safe %}
Assessment # {{ review_number }} of {{ num_must_grade }}
{% endblocktrans %}
{% endwith %}
</h3>
</header>
{% trans "Your peer's response to the question above:" as translated_label %}
{% trans "Your peer's response to the question above" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=peer_submission.answer answer_text_label=translated_label %}
{% trans "Associated File" as translated_header %}
......@@ -88,7 +78,7 @@
<div class="step__actions">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not submit your assessment" %}</h3>
<h5 class="message__title">{% trans "We could not submit your assessment" %}</h5>
<div class="message__content"></div>
</div>
......
......@@ -13,7 +13,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-exclamation-triangle" aria-hidden="true"></span>
<span class="copy">
......
......@@ -11,7 +11,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">
<span class="icon fa fa-exclamation-triangle" aria-hidden="true"></span>
......@@ -29,9 +28,9 @@
<div class="ui-slidable__content" aria-labelledby="oa_peer_{{ xblock_id }}" id="oa_peer_{{ xblock_id }}_content">
<div class="wrapper--step__content">
<div class="step__message message message--incomplete">
<h3 class="message__title">{% trans "The Due Date for This Step Has Passed" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
<p>{% trans "This step is now closed. You can no longer complete peer assessments or continue with this assignment, and you'll receive a grade of Incomplete." %}</p>
<p>{% trans "The due date for this step has passed. This step is now closed. You can no longer complete peer assessments or continue with this assignment, and you will receive a grade of Incomplete." %}</p>
</div>
</div>
</div>
......
......@@ -7,7 +7,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-check" aria-hidden="true"></span>
<span class="copy">
......@@ -26,13 +25,14 @@
<div class="wrapper--step__content">
<div class="step__message message message--complete">
<h3 class="message__title">{% trans "Peer Assessments Complete" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">{% trans "You have successfully completed all of the required peer assessments for this assignment. You may assess additional peer responses if you want to. Completing additional assessments will not affect your final grade." %}</div>
</div>
<div class="step__actions">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not retrieve additional submissions for assessment" %}</h3>
<h5 class="message__title">{% trans "We could not retrieve additional submissions for assessment" %}</h5>
<div class="message__content"></div>
</div>
<ul class="list list--actions">
......
......@@ -17,7 +17,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-check" aria-hidden="true"></span>
<span class="copy">
......@@ -36,7 +35,7 @@
<div class="wrapper--step__content">
<div class="step__message message message--complete">
<h3 class="message__title">{% trans "Peer Assessments Complete" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">{% trans "You have successfully completed all of the required peer assessments for this assignment. You may assess additional peer responses if you want to. Completing additional assessments will not affect your final grade." %}</div>
</div>
......@@ -49,14 +48,7 @@
<li class="list--peer-assessments__item">
<article class="peer-assessment peer-assessment--001">
<div class="peer-assessment__display">
<header class="peer-assessment__display__header">
<h3 class="peer-assessment__display__title">{% trans "Assessment #" %}
<span class="peer-assessment__number--current">{{ review_num }}</span> of
<span class="peer-assessment__number--required">{{ must_grade }}</span>
</h3>
</header>
{% trans "Your peer's response to the question above:" as translated_label %}
{% trans "Your peer's response to the question above" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=peer_submission.answer answer_text_label=translated_label %}
{% trans "Associated File" as translated_header %}
......@@ -73,7 +65,7 @@
<div class="step__actions">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not submit your assessment" %}</h3>
<h5 class="message__title">{% trans "We could not submit your assessment" %}</h5>
</div>
<ul class="list list--actions">
......
......@@ -11,7 +11,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-check" aria-hidden="true"></span>
<span class="copy">
......@@ -30,11 +29,11 @@
<div class="wrapper--step__content">
<div class="step__message message message--complete">
<h3 class="message__title">{% trans "Peer Assessments Complete" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
<p>{% trans "You have successfully completed all of the required peer assessments for this assignment. You may assess additional peer responses if you want to. Completing additional assessments will not affect your final grade." %}</p>
<p><strong>{% trans "All submitted peer responses have been assessed. Check back later to see if more students have submitted responses." %}</strong></p>
<p><strong>{% trans "All submitted peer responses have been assessed. Check back later to see if more learners have submitted responses." %}</strong></p>
</div>
</div>
</div>
......
......@@ -12,7 +12,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">{% trans "Not Available" %}</span>
</span>
......
......@@ -12,12 +12,11 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">
{% with graded_string=graded|stringformat:"s" must_grade_string=must_grade|stringformat:"s" %}
{% blocktrans with num_graded='<span class="step__status__value--completed">'|safe|add:graded_string|add:"</span>"|safe num_must_grade='<span class="step__status__value--required">'|safe|add:must_grade_string|add:"</span>"|safe %}
In Progress ({{ num_graded }} of {{ num_must_grade }})
<span class="copy">{{review_num}}
{% with review_num_string=review_num|stringformat:"s" must_grade_string=must_grade|stringformat:"s" %}
{% blocktrans with review_number='<span class="step__status__number--current">'|safe|add:review_num_string|add:"</span>"|safe num_must_grade='<span class="step__status__value--required">'|safe|add:must_grade_string|add:"</span>"|safe %}
In Progress ({{ review_number }} of {{ num_must_grade }})
{% endblocktrans %}
{% endwith %}
</span>
......@@ -30,10 +29,10 @@
<div class="wrapper--step__content">
<div class="step__message message message--incomplete">
<h3 class="message__title">{% trans "Waiting for Peer Responses" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
<p>{% trans "All submitted peer responses have been assessed. Check back later to see if more students have submitted responses. You'll receive your grade after you've completed all the steps for this problem and your peers have assessed your response." %}</p>
<p>{% trans "All available peer responses have been assessed. Check back later to see if more learners have submitted responses. You will receive your grade after you've completed all the steps for this problem and your peers have assessed your response." %}</p>
</div>
</div>
</div>
......
......@@ -7,7 +7,7 @@
{% endblock %}
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
{% block button %}
<button class="ui-slidable" aria-expanded="true" id="oa_response_{{ xblock_id }}" aria-controls="oa_response_{{ xblock_id }}_content">
{% endblock %}
......@@ -29,13 +29,12 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">{% trans "In Progress" %}</span>
</span>
</span>
{% endblock %}
</h2>
</h4>
</header>
{% block body %}
......@@ -58,18 +57,26 @@
<ol class="list list--fields response__submission__content">
{% for part in saved_response.answer.parts %}
<li class="submission__answer__part">
<h5 class="submission__answer__part__text__title">{% trans "The prompt for this section" %}</h5>
<article class="submission__answer__part__prompt">
<h2 class="submission__answer__part__prompt__title">{% trans "The prompt for this section." %}</h2>
<div class="submission__answer__part__prompt__copy">
{{ part.prompt.description|linebreaks }}
</div>
</article>
<div class="field field--textarea submission__answer__part__text">
<label class="sr" for="submission__answer__part__text__{{ forloop.counter }}__{{ xblock_id }}">{% trans "Your response to the question above." %}</label>
<div class="submission__answer__part__text">
<h5 id="submission__answer__part__text__title__{{ forloop.counter }}__{{ xblock_id }}"
class="submission__answer__part__text__title">
{% trans "Your response" %}
</h5>
</div>
<textarea
id="submission__answer__part__text__{{ forloop.counter }}__{{ xblock_id }}"
class="submission__answer__part__text__value"
aria-labelledby="submission__answer__part__text__title__{{ forloop.counter }}__{{ xblock_id }}"
aria-describedby="submission__answer__tip__{{ xblock_id }}"
placeholder="{% trans "Enter your response to the question above." %}"
maxlength="100000"
......@@ -81,7 +88,7 @@
<li class="field">
<div class="upload__error">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not upload this file" %}</h3>
<h5 class="message__title">{% trans "We could not upload this file" %}</h5>
<div class="message__content"></div>
</div>
</div>
......@@ -98,7 +105,7 @@
<div class="response__submission__actions">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not save your progress" %}</h3>
<h5 class="message__title">{% trans "We could not save your progress" %}</h5>
<div class="message__content"></div>
</div>
......@@ -125,7 +132,7 @@
</li>
<li class="submission__preview__item list--actions__item">
<article class="submission__answer__display">
<h3 class="submission__answer__display__title">{% trans "Preview Response"%}</h3>
<h5 class="submission__answer__display__title">{% trans "Preview Response"%}</h5>
<div class="submission__answer__display__content">
<p class="preview_content"></p>
</div>
......@@ -139,7 +146,7 @@
<div class="step__actions">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not submit your response" %}</h3>
<h5 class="message__title">{% trans "We could not submit your response" %}</h5>
<div class="message__content"></div>
</div>
......
......@@ -14,7 +14,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-exclamation-triangle" aria-hidden="true"></span>
<span class="copy">{% trans "Cancelled" %}</span>
......@@ -27,9 +26,10 @@
<div class="wrapper--step__content">
<div class="step__message message message--incomplete">
<h3 class="message__title">{% trans "Submission Cancelled" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
{% trans "Your submission was cancelled. " %}
<p>
{% if workflow_cancellation.cancelled_by %}
{% blocktrans with removed_datetime=workflow_cancellation.cancelled_at|utc|date:"N j, Y H:i e" removed_by_username=workflow_cancellation.cancelled_by %}
......
......@@ -12,7 +12,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-exclamation-triangle" aria-hidden="true"></span>
<span class="copy">{% trans "Incomplete" %}</span>
......@@ -25,10 +24,10 @@
<div class="wrapper--step__content">
<div class="step__message message message--incomplete">
<h3 class="message__title">{% trans "The Due Date for This Step Has Passed" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
<p>{% trans "This step is now closed. You can no longer submit a response or continue with this problem, and you'll receive a grade of Incomplete. If you saved but did not submit a response, the response appears in the course records." %}</p>
<p>{% trans "The due date for this step has passed. This step is now closed. You can no longer submit a response or continue with this problem, and you will receive a grade of Incomplete. If you saved but did not submit a response, the response appears in the course records." %}</p>
</div>
</div>
</div>
......
......@@ -13,7 +13,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-check" aria-hidden="true"></span>
<span class="copy">{% trans "Complete" %}</span>
......@@ -26,9 +25,7 @@
<div class="wrapper--step__content">
<div class="step__content">
<article class="submission__answer__display">
<h3 class="submission__answer__display__title">{% trans "Your Response" %}</h3>
{% trans "Your response to the question above:" as translated_label %}
{% trans "Your response" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=student_submission.answer answer_text_label=translated_label %}
{% trans "Your Uploaded File" as translated_header %}
......
......@@ -13,7 +13,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-check" aria-hidden="true"></span>
<span class="copy">{% trans "Complete" %}</span>
......@@ -26,9 +25,9 @@
<div class="wrapper--step__content">
<div class="step__message message message--complete">
<h3 class="message__title">{% trans "Your Response Has Been Submitted" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
{% trans "You will receive your grade after all steps are complete and your response is fully assessed." %}
{% trans "Your response has been submitted. You will receive your grade after all steps are complete and your response is fully assessed." %}
{% if peer_incomplete and self_incomplete %}
{% blocktrans with peer_start_tag='<a data-behavior="ui-scroll" href="#openassessment__peer-assessment__'|add:xblock_id|add:'">'|safe self_start_tag='<a data-behavior="ui-scroll" href="#openassessment__self-assessment__'|add:xblock_id|add:'">'|safe end_tag='</a>'|safe %}
You still need to complete the {{ peer_start_tag }}peer assessment{{ end_tag }} and {{ self_start_tag }}self assessment{{ end_tag }} steps.
......@@ -47,9 +46,7 @@
<div class="step__content">
<article class="submission__answer__display">
<h3 class="submission__answer__display__title">{% trans "Your Response" %}</h3>
{% trans "Your response to the question above:" as translated_label %}
{% trans "Your response" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=student_submission.answer answer_text_label=translated_label %}
{% trans "Your Uploaded File" as translated_header %}
......
......@@ -13,7 +13,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">{% trans "Not Available" %}</span>
</span>
......
......@@ -8,7 +8,7 @@
{% endblock %}
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
{% block button %}
<button class="ui-slidable" aria-expanded="true" id="oa_self_{{ xblock_id }}" aria-controls="oa_self_{{ xblock_id }}_content">
{% endblock %}
......@@ -31,13 +31,12 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">{% trans "In Progress" %}</span>
</span>
</span>
{% endblock %}
</h2>
</h4>
</header>
{% block body %}
......@@ -45,11 +44,7 @@
<div class="wrapper--step__content">
<div class="step__content">
<article class="self-assessment__display">
<header class="self-assessment__display__header">
<h3 class="self-assessment__display__title">{% trans "Your Response" %}</h3>
</header>
{% trans "Your response to the question above:" as translated_label %}
{% trans "Your response" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=self_submission.answer answer_text_label=translated_label %}
{% trans "Associated File" as translated_header %}
......@@ -63,7 +58,7 @@
<div class="step__actions">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not submit your assessment" %}</h3>
<h5 class="message__title">{% trans "We could not submit your assessment" %}</h5>
<div class="message__content"></div>
</div>
......
......@@ -15,7 +15,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-exclamation-triangle" aria-hidden="true"></span>
<span class="copy">
......
......@@ -13,7 +13,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-exclamation-triangle" aria-hidden="true"></span>
<span class="copy">{% trans "Incomplete" %}</span>
......@@ -26,9 +25,9 @@
<div class="wrapper--step__content">
<div class="step__message message message--incomplete">
<h3 class="message__title">{% trans "The Due Date for This Step Has Passed" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
<p>{% trans "This step is now closed. You can no longer complete a self assessment or continue with this assignment, and you'll receive a grade of Incomplete." %}</p>
<p>{% trans "The due date for this step has passed. This step is now closed. You can no longer complete a self assessment or continue with this assignment, and you will receive a grade of Incomplete." %}</p>
</div>
</div>
</div>
......
......@@ -13,7 +13,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-check" aria-hidden="true"></span>
<span class="copy">{% trans "Complete" %}</span>
......
......@@ -13,7 +13,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">{% trans "Not Available" %}</span>
</span>
......
......@@ -2,7 +2,7 @@
<li id="openassessment__staff-assessment__{{ xblock_id }}" class="openassessment__steps__step step--staff-assessment ui-slidable__container {{ step_classes }}" tabindex="-1">
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
<button class="ui-slidable" {{ button_active }}
{% if message_title %}
id="oa_staff_grade_{{ xblock_id }}" aria-controls="oa_staff_grade_{{ xblock_id }}_content"
......@@ -15,7 +15,6 @@
</button>
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
{% if icon_class %}
<span class="icon fa {{ icon_class }}" aria-hidden="true"></span>
......@@ -23,14 +22,14 @@
<span class="copy">{{ status_value }}</span>
</span>
</span>
</h2>
</h4>
</header>
{% if message_title %}
<div class="ui-slidable__content" aria-labelledby="oa_staff_grade_{{ xblock_id }}" id="oa_staff_grade_{{ xblock_id }}_content">
<div class="wrapper--step__content">
<div class="step__message message message--incomplete">
<h3 class="message__title">{{ message_title }}</h3>
<h5 class="message__title">{{ message_title }}</h5>
<div class="message__content">
<p>{{ message_content }}</p>
......
......@@ -22,7 +22,7 @@
</h4>
</header>
{% trans "The learner's response to the question above:" as translated_label %}
{% trans "The learner's response to the question above" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=submission.answer answer_text_label=translated_label %}
{% trans "Associated File" as translated_header %}
......@@ -37,7 +37,7 @@
<div>
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h4 class="message__title">{% trans "We could not submit your assessment" %}</h4>
<h5 class="message__title">{% trans "We could not submit your assessment" %}</h5>
<div class="message__content"></div>
</div>
......
......@@ -21,7 +21,7 @@
</h3>
</header>
{% trans "The learner's response to the question above:" as translated_label %}
{% trans "The learner's response to the question above" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=submission.answer answer_text_label=translated_label %}
{% trans "Associated File" as translated_header %}
......@@ -36,7 +36,7 @@
<div class="step__actions">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not submit your assessment" %}</h3>
<h5 class="message__title">{% trans "We could not submit your assessment" %}</h5>
<div class="message__content"></div>
</div>
......
......@@ -43,7 +43,7 @@
</p>
{% else %}
<div class="wrapper--content">
{% trans "The learner's response to the question above:" as translated_label %}
{% trans "The learner's response to the question above" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=submission.answer answer_text_label=translated_label %}
{% trans "Associated File" as translated_header %}
......@@ -194,7 +194,7 @@
<form data-submission-uuid="{{ submission.uuid }}">
<div class="step__message message message--warning">
<h3 class="message__title">{% trans "Caution: This Action Cannot Be Undone" %}</h3>
<h5 class="message__title">{% trans "Caution: This Action Cannot Be Undone" %}</h5>
<div class="message__content">{% trans "Removing a learner's submission cannot be undone and should be done with caution." %}</div>
</div>
......
......@@ -7,7 +7,7 @@
{% endblock %}
<header class="step__header ui-slidable__control">
<h2 class="step__title">
<h4 class="step__title">
{% block button %}
<button class="ui-slidable" aria-expanded="true" id="oa_training_{{ xblock_id }}" aria-controls="oa_training_{{ xblock_id }}_content">
{% endblock %}
......@@ -31,19 +31,18 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">
{% with training_num_completed_string=training_num_completed|stringformat:"s" training_num_available_string=training_num_available|stringformat:"s" %}
{% blocktrans with training_completed_num='<span class="step__status__value--completed">'|safe|add:training_num_completed_string|add:'</span>'|safe training_available_num='<span class="step__status__value--required">'|safe|add:training_num_available_string|add:'</span>'|safe %}
In Progress ({{ training_completed_num }} of {{ training_available_num }})
{% with training_num_current_string=training_num_current|stringformat:"s" training_num_available_string=training_num_available|stringformat:"s" %}
{% blocktrans with current_progress_num='<span class="step__status__number--current">'|safe|add:training_num_current_string|add:'</span>'|safe training_available_num='<span class="step__status__value--required">'|safe|add:training_num_available_string|add:'</span>'|safe %}
In Progress ({{ current_progress_num }} of {{ training_available_num }})
{% endblocktrans %}
{% endwith %}
</span>
</span>
</span>
{% endblock %}
</h2>
</h4>
</header>
{% block body %}
......@@ -51,7 +50,7 @@
<div class="wrapper--step__content">
<div class="openassessment__student-training--instructions step__message message message--correct">
<h3 class="message__title">{% trans "Learning to Assess Responses" %}</h3>
<h5 class="message__title">{% trans "Learning to Assess Responses" %}</h5>
<div class="message__content">
<p>{% trans "Before you begin to assess your peers' responses, you'll learn how to complete peer assessments by reviewing responses that instructors have already assessed. If you select the same options for the response that the instructor selected, you'll move to the next step. If you don't select the same options, you'll review the response and try again." %}</p>
......@@ -59,7 +58,7 @@
</div>
<div class="openassessment__student-training--incorrect step__message message message--incorrect is--hidden">
<h3 class="message__title">{% trans "Learning to Assess Responses" %}</h3>
<h5 class="message__title">{% trans "Learning to Assess Responses" %}</h5>
<div class="message__content">
<p>{% trans "Your assessment differs from the instructor's assessment of this response. Review the response and consider why the instructor may have assessed it differently. Then, try the assessment again." %}</p>
......@@ -68,17 +67,6 @@
<div class="step__content">
<article class="student-training__display">
<header class="student-training__display__header">
{% with training_num_current=training_num_current training_num_available=training_num_available %}
<h3 class="student-training__display__title">
{% with training_num_current_string=training_num_current|stringformat:"s" training_num_available_string=training_num_available|stringformat:"s" %}
{% blocktrans with current_progress_num='<span class="student-training__number--current">'|safe|add:training_num_current_string|add:'</span>'|safe num_to_complete='<span class="student-training__number--required">'|safe|add:training_num_available_string|add:'</span>'|safe %}
Training Assessment # {{ current_progress_num }} of {{ num_to_complete }}
{% endblocktrans %}
{% endwith %}
</h3>
{% endwith %}
</header>
{% trans "The response to the question above:" as translated_label %}
{% include "openassessmentblock/oa_submission_answer.html" with answer=training_essay.answer answer_text_label=translated_label %}
......@@ -93,23 +81,23 @@
<li
class="field field--radio is--required assessment__rubric__question has--options is--showing ui-slidable__container training__assessment__rubric__question--{{ criterion.order_num }}"
>
<h4 class="question__title ui-slidable__control">
<div class="question__title ui-slidable__control">
<button class="ui-slidable" aria-expanded="true" id="oa_training_{{ xblock_id }}_criterion--{{ criterion.order_num }}" aria-controls="oa_training_{{ xblock_id }}_content_criterion--{{ criterion.order_num }}">
<span class="icon fa fa-caret-right" aria-hidden="true"></span>
<span id="training__assessment__rubric__prompt--{{ criterion.order_num }}__{{ xblock_id }}" class="question__title__copy">{{ criterion.prompt }}</span>
<span class="label--required sr">* ({% trans "Required" %})</span>
</button>
</h4>
</div>
<div class="ui-slidable__content" aria-labelledby="oa_training_{{ xblock_id }}_criterion--{{ criterion.order_num }}" id="oa_training_{{ xblock_id }}_content_criterion--{{ criterion.order_num }}">
<div class="step__message message message--correct is--hidden">
<h3 class="message__title">{% trans "Selected Options Agree" %}</h3>
<h5 class="message__title">{% trans "Selected Options Agree" %}</h5>
<div class="message__content">
<p>{% trans "The option you selected is the option that the instructor selected." %}</p>
</div>
</div>
<div class="step__message message message--incorrect is--hidden">
<h3 class="message__title">{% trans "Selected Options Differ" %}</h3>
<h5 class="message__title">{% trans "Selected Options Differ" %}</h5>
<div class="message__content">
<p>{% trans "The option you selected is not the option that the instructor selected." %}</p>
......@@ -148,7 +136,7 @@
<div class="step__actions">
<div class="message message--inline message--error message--error-server" tabindex="-1">
<h3 class="message__title">{% trans "We could not check your assessment" %}</h3>
<h5 class="message__title">{% trans "We could not check your assessment" %}</h5>
<div class="message__content"></div>
</div>
......
......@@ -13,7 +13,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-exclamation-triangle" aria-hidden="true"></span>
<span class="copy">{% trans "Cancelled" %}</span>
......
......@@ -12,7 +12,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-exclamation-triangle" aria-hidden="true"></span>
<span class="copy">{% trans "Incomplete" %}</span>
......@@ -25,9 +24,9 @@
<div class="wrapper--step__content">
<div class="step__message message message--incomplete">
<h3 class="message__title">{% trans "The Due Date for This Step Has Passed" %}</h3>
<h5 class="message__title">{% trans "Status" %}</h5>
<div class="message__content">
<p>{% trans "This step is now closed.You can no longer continue with this assignment, and you'll receive a grade of Incomplete." %}</p>
<p>{% trans "The due date for this step has passed. This step is now closed. You can no longer continue with this assignment, and you will receive a grade of Incomplete." %}</p>
</div>
</div>
</div>
......
......@@ -12,7 +12,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="icon fa fa-check" aria-hidden="true"></span>
<span class="copy">{% trans "Complete" %}</span>
......
......@@ -15,7 +15,7 @@
<div class="wrapper--step__content">
<div class="step__message message message--incomplete">
<h3 class="message__title">{% trans "Error Loading Learner Training Examples" %}</h3>
<h5 class="message__title">{% trans "Error Loading Learner Training Examples" %}</h5>
<div class="message__content">
<p>{% trans "The Learner Training Step of this assignment could not be loaded." %}</p>
......
......@@ -12,7 +12,6 @@
{% block title %}
<span class="step__status">
<span class="step__status__label">{% trans "This step's status" %}:</span>
<span class="step__status__value">
<span class="copy">{% trans "Not Available" %}</span>
</span>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
if(typeof OpenAssessment=="undefined"||!OpenAssessment){OpenAssessment={}}if(typeof window.gettext==="undefined"){window.gettext=function(text){return text}}if(typeof window.ngetgext==="undefined"){window.ngettext=function(singularText,pluralText,n){if(n>1){return pluralText}else{return singularText}}}if(typeof window.Logger==="undefined"){window.Logger={log:function(){}}}if(typeof window.MathJax==="undefined"){window.MathJax={Hub:{Typeset:function(){},Queue:function(){}}}}if(typeof OpenAssessment.Server==="undefined"||!OpenAssessment.Server){OpenAssessment.Server=function(runtime,element){this.runtime=runtime;this.element=element};var jsonContentType="application/json; charset=utf-8";OpenAssessment.Server.prototype={url:function(handler){return this.runtime.handlerUrl(this.element,handler)},render:function(component){var view=this;var url=this.url("render_"+component);return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html"}).done(function(data){defer.resolveWith(view,[data])}).fail(function(){defer.rejectWith(view,[gettext("This section could not be loaded.")])})}).promise()},renderLatex:function(element){element.filter(".allow--latex").each(function(){MathJax.Hub.Queue(["Typeset",MathJax.Hub,this])})},renderContinuedPeer:function(){var view=this;var url=this.url("render_peer_assessment");return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html",data:{continue_grading:true}}).done(function(data){defer.resolveWith(view,[data])}).fail(function(){defer.rejectWith(view,[gettext("This section could not be loaded.")])})}).promise()},studentInfo:function(studentUsername,options){var url=this.url("render_student_info");return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html",data:_.extend({student_username:studentUsername},options)}).done(function(data){defer.resolveWith(this,[data])}).fail(function(){defer.rejectWith(this,[gettext("This section could not be loaded.")])})}).promise()},staffGradeForm:function(){var url=this.url("render_staff_grade_form");return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html"}).done(function(data){defer.resolveWith(this,[data])}).fail(function(){defer.rejectWith(this,[gettext("The staff assessment form could not be loaded.")])})}).promise()},staffGradeCounts:function(){var url=this.url("render_staff_grade_counts");return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html"}).done(function(data){defer.resolveWith(this,[data])}).fail(function(){defer.rejectWith(this,[gettext("The display of ungraded and checked out responses could not be loaded.")])})}).promise()},submit:function(submission){var url=this.url("submit");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify({submission:submission}),contentType:jsonContentType}).done(function(data){var success=data[0];if(success){var studentId=data[1];var attemptNum=data[2];defer.resolveWith(this,[studentId,attemptNum])}else{var errorNum=data[1];var errorMsg=data[2];defer.rejectWith(this,[errorNum,errorMsg])}}).fail(function(){defer.rejectWith(this,["AJAX",gettext("This response could not be submitted.")])})}).promise()},save:function(submission){var url=this.url("save_submission");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify({submission:submission}),contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve()}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This response could not be saved.")])})}).promise()},submitFeedbackOnAssessment:function(text,options){var url=this.url("submit_feedback");var payload=JSON.stringify({feedback_text:text,feedback_options:options});return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve()}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This feedback could not be submitted.")])})}).promise()},submitAssessment:function(assessmentType,payload){var url=this.url(assessmentType);return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify(payload),contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve()}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This assessment could not be submitted.")])})}).promise()},peerAssess:function(optionsSelected,criterionFeedback,overallFeedback,submissionID){return this.submitAssessment("peer_assess",{options_selected:optionsSelected,criterion_feedback:criterionFeedback,overall_feedback:overallFeedback,submission_uuid:submissionID})},selfAssess:function(optionsSelected,criterionFeedback,overallFeedback){return this.submitAssessment("self_assess",{options_selected:optionsSelected,criterion_feedback:criterionFeedback,overall_feedback:overallFeedback})},staffAssess:function(optionsSelected,criterionFeedback,overallFeedback,submissionID,assessType){return this.submitAssessment("staff_assess",{options_selected:optionsSelected,criterion_feedback:criterionFeedback,overall_feedback:overallFeedback,submission_uuid:submissionID,assess_type:assessType})},trainingAssess:function(optionsSelected){var url=this.url("training_assess");var payload=JSON.stringify({options_selected:optionsSelected});return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.corrections])}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This assessment could not be submitted.")])})})},scheduleTraining:function(){var url=this.url("schedule_training");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:'""',contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.msg])}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This assessment could not be submitted.")])})})},rescheduleUnfinishedTasks:function(){var url=this.url("reschedule_unfinished_tasks");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:'""',contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.msg])}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("One or more rescheduling tasks failed.")])})})},updateEditorContext:function(options){var url=this.url("update_editor_context");var payload=JSON.stringify({prompts:options.prompts,feedback_prompt:options.feedbackPrompt,feedback_default_text:options.feedback_default_text,title:options.title,submission_start:options.submissionStart,submission_due:options.submissionDue,criteria:options.criteria,assessments:options.assessments,editor_assessments_order:options.editorAssessmentsOrder,file_upload_type:options.fileUploadType,white_listed_file_types:options.fileTypeWhiteList,allow_latex:options.latexEnabled,leaderboard_show:options.leaderboardNum});return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve()}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This problem could not be saved.")])})}).promise()},checkReleased:function(){var url=this.url("check_released");var payload='""';return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.is_released])}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("The server could not be contacted.")])})}).promise()},getUploadUrl:function(contentType,filename){var url=this.url("upload_url");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify({contentType:contentType,filename:filename}),contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve(data.url)}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("Could not retrieve upload url.")])})}).promise()},getDownloadUrl:function(){var url=this.url("download_url");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify({}),contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve(data.url)}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("Could not retrieve download url.")])})}).promise()},cancelSubmission:function(submissionID,comments){var url=this.url("cancel_submission");var payload=JSON.stringify({submission_uuid:submissionID,comments:comments});return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("The submission could not be removed from the grading pool.")])})}).promise()},publishEvent:function(eventName,eventData){eventData.event_name=eventName;var url=this.url("publish_event");var payload=JSON.stringify(eventData);$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType})}}}if(typeof OpenAssessment=="undefined"||!OpenAssessment){OpenAssessment={}}if(typeof window.gettext==="undefined"){window.gettext=function(text){return text}}if(typeof window.ngetgext==="undefined"){window.ngettext=function(singularText,pluralText,n){if(n>1){return pluralText}else{return singularText}}}if(typeof window.Logger==="undefined"){window.Logger={log:function(){}}}if(typeof window.MathJax==="undefined"){window.MathJax={Hub:{Typeset:function(){},Queue:function(){}}}}OpenAssessment.BaseView=function(runtime,element,server,data){this.runtime=runtime;this.element=element;this.server=server;this.fileUploader=new OpenAssessment.FileUploader;this.responseView=new OpenAssessment.ResponseView(this.element,this.server,this.fileUploader,this,data);this.trainingView=new OpenAssessment.StudentTrainingView(this.element,this.server,this);this.selfView=new OpenAssessment.SelfView(this.element,this.server,this);this.peerView=new OpenAssessment.PeerView(this.element,this.server,this);this.staffView=new OpenAssessment.StaffView(this.element,this.server,this);this.gradeView=new OpenAssessment.GradeView(this.element,this.server,this);this.leaderboardView=new OpenAssessment.LeaderboardView(this.element,this.server,this);this.messageView=new OpenAssessment.MessageView(this.element,this.server,this);this.staffAreaView=new OpenAssessment.StaffAreaView(this.element,this.server,this);this.usageID=""};if(typeof OpenAssessment.unsavedChanges==="undefined"||!OpenAssessment.unsavedChanges){OpenAssessment.unsavedChanges={}}OpenAssessment.clearUnsavedChanges=function(){OpenAssessment.unsavedChanges={};window.onbeforeunload=null};OpenAssessment.BaseView.prototype={IS_SHOWING_CLASS:"is--showing",SLIDABLE_CLASS:"ui-slidable",SLIDABLE_CONTENT_CLASS:"ui-slidable__content",SLIDABLE_CONTROLS_CLASS:"ui-slidable__control",SLIDABLE_CONTAINER_CLASS:"ui-slidable__container",scrollToTop:function(selector){if(!selector){selector=".openassessment__steps"}if($.scrollTo instanceof Function){$(window).scrollTo($(selector,this.element),800,{offset:-50});$(selector+" > header ."+this.SLIDABLE_CLASS,this.element).focus()}},setUpCollapseExpand:function(parentElement){var view=this;$("."+view.SLIDABLE_CONTROLS_CLASS,parentElement).each(function(){$(this).on("click",function(event){event.preventDefault();var $slidableControl=$(event.target).closest("."+view.SLIDABLE_CONTROLS_CLASS);var $container=$slidableControl.closest("."+view.SLIDABLE_CONTAINER_CLASS);var $toggleButton=$slidableControl.find("."+view.SLIDABLE_CLASS);var $panel=$slidableControl.next("."+view.SLIDABLE_CONTENT_CLASS);if($container.hasClass("is--showing")){$panel.slideUp();$toggleButton.attr("aria-expanded","false");$container.removeClass("is--showing")}else if(!$container.hasClass("has--error")&&!$container.hasClass("is--empty")&&!$container.hasClass("is--unavailable")){$panel.slideDown();$toggleButton.attr("aria-expanded","true");$container.addClass("is--showing")}$container.removeClass("is--initially--collapsed ")})})},getUsageID:function(){if(!this.usageID){this.usageID=$(this.element).data("usage-id")}return this.usageID},load:function(){this.responseView.load();this.loadAssessmentModules();this.staffAreaView.load()},loadAssessmentModules:function(usageID){this.trainingView.load(usageID);this.peerView.load(usageID);this.staffView.load(usageID);this.selfView.load(usageID);this.gradeView.load(usageID);this.leaderboardView.load(usageID)},loadMessageView:function(){this.messageView.load()},toggleActionError:function(type,message){var element=this.element;var container=null;if(type==="save"){container=".response__submission__actions"}else if(type==="submit"||type==="peer"||type==="self"||type==="student-training"){container=".step__actions"}else if(type==="feedback_assess"){container=".submission__feedback__actions"}else if(type==="upload"){container=".upload__error"}if(container===null){if(message!==null){console.log(message)}}else{$(container+" .message__content",element).html("<p>"+(message?_.escape(message):"")+"</p>");$(container,element).toggleClass("has--error",message!==null);$(container+" > .message",element).focus()}},showLoadError:function(stepName,errorMessage){if(!errorMessage){errorMessage=gettext("Unable to load")}var $container=$(".step--"+stepName);$container.toggleClass("has--error",true);$container.removeClass("is--showing");$container.find(".ui-slidable").attr("aria-expanded","false");$container.find(".step__status__value i").removeClass().addClass("icon fa fa-exclamation-triangle");$container.find(".step__status__value .copy").html(_.escape(errorMessage))},unsavedWarningEnabled:function(enabled,key,message){if(typeof enabled==="undefined"){return window.onbeforeunload!==null}else{var usageID=$(this.element).data("usage-id");if(enabled){if(typeof OpenAssessment.unsavedChanges[usageID]==="undefined"||!OpenAssessment.unsavedChanges[usageID]){OpenAssessment.unsavedChanges[usageID]={}}OpenAssessment.unsavedChanges[usageID][key]=message;window.onbeforeunload=function(){for(var xblockUsageID in OpenAssessment.unsavedChanges){if(OpenAssessment.unsavedChanges.hasOwnProperty(xblockUsageID)){for(var key in OpenAssessment.unsavedChanges[xblockUsageID]){if(OpenAssessment.unsavedChanges[xblockUsageID].hasOwnProperty(key)){return OpenAssessment.unsavedChanges[xblockUsageID][key]}}}}}}else{if(typeof OpenAssessment.unsavedChanges[usageID]!=="undefined"){delete OpenAssessment.unsavedChanges[usageID][key];if($.isEmptyObject(OpenAssessment.unsavedChanges[usageID])){delete OpenAssessment.unsavedChanges[usageID]}if($.isEmptyObject(OpenAssessment.unsavedChanges)){window.onbeforeunload=null}}}}},buttonEnabled:function(className,enabled){var $element=$(className,this.element);if(typeof enabled==="undefined"){return!$element.attr("disabled")}else{$element.prop("disabled",!enabled)}}};function OpenAssessmentBlock(runtime,element,data){var server=new OpenAssessment.Server(runtime,element);var view=new OpenAssessment.BaseView(runtime,element,server,data);view.load()}OpenAssessment.FileUploader=function(){this.upload=function(url,file){return $.Deferred(function(defer){$.ajax({url:url,type:"PUT",data:file,async:false,processData:false,contentType:file.type}).done(function(){Logger.log("openassessment.upload_file",{fileName:file.name,fileSize:file.size,fileType:file.type});defer.resolve()}).fail(function(data,textStatus){defer.rejectWith(this,[textStatus])})}).promise()}};OpenAssessment.GradeView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView};OpenAssessment.GradeView.prototype={load:function(usageID){var view=this;var baseView=this.baseView;var stepID=".step--grade";this.server.render("grade").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers();if(typeof usageID!=="undefined"&&!$(stepID,view.element).hasClass("is--unfinished")&&!$(stepID,view.element).hasClass("is--unstarted")&&!$(stepID,view.element).hasClass("is--waiting--staff")){$("[id='oa_grade_"+usageID+"']",view.element).focus()}}).fail(function(errMsg){baseView.showLoadError("grade",errMsg)})},installHandlers:function(){var sel=$(".step--grade",this.element);this.baseView.setUpCollapseExpand(sel);var view=this;sel.find(".feedback__submit").click(function(eventObject){eventObject.preventDefault();view.submitFeedbackOnAssessment()})},feedbackText:function(text){var usageID=this.baseView.getUsageID()||"";if(typeof text==="undefined"){return $("[id='feedback__remarks__value__"+usageID+"']",this.element).val()}else{$("[id='feedback__remarks__value__"+usageID+"']",this.element).val(text)}},feedbackOptions:function(options){var view=this;var usageID=this.baseView.getUsageID()||"";if(typeof options==="undefined"){return $.map($(".feedback__overall__value:checked",view.element),function(element){return $(element).val()})}else{$(".feedback__overall__value",this.element).prop("checked",false);$.each(options,function(index,opt){$("[id='feedback__overall__value--"+opt+"__"+usageID+"']",view.element).prop("checked",true)})}},setHidden:function(selector,hidden){selector.toggleClass("is--hidden",hidden);selector.attr("aria-hidden",hidden?"true":"false")},isHidden:function(selector){return selector.hasClass("is--hidden")&&selector.attr("aria-hidden")==="true"},feedbackState:function(newState){var containerSel=$(".submission__feedback__content",this.element);var instructionsSel=containerSel.find(".submission__feedback__instructions");var fieldsSel=containerSel.find(".submission__feedback__fields");var actionsSel=containerSel.find(".submission__feedback__actions");var transitionSel=containerSel.find(".transition__status");var messageSel=containerSel.find(".message--complete");if(typeof newState==="undefined"){var isSubmitting=containerSel.hasClass("is--transitioning")&&containerSel.hasClass("is--submitting")&&!this.isHidden(transitionSel)&&this.isHidden(messageSel)&&this.isHidden(instructionsSel)&&this.isHidden(fieldsSel)&&this.isHidden(actionsSel);var hasSubmitted=containerSel.hasClass("is--submitted")&&this.isHidden(transitionSel)&&!this.isHidden(messageSel)&&this.isHidden(instructionsSel)&&this.isHidden(fieldsSel)&&this.isHidden(actionsSel);var isOpen=!containerSel.hasClass("is--submitted")&&!containerSel.hasClass("is--transitioning")&&!containerSel.hasClass("is--submitting")&&this.isHidden(transitionSel)&&this.isHidden(messageSel)&&!this.isHidden(instructionsSel)&&!this.isHidden(fieldsSel)&&!this.isHidden(actionsSel);if(isOpen){return"open"}else if(isSubmitting){return"submitting"}else if(hasSubmitted){return"submitted"}else{throw"Invalid feedback state"}}else{if(newState==="open"){containerSel.toggleClass("is--transitioning",false);containerSel.toggleClass("is--submitting",false);containerSel.toggleClass("is--submitted",false);this.setHidden(instructionsSel,false);this.setHidden(fieldsSel,false);this.setHidden(actionsSel,false);this.setHidden(transitionSel,true);this.setHidden(messageSel,true)}else if(newState==="submitting"){containerSel.toggleClass("is--transitioning",true);containerSel.toggleClass("is--submitting",true);containerSel.toggleClass("is--submitted",false);this.setHidden(instructionsSel,true);this.setHidden(fieldsSel,true);this.setHidden(actionsSel,true);this.setHidden(transitionSel,false);this.setHidden(messageSel,true)}else if(newState==="submitted"){containerSel.toggleClass("is--transitioning",false);containerSel.toggleClass("is--submitting",false);containerSel.toggleClass("is--submitted",true);this.setHidden(instructionsSel,true);this.setHidden(fieldsSel,true);this.setHidden(actionsSel,true);this.setHidden(transitionSel,true);this.setHidden(messageSel,false)}}},submitFeedbackOnAssessment:function(){var view=this;var baseView=this.baseView;$(".feedback__submit",this.element).prop("disabled",true);view.feedbackState("submitting");this.server.submitFeedbackOnAssessment(this.feedbackText(),this.feedbackOptions()).done(function(){view.feedbackState("submitted")}).fail(function(errMsg){baseView.toggleActionError("feedback_assess",errMsg)})}};OpenAssessment.LeaderboardView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView};OpenAssessment.LeaderboardView.prototype={load:function(usageID){var view=this;var baseView=this.baseView;var stepID=".step--leaderboard";this.server.render("leaderboard").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers();if(typeof usageID!=="undefined"&&$(stepID,view.element).hasClass("is--showing")){$("[id='oa_leaderboard_"+usageID+"']",view.element).focus()}}).fail(function(errMsg){baseView.showLoadError("leaderboard",errMsg)})},installHandlers:function(){this.baseView.setUpCollapseExpand($(".step--leaderboard",this.element))}};OpenAssessment.MessageView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView};OpenAssessment.MessageView.prototype={load:function(){var view=this;var baseView=this.baseView;this.server.render("message").done(function(html){$(".openassessment__message",view.element).replaceWith(html);view.server.renderLatex($(".openassessment__message",view.element))}).fail(function(errMsg){baseView.showLoadError("message",errMsg)})}};OpenAssessment.PeerView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView;this.rubric=null};OpenAssessment.PeerView.prototype={UNSAVED_WARNING_KEY:"peer-assessment",load:function(usageID){var view=this;var stepID=".step--peer-assessment";this.server.render("peer_assessment").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers(false);if(typeof usageID!=="undefined"&&$(stepID,view.element).hasClass("is--showing")){$("[id='oa_peer_"+usageID+"']",view.element).focus()}}).fail(function(){view.baseView.showLoadError("peer-assessment")});view.baseView.loadMessageView()},loadContinuedAssessment:function(usageID){var view=this;view.continueAssessmentEnabled(false);this.server.renderContinuedPeer().done(function(html){$(".step--peer-assessment",view.element).replaceWith(html);view.server.renderLatex($(".step--peer-assessment",view.element));view.installHandlers(true);if(typeof usageID!=="undefined"){$("[id='oa_peer_"+usageID+"']",view.element).focus()}}).fail(function(){view.baseView.showLoadError("peer-assessment");view.continueAssessmentEnabled(true)})},continueAssessmentEnabled:function(enabled){return this.baseView.buttonEnabled(".action--continue--grading",enabled)},installHandlers:function(isContinuedAssessment){var sel=$(".step--peer-assessment",this.element);var view=this;this.baseView.setUpCollapseExpand(sel);var rubricSelector=$(".peer-assessment--001__assessment",this.element);if(rubricSelector.size()>0){var rubricElement=rubricSelector.get(0);this.rubric=new OpenAssessment.Rubric(rubricElement)}else{this.rubric=null}if(this.rubric!==null){this.rubric.canSubmitCallback($.proxy(view.peerSubmitEnabled,view));this.rubric.changesExistCallback($.proxy(view.assessmentRubricChanges,view))}sel.find(".peer-assessment--001__assessment__submit").click(function(eventObject){eventObject.preventDefault();if(!isContinuedAssessment){view.peerAssess()}else{view.continuedPeerAssess()}});sel.find(".action--continue--grading").click(function(eventObject){eventObject.preventDefault();view.loadContinuedAssessment(view.baseView.getUsageID())})},peerSubmitEnabled:function(enabled){return this.baseView.buttonEnabled(".peer-assessment--001__assessment__submit",enabled)},assessmentRubricChanges:function(changesExist){if(changesExist){this.baseView.unsavedWarningEnabled(true,this.UNSAVED_WARNING_KEY,gettext("If you leave this page without submitting your peer assessment, you will lose any work you have done."))}},peerAssess:function(){var view=this;var baseView=view.baseView;var usageID=baseView.getUsageID();this.peerAssessRequest(function(){baseView.unsavedWarningEnabled(false,view.UNSAVED_WARNING_KEY);baseView.loadAssessmentModules(usageID);baseView.scrollToTop(".step--peer-assessment")})},continuedPeerAssess:function(){var view=this;var gradeView=this.baseView.gradeView;var baseView=view.baseView;var usageID=baseView.getUsageID();view.peerAssessRequest(function(){baseView.unsavedWarningEnabled(false,view.UNSAVED_WARNING_KEY);view.loadContinuedAssessment(usageID);gradeView.load();baseView.scrollToTop(".step--peer-assessment")})},peerAssessRequest:function(successFunction){var view=this;var uuid=this.getUUID();view.baseView.toggleActionError("peer",null);view.peerSubmitEnabled(false);this.server.peerAssess(this.rubric.optionsSelected(),this.rubric.criterionFeedback(),this.rubric.overallFeedback(),uuid).done(successFunction).fail(function(errMsg){view.baseView.toggleActionError("peer",errMsg);view.peerSubmitEnabled(true)})},getUUID:function(){var xBlockElement=$("div[data-usage-id='"+this.baseView.getUsageID()+"']");return xBlockElement.find(".step--peer-assessment").data("submission-uuid")}};OpenAssessment.ResponseView=function(element,server,fileUploader,baseView,data){this.element=element;this.server=server;this.fileUploader=fileUploader;this.baseView=baseView;this.savedResponse=[];this.files=null;this.fileType=null;this.lastChangeTime=Date.now();this.errorOnLastSave=false;this.autoSaveTimerId=null;this.data=data;this.fileUploaded=false};OpenAssessment.ResponseView.prototype={AUTO_SAVE_POLL_INTERVAL:2e3,AUTO_SAVE_WAIT:3e4,MAX_FILE_SIZE:5242880,UNSAVED_WARNING_KEY:"learner-response",load:function(usageID){var view=this;var stepID=".step--response";this.server.render("submission").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers();view.setAutoSaveEnabled(true);if(typeof usageID!=="undefined"&&$(stepID,view.element).hasClass("is--showing")){$("[id='oa_response_"+usageID+"']",view.element).focus()}}).fail(function(){view.baseView.showLoadError("response")})},installHandlers:function(){var sel=$(".step--response",this.element);var view=this;var uploadType="";if(sel.find(".submission__answer__display__file").length){uploadType=sel.find(".submission__answer__display__file").data("upload-type")}this.baseView.setUpCollapseExpand(sel);this.savedResponse=this.response();var handleChange=function(){view.handleResponseChanged()};sel.find(".submission__answer__part__text__value").on("change keyup drop paste",handleChange);var handlePrepareUpload=function(eventData){view.prepareUpload(eventData.target.files,uploadType)};sel.find("input[type=file]").on("change",handlePrepareUpload);sel.find(".submission__preview__item").hide();sel.find(".step--response__submit").click(function(eventObject){eventObject.preventDefault();view.submit()});sel.find(".submission__save").click(function(eventObject){eventObject.preventDefault();view.save()});sel.find(".submission__preview").click(function(eventObject){eventObject.preventDefault();var previewText=sel.find(".submission__answer__part__text__value").val();var previewContainer=sel.find(".preview_content");previewContainer.html(previewText.replace(/\r\n|\r|\n/g,"<br />"));sel.find(".submission__preview__item").show();MathJax.Hub.Queue(["Typeset",MathJax.Hub,previewContainer[0]])});sel.find(".file__upload").click(function(eventObject){eventObject.preventDefault();$(".submission__answer__display__file",view.element).removeClass("is--hidden");view.fileUpload()})},setAutoSaveEnabled:function(enabled){if(enabled){if(this.autoSaveTimerId===null){this.autoSaveTimerId=setInterval($.proxy(this.autoSave,this),this.AUTO_SAVE_POLL_INTERVAL)}}else{if(this.autoSaveTimerId!==null){clearInterval(this.autoSaveTimerId)}}},submitEnabled:function(enabled){return this.baseView.buttonEnabled(".step--response__submit",enabled)},saveEnabled:function(enabled){return this.baseView.buttonEnabled(".submission__save",enabled)},previewEnabled:function(enabled){return this.baseView.buttonEnabled(".submission__preview",enabled)},saveStatus:function(msg){var sel=$(".save__submission__label",this.element);if(typeof msg==="undefined"){return sel.text()}else{var label=gettext("Status of Your Response");sel.html('<span class="sr">'+_.escape(label)+":"+"</span>\n"+msg)}},response:function(texts){var sel=$(".response__submission .submission__answer__part__text__value",this.element);if(typeof texts==="undefined"){return sel.map(function(){return $.trim($(this).val())}).get()}else{sel.map(function(index){$(this).val(texts[index])})}},responseChanged:function(){var savedResponse=this.savedResponse;return this.response().some(function(element,index){return element!==savedResponse[index]})},autoSave:function(){var timeSinceLastChange=Date.now()-this.lastChangeTime;if(this.responseChanged()&&timeSinceLastChange>this.AUTO_SAVE_WAIT&&!this.errorOnLastSave){this.save()}},handleResponseChanged:function(){var isNotBlank=!this.response().every(function(element){return $.trim(element)===""});this.submitEnabled(isNotBlank);if(this.responseChanged()){this.saveEnabled(isNotBlank);this.previewEnabled(isNotBlank);this.saveStatus(gettext("This response has not been saved."));this.baseView.unsavedWarningEnabled(true,this.UNSAVED_WARNING_KEY,gettext("If you leave this page without saving or submitting your response, you will lose any work you have done on the response."))}this.lastChangeTime=Date.now()},save:function(){this.errorOnLastSave=false;this.saveStatus(gettext("Saving..."));this.baseView.toggleActionError("save",null);this.baseView.unsavedWarningEnabled(false,this.UNSAVED_WARNING_KEY);var view=this;var savedResponse=this.response();this.server.save(savedResponse).done(function(){view.savedResponse=savedResponse;var currentResponse=view.response();var currentResponseIsEmpty=currentResponse.every(function(element){return element===""});view.submitEnabled(!currentResponseIsEmpty);var currentResponseEqualsSaved=currentResponse.every(function(element,index){return element===savedResponse[index]});if(currentResponseEqualsSaved){view.saveEnabled(false);view.saveStatus(gettext("This response has been saved but not submitted."))}}).fail(function(errMsg){view.saveStatus(gettext("Error"));view.baseView.toggleActionError("save",errMsg);view.errorOnLastSave=true})},submit:function(){this.submitEnabled(false);var view=this;var baseView=this.baseView;var fileDefer=$.Deferred();if(view.files!==null&&!view.fileUploaded){var msg=gettext("Do you want to upload your file before submitting?");if(confirm(msg)){fileDefer=view.fileUpload()}else{view.submitEnabled(true);return}}else{fileDefer.resolve()}fileDefer.pipe(function(){return view.confirmSubmission().pipe(function(){var submission=view.response();baseView.toggleActionError("response",null);return view.server.submit(submission)})}).done($.proxy(view.moveToNextStep,view)).fail(function(errCode,errMsg){if(errCode==="ENOMULTI"){view.moveToNextStep()}else{if(errMsg){baseView.toggleActionError("submit",errMsg)}view.submitEnabled(true)}})},moveToNextStep:function(){var baseView=this.baseView;var usageID=baseView.getUsageID();this.load(usageID);baseView.loadAssessmentModules(usageID);baseView.unsavedWarningEnabled(false,this.UNSAVED_WARNING_KEY)},confirmSubmission:function(){var msg=gettext("You're about to submit your response for this assignment. After you submit this response, you can't change it or submit a new response.");return $.Deferred(function(defer){if(confirm(msg)){defer.resolve()}else{defer.reject()}})},prepareUpload:function(files,uploadType){this.files=null;this.fileType=files[0].type;var ext=files[0].name.split(".").pop().toLowerCase();if(files[0].size>this.MAX_FILE_SIZE){this.baseView.toggleActionError("upload",gettext("File size must be 5MB or less."))}else if(uploadType==="image"&&this.data.ALLOWED_IMAGE_MIME_TYPES.indexOf(this.fileType)===-1){
if(typeof OpenAssessment=="undefined"||!OpenAssessment){OpenAssessment={}}if(typeof window.gettext==="undefined"){window.gettext=function(text){return text}}if(typeof window.ngetgext==="undefined"){window.ngettext=function(singularText,pluralText,n){if(n>1){return pluralText}else{return singularText}}}if(typeof window.Logger==="undefined"){window.Logger={log:function(){}}}if(typeof window.MathJax==="undefined"){window.MathJax={Hub:{Typeset:function(){},Queue:function(){}}}}if(typeof OpenAssessment.Server==="undefined"||!OpenAssessment.Server){OpenAssessment.Server=function(runtime,element){this.runtime=runtime;this.element=element};var jsonContentType="application/json; charset=utf-8";OpenAssessment.Server.prototype={url:function(handler){return this.runtime.handlerUrl(this.element,handler)},render:function(component){var view=this;var url=this.url("render_"+component);return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html"}).done(function(data){defer.resolveWith(view,[data])}).fail(function(){defer.rejectWith(view,[gettext("This section could not be loaded.")])})}).promise()},renderLatex:function(element){element.filter(".allow--latex").each(function(){MathJax.Hub.Queue(["Typeset",MathJax.Hub,this])})},renderContinuedPeer:function(){var view=this;var url=this.url("render_peer_assessment");return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html",data:{continue_grading:true}}).done(function(data){defer.resolveWith(view,[data])}).fail(function(){defer.rejectWith(view,[gettext("This section could not be loaded.")])})}).promise()},studentInfo:function(studentUsername,options){var url=this.url("render_student_info");return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html",data:_.extend({student_username:studentUsername},options)}).done(function(data){defer.resolveWith(this,[data])}).fail(function(){defer.rejectWith(this,[gettext("This section could not be loaded.")])})}).promise()},staffGradeForm:function(){var url=this.url("render_staff_grade_form");return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html"}).done(function(data){defer.resolveWith(this,[data])}).fail(function(){defer.rejectWith(this,[gettext("The staff assessment form could not be loaded.")])})}).promise()},staffGradeCounts:function(){var url=this.url("render_staff_grade_counts");return $.Deferred(function(defer){$.ajax({url:url,type:"POST",dataType:"html"}).done(function(data){defer.resolveWith(this,[data])}).fail(function(){defer.rejectWith(this,[gettext("The display of ungraded and checked out responses could not be loaded.")])})}).promise()},submit:function(submission){var url=this.url("submit");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify({submission:submission}),contentType:jsonContentType}).done(function(data){var success=data[0];if(success){var studentId=data[1];var attemptNum=data[2];defer.resolveWith(this,[studentId,attemptNum])}else{var errorNum=data[1];var errorMsg=data[2];defer.rejectWith(this,[errorNum,errorMsg])}}).fail(function(){defer.rejectWith(this,["AJAX",gettext("This response could not be submitted.")])})}).promise()},save:function(submission){var url=this.url("save_submission");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify({submission:submission}),contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve()}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This response could not be saved.")])})}).promise()},submitFeedbackOnAssessment:function(text,options){var url=this.url("submit_feedback");var payload=JSON.stringify({feedback_text:text,feedback_options:options});return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve()}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This feedback could not be submitted.")])})}).promise()},submitAssessment:function(assessmentType,payload){var url=this.url(assessmentType);return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify(payload),contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve()}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This assessment could not be submitted.")])})}).promise()},peerAssess:function(optionsSelected,criterionFeedback,overallFeedback,submissionID){return this.submitAssessment("peer_assess",{options_selected:optionsSelected,criterion_feedback:criterionFeedback,overall_feedback:overallFeedback,submission_uuid:submissionID})},selfAssess:function(optionsSelected,criterionFeedback,overallFeedback){return this.submitAssessment("self_assess",{options_selected:optionsSelected,criterion_feedback:criterionFeedback,overall_feedback:overallFeedback})},staffAssess:function(optionsSelected,criterionFeedback,overallFeedback,submissionID,assessType){return this.submitAssessment("staff_assess",{options_selected:optionsSelected,criterion_feedback:criterionFeedback,overall_feedback:overallFeedback,submission_uuid:submissionID,assess_type:assessType})},trainingAssess:function(optionsSelected){var url=this.url("training_assess");var payload=JSON.stringify({options_selected:optionsSelected});return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.corrections])}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This assessment could not be submitted.")])})})},scheduleTraining:function(){var url=this.url("schedule_training");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:'""',contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.msg])}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This assessment could not be submitted.")])})})},rescheduleUnfinishedTasks:function(){var url=this.url("reschedule_unfinished_tasks");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:'""',contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.msg])}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("One or more rescheduling tasks failed.")])})})},updateEditorContext:function(options){var url=this.url("update_editor_context");var payload=JSON.stringify({prompts:options.prompts,feedback_prompt:options.feedbackPrompt,feedback_default_text:options.feedback_default_text,title:options.title,submission_start:options.submissionStart,submission_due:options.submissionDue,criteria:options.criteria,assessments:options.assessments,editor_assessments_order:options.editorAssessmentsOrder,file_upload_type:options.fileUploadType,white_listed_file_types:options.fileTypeWhiteList,allow_latex:options.latexEnabled,leaderboard_show:options.leaderboardNum});return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve()}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("This problem could not be saved.")])})}).promise()},checkReleased:function(){var url=this.url("check_released");var payload='""';return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.is_released])}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("The server could not be contacted.")])})}).promise()},getUploadUrl:function(contentType,filename){var url=this.url("upload_url");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify({contentType:contentType,filename:filename}),contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve(data.url)}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("Could not retrieve upload url.")])})}).promise()},getDownloadUrl:function(){var url=this.url("download_url");return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:JSON.stringify({}),contentType:jsonContentType}).done(function(data){if(data.success){defer.resolve(data.url)}else{defer.rejectWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("Could not retrieve download url.")])})}).promise()},cancelSubmission:function(submissionID,comments){var url=this.url("cancel_submission");var payload=JSON.stringify({submission_uuid:submissionID,comments:comments});return $.Deferred(function(defer){$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType}).done(function(data){if(data.success){defer.resolveWith(this,[data.msg])}}).fail(function(){defer.rejectWith(this,[gettext("The submission could not be removed from the grading pool.")])})}).promise()},publishEvent:function(eventName,eventData){eventData.event_name=eventName;var url=this.url("publish_event");var payload=JSON.stringify(eventData);$.ajax({type:"POST",url:url,data:payload,contentType:jsonContentType})}}}if(typeof OpenAssessment=="undefined"||!OpenAssessment){OpenAssessment={}}if(typeof window.gettext==="undefined"){window.gettext=function(text){return text}}if(typeof window.ngetgext==="undefined"){window.ngettext=function(singularText,pluralText,n){if(n>1){return pluralText}else{return singularText}}}if(typeof window.Logger==="undefined"){window.Logger={log:function(){}}}if(typeof window.MathJax==="undefined"){window.MathJax={Hub:{Typeset:function(){},Queue:function(){}}}}OpenAssessment.BaseView=function(runtime,element,server,data){this.runtime=runtime;this.element=element;this.server=server;this.fileUploader=new OpenAssessment.FileUploader;this.responseView=new OpenAssessment.ResponseView(this.element,this.server,this.fileUploader,this,data);this.trainingView=new OpenAssessment.StudentTrainingView(this.element,this.server,this);this.selfView=new OpenAssessment.SelfView(this.element,this.server,this);this.peerView=new OpenAssessment.PeerView(this.element,this.server,this);this.staffView=new OpenAssessment.StaffView(this.element,this.server,this);this.gradeView=new OpenAssessment.GradeView(this.element,this.server,this);this.leaderboardView=new OpenAssessment.LeaderboardView(this.element,this.server,this);this.messageView=new OpenAssessment.MessageView(this.element,this.server,this);this.staffAreaView=new OpenAssessment.StaffAreaView(this.element,this.server,this);this.usageID=""};if(typeof OpenAssessment.unsavedChanges==="undefined"||!OpenAssessment.unsavedChanges){OpenAssessment.unsavedChanges={}}OpenAssessment.clearUnsavedChanges=function(){OpenAssessment.unsavedChanges={};window.onbeforeunload=null};OpenAssessment.BaseView.prototype={IS_SHOWING_CLASS:"is--showing",SLIDABLE_CLASS:"ui-slidable",SLIDABLE_CONTENT_CLASS:"ui-slidable__content",SLIDABLE_CONTROLS_CLASS:"ui-slidable__control",SLIDABLE_CONTAINER_CLASS:"ui-slidable__container",scrollToTop:function(selector){if(!selector){selector=".openassessment__steps"}if($.scrollTo instanceof Function){$(window).scrollTo($(selector,this.element),800,{offset:-50});$(selector+" > header ."+this.SLIDABLE_CLASS,this.element).focus()}},setUpCollapseExpand:function(parentElement){var view=this;$("."+view.SLIDABLE_CONTROLS_CLASS,parentElement).each(function(){$(this).on("click",function(event){event.preventDefault();var $slidableControl=$(event.target).closest("."+view.SLIDABLE_CONTROLS_CLASS);var $container=$slidableControl.closest("."+view.SLIDABLE_CONTAINER_CLASS);var $toggleButton=$slidableControl.find("."+view.SLIDABLE_CLASS);var $panel=$slidableControl.next("."+view.SLIDABLE_CONTENT_CLASS);if($container.hasClass("is--showing")){$panel.slideUp();$toggleButton.attr("aria-expanded","false");$container.removeClass("is--showing")}else if(!$container.hasClass("has--error")&&!$container.hasClass("is--empty")&&!$container.hasClass("is--unavailable")){$panel.slideDown();$toggleButton.attr("aria-expanded","true");$container.addClass("is--showing")}$container.removeClass("is--initially--collapsed ")})})},getUsageID:function(){if(!this.usageID){this.usageID=$(this.element).data("usage-id")}return this.usageID},load:function(){this.responseView.load();this.loadAssessmentModules();this.staffAreaView.load()},loadAssessmentModules:function(usageID){this.trainingView.load(usageID);this.peerView.load(usageID);this.staffView.load(usageID);this.selfView.load(usageID);this.gradeView.load(usageID);this.leaderboardView.load(usageID)},loadMessageView:function(){this.messageView.load()},toggleActionError:function(type,message){var element=this.element;var container=null;if(type==="save"){container=".response__submission__actions"}else if(type==="submit"||type==="peer"||type==="self"||type==="student-training"){container=".step__actions"}else if(type==="feedback_assess"){container=".submission__feedback__actions"}else if(type==="upload"){container=".upload__error"}if(container===null){if(message!==null){console.log(message)}}else{$(container+" .message__content",element).html("<p>"+(message?_.escape(message):"")+"</p>");$(container,element).toggleClass("has--error",message!==null);$(container+" > .message",element).focus()}},showLoadError:function(stepName,errorMessage){if(!errorMessage){errorMessage=gettext("Unable to load")}var $container=$(".step--"+stepName);$container.toggleClass("has--error",true);$container.removeClass("is--showing");$container.find(".ui-slidable").attr("aria-expanded","false");$container.find(".step__status__value i").removeClass().addClass("icon fa fa-exclamation-triangle");$container.find(".step__status__value .copy").html(_.escape(errorMessage))},unsavedWarningEnabled:function(enabled,key,message){if(typeof enabled==="undefined"){return window.onbeforeunload!==null}else{var usageID=$(this.element).data("usage-id");if(enabled){if(typeof OpenAssessment.unsavedChanges[usageID]==="undefined"||!OpenAssessment.unsavedChanges[usageID]){OpenAssessment.unsavedChanges[usageID]={}}OpenAssessment.unsavedChanges[usageID][key]=message;window.onbeforeunload=function(){for(var xblockUsageID in OpenAssessment.unsavedChanges){if(OpenAssessment.unsavedChanges.hasOwnProperty(xblockUsageID)){for(var key in OpenAssessment.unsavedChanges[xblockUsageID]){if(OpenAssessment.unsavedChanges[xblockUsageID].hasOwnProperty(key)){return OpenAssessment.unsavedChanges[xblockUsageID][key]}}}}}}else{if(typeof OpenAssessment.unsavedChanges[usageID]!=="undefined"){delete OpenAssessment.unsavedChanges[usageID][key];if($.isEmptyObject(OpenAssessment.unsavedChanges[usageID])){delete OpenAssessment.unsavedChanges[usageID]}if($.isEmptyObject(OpenAssessment.unsavedChanges)){window.onbeforeunload=null}}}}},buttonEnabled:function(className,enabled){var $element=$(className,this.element);if(typeof enabled==="undefined"){return!$element.prop("disabled")}else{$element.prop("disabled",!enabled);return enabled}}};function OpenAssessmentBlock(runtime,element,data){var server=new OpenAssessment.Server(runtime,element);var view=new OpenAssessment.BaseView(runtime,element,server,data);view.load()}OpenAssessment.FileUploader=function(){this.upload=function(url,file){return $.Deferred(function(defer){$.ajax({url:url,type:"PUT",data:file,async:false,processData:false,contentType:file.type}).done(function(){Logger.log("openassessment.upload_file",{fileName:file.name,fileSize:file.size,fileType:file.type});defer.resolve()}).fail(function(data,textStatus){defer.rejectWith(this,[textStatus])})}).promise()}};OpenAssessment.GradeView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView};OpenAssessment.GradeView.prototype={load:function(usageID){var view=this;var baseView=this.baseView;var stepID=".step--grade";this.server.render("grade").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers();if(typeof usageID!=="undefined"&&!$(stepID,view.element).hasClass("is--unfinished")&&!$(stepID,view.element).hasClass("is--unstarted")&&!$(stepID,view.element).hasClass("is--waiting--staff")){$("[id='oa_grade_"+usageID+"']",view.element).focus()}}).fail(function(errMsg){baseView.showLoadError("grade",errMsg)})},installHandlers:function(){var sel=$(".step--grade",this.element);this.baseView.setUpCollapseExpand(sel);var view=this;sel.find(".feedback__submit").click(function(eventObject){eventObject.preventDefault();view.submitFeedbackOnAssessment()})},feedbackText:function(text){var usageID=this.baseView.getUsageID()||"";if(typeof text==="undefined"){return $("[id='feedback__remarks__value__"+usageID+"']",this.element).val()}else{$("[id='feedback__remarks__value__"+usageID+"']",this.element).val(text)}},feedbackOptions:function(options){var view=this;var usageID=this.baseView.getUsageID()||"";if(typeof options==="undefined"){return $.map($(".feedback__overall__value:checked",view.element),function(element){return $(element).val()})}else{$(".feedback__overall__value",this.element).prop("checked",false);$.each(options,function(index,opt){$("[id='feedback__overall__value--"+opt+"__"+usageID+"']",view.element).prop("checked",true)})}},setHidden:function(selector,hidden){selector.toggleClass("is--hidden",hidden);selector.attr("aria-hidden",hidden?"true":"false")},isHidden:function(selector){return selector.hasClass("is--hidden")&&selector.attr("aria-hidden")==="true"},feedbackState:function(newState){var containerSel=$(".submission__feedback__content",this.element);var instructionsSel=containerSel.find(".submission__feedback__instructions");var fieldsSel=containerSel.find(".submission__feedback__fields");var actionsSel=containerSel.find(".submission__feedback__actions");var transitionSel=containerSel.find(".transition__status");var messageSel=containerSel.find(".message--complete");if(typeof newState==="undefined"){var isSubmitting=containerSel.hasClass("is--transitioning")&&containerSel.hasClass("is--submitting")&&!this.isHidden(transitionSel)&&this.isHidden(messageSel)&&this.isHidden(instructionsSel)&&this.isHidden(fieldsSel)&&this.isHidden(actionsSel);var hasSubmitted=containerSel.hasClass("is--submitted")&&this.isHidden(transitionSel)&&!this.isHidden(messageSel)&&this.isHidden(instructionsSel)&&this.isHidden(fieldsSel)&&this.isHidden(actionsSel);var isOpen=!containerSel.hasClass("is--submitted")&&!containerSel.hasClass("is--transitioning")&&!containerSel.hasClass("is--submitting")&&this.isHidden(transitionSel)&&this.isHidden(messageSel)&&!this.isHidden(instructionsSel)&&!this.isHidden(fieldsSel)&&!this.isHidden(actionsSel);if(isOpen){return"open"}else if(isSubmitting){return"submitting"}else if(hasSubmitted){return"submitted"}else{throw"Invalid feedback state"}}else{if(newState==="open"){containerSel.toggleClass("is--transitioning",false);containerSel.toggleClass("is--submitting",false);containerSel.toggleClass("is--submitted",false);this.setHidden(instructionsSel,false);this.setHidden(fieldsSel,false);this.setHidden(actionsSel,false);this.setHidden(transitionSel,true);this.setHidden(messageSel,true)}else if(newState==="submitting"){containerSel.toggleClass("is--transitioning",true);containerSel.toggleClass("is--submitting",true);containerSel.toggleClass("is--submitted",false);this.setHidden(instructionsSel,true);this.setHidden(fieldsSel,true);this.setHidden(actionsSel,true);this.setHidden(transitionSel,false);this.setHidden(messageSel,true)}else if(newState==="submitted"){containerSel.toggleClass("is--transitioning",false);containerSel.toggleClass("is--submitting",false);containerSel.toggleClass("is--submitted",true);this.setHidden(instructionsSel,true);this.setHidden(fieldsSel,true);this.setHidden(actionsSel,true);this.setHidden(transitionSel,true);this.setHidden(messageSel,false)}}},submitFeedbackOnAssessment:function(){var view=this;var baseView=this.baseView;$(".feedback__submit",this.element).prop("disabled",true);view.feedbackState("submitting");this.server.submitFeedbackOnAssessment(this.feedbackText(),this.feedbackOptions()).done(function(){view.feedbackState("submitted")}).fail(function(errMsg){baseView.toggleActionError("feedback_assess",errMsg)})}};OpenAssessment.LeaderboardView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView};OpenAssessment.LeaderboardView.prototype={load:function(usageID){var view=this;var baseView=this.baseView;var stepID=".step--leaderboard";this.server.render("leaderboard").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers();if(typeof usageID!=="undefined"&&$(stepID,view.element).hasClass("is--showing")){$("[id='oa_leaderboard_"+usageID+"']",view.element).focus()}}).fail(function(errMsg){baseView.showLoadError("leaderboard",errMsg)})},installHandlers:function(){this.baseView.setUpCollapseExpand($(".step--leaderboard",this.element))}};OpenAssessment.MessageView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView};OpenAssessment.MessageView.prototype={load:function(){var view=this;var baseView=this.baseView;this.server.render("message").done(function(html){$(".openassessment__message",view.element).replaceWith(html);view.server.renderLatex($(".openassessment__message",view.element))}).fail(function(errMsg){baseView.showLoadError("message",errMsg)})}};OpenAssessment.PeerView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView;this.rubric=null};OpenAssessment.PeerView.prototype={UNSAVED_WARNING_KEY:"peer-assessment",load:function(usageID){var view=this;var stepID=".step--peer-assessment";this.server.render("peer_assessment").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers(false);if(typeof usageID!=="undefined"&&$(stepID,view.element).hasClass("is--showing")){$("[id='oa_peer_"+usageID+"']",view.element).focus()}}).fail(function(){view.baseView.showLoadError("peer-assessment")});view.baseView.loadMessageView()},loadContinuedAssessment:function(usageID){var view=this;view.continueAssessmentEnabled(false);this.server.renderContinuedPeer().done(function(html){$(".step--peer-assessment",view.element).replaceWith(html);view.server.renderLatex($(".step--peer-assessment",view.element));view.installHandlers(true);if(typeof usageID!=="undefined"){$("[id='oa_peer_"+usageID+"']",view.element).focus()}}).fail(function(){view.baseView.showLoadError("peer-assessment");view.continueAssessmentEnabled(true)})},continueAssessmentEnabled:function(enabled){return this.baseView.buttonEnabled(".action--continue--grading",enabled)},installHandlers:function(isContinuedAssessment){var sel=$(".step--peer-assessment",this.element);var view=this;this.baseView.setUpCollapseExpand(sel);var rubricSelector=$(".peer-assessment--001__assessment",this.element);if(rubricSelector.size()>0){var rubricElement=rubricSelector.get(0);this.rubric=new OpenAssessment.Rubric(rubricElement)}else{this.rubric=null}if(this.rubric!==null){this.rubric.canSubmitCallback($.proxy(view.peerSubmitEnabled,view));this.rubric.changesExistCallback($.proxy(view.assessmentRubricChanges,view))}sel.find(".peer-assessment--001__assessment__submit").click(function(eventObject){eventObject.preventDefault();if(!isContinuedAssessment){view.peerAssess()}else{view.continuedPeerAssess()}});sel.find(".action--continue--grading").click(function(eventObject){eventObject.preventDefault();view.loadContinuedAssessment(view.baseView.getUsageID())})},peerSubmitEnabled:function(enabled){return this.baseView.buttonEnabled(".peer-assessment--001__assessment__submit",enabled)},assessmentRubricChanges:function(changesExist){if(changesExist){this.baseView.unsavedWarningEnabled(true,this.UNSAVED_WARNING_KEY,gettext("If you leave this page without submitting your peer assessment, you will lose any work you have done."))}},peerAssess:function(){var view=this;var baseView=view.baseView;var usageID=baseView.getUsageID();this.peerAssessRequest(function(){baseView.unsavedWarningEnabled(false,view.UNSAVED_WARNING_KEY);baseView.loadAssessmentModules(usageID);baseView.scrollToTop(".step--peer-assessment")})},continuedPeerAssess:function(){var view=this;var gradeView=this.baseView.gradeView;var baseView=view.baseView;var usageID=baseView.getUsageID();view.peerAssessRequest(function(){baseView.unsavedWarningEnabled(false,view.UNSAVED_WARNING_KEY);view.loadContinuedAssessment(usageID);gradeView.load();baseView.scrollToTop(".step--peer-assessment")})},peerAssessRequest:function(successFunction){var view=this;var uuid=this.getUUID();view.baseView.toggleActionError("peer",null);view.peerSubmitEnabled(false);this.server.peerAssess(this.rubric.optionsSelected(),this.rubric.criterionFeedback(),this.rubric.overallFeedback(),uuid).done(successFunction).fail(function(errMsg){view.baseView.toggleActionError("peer",errMsg);view.peerSubmitEnabled(true)})},getUUID:function(){var xBlockElement=$("div[data-usage-id='"+this.baseView.getUsageID()+"']");return xBlockElement.find(".step--peer-assessment").data("submission-uuid")}};OpenAssessment.ResponseView=function(element,server,fileUploader,baseView,data){this.element=element;this.server=server;this.fileUploader=fileUploader;this.baseView=baseView;this.savedResponse=[];this.files=null;this.fileType=null;this.lastChangeTime=Date.now();this.errorOnLastSave=false;this.autoSaveTimerId=null;this.data=data;this.fileUploaded=false};OpenAssessment.ResponseView.prototype={AUTO_SAVE_POLL_INTERVAL:2e3,AUTO_SAVE_WAIT:3e4,MAX_FILE_SIZE:5242880,UNSAVED_WARNING_KEY:"learner-response",load:function(usageID){var view=this;var stepID=".step--response";this.server.render("submission").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers();view.setAutoSaveEnabled(true);if(typeof usageID!=="undefined"&&$(stepID,view.element).hasClass("is--showing")){$("[id='oa_response_"+usageID+"']",view.element).focus()}}).fail(function(){view.baseView.showLoadError("response")})},installHandlers:function(){var sel=$(".step--response",this.element);var view=this;var uploadType="";if(sel.find(".submission__answer__display__file").length){uploadType=sel.find(".submission__answer__display__file").data("upload-type")}this.baseView.setUpCollapseExpand(sel);this.savedResponse=this.response();var handleChange=function(){view.handleResponseChanged()};sel.find(".submission__answer__part__text__value").on("change keyup drop paste",handleChange);var handlePrepareUpload=function(eventData){view.prepareUpload(eventData.target.files,uploadType)};sel.find("input[type=file]").on("change",handlePrepareUpload);sel.find(".submission__preview__item").hide();sel.find(".step--response__submit").click(function(eventObject){eventObject.preventDefault();view.submit()});sel.find(".submission__save").click(function(eventObject){eventObject.preventDefault();view.save()});sel.find(".submission__preview").click(function(eventObject){eventObject.preventDefault();var previewText=sel.find(".submission__answer__part__text__value").val();var previewContainer=sel.find(".preview_content");previewContainer.html(previewText.replace(/\r\n|\r|\n/g,"<br />"));sel.find(".submission__preview__item").show();MathJax.Hub.Queue(["Typeset",MathJax.Hub,previewContainer[0]])});sel.find(".file__upload").click(function(eventObject){eventObject.preventDefault();$(".submission__answer__display__file",view.element).removeClass("is--hidden");view.fileUpload()})},setAutoSaveEnabled:function(enabled){if(enabled){if(this.autoSaveTimerId===null){this.autoSaveTimerId=setInterval($.proxy(this.autoSave,this),this.AUTO_SAVE_POLL_INTERVAL)}}else{if(this.autoSaveTimerId!==null){clearInterval(this.autoSaveTimerId)}}},submitEnabled:function(enabled){return this.baseView.buttonEnabled(".step--response__submit",enabled)},saveEnabled:function(enabled){return this.baseView.buttonEnabled(".submission__save",enabled)},previewEnabled:function(enabled){return this.baseView.buttonEnabled(".submission__preview",enabled)},saveStatus:function(msg){var sel=$(".save__submission__label",this.element);if(typeof msg==="undefined"){return sel.text()}else{var label=gettext("Status of Your Response");sel.html('<span class="sr">'+_.escape(label)+":"+"</span>\n"+msg)}},response:function(texts){var sel=$(".response__submission .submission__answer__part__text__value",this.element);if(typeof texts==="undefined"){return sel.map(function(){return $.trim($(this).val())}).get()}else{sel.map(function(index){$(this).val(texts[index])})}},responseChanged:function(){var savedResponse=this.savedResponse;return this.response().some(function(element,index){return element!==savedResponse[index]})},autoSave:function(){var timeSinceLastChange=Date.now()-this.lastChangeTime;if(this.responseChanged()&&timeSinceLastChange>this.AUTO_SAVE_WAIT&&!this.errorOnLastSave){this.save()}},handleResponseChanged:function(){var isNotBlank=!this.response().every(function(element){return $.trim(element)===""});this.submitEnabled(isNotBlank);if(this.responseChanged()){this.saveEnabled(isNotBlank);this.previewEnabled(isNotBlank);this.saveStatus(gettext("This response has not been saved."));this.baseView.unsavedWarningEnabled(true,this.UNSAVED_WARNING_KEY,gettext("If you leave this page without saving or submitting your response, you will lose any work you have done on the response."))}this.lastChangeTime=Date.now()},save:function(){this.errorOnLastSave=false;this.saveStatus(gettext("Saving..."));this.baseView.toggleActionError("save",null);this.baseView.unsavedWarningEnabled(false,this.UNSAVED_WARNING_KEY);var view=this;var savedResponse=this.response();this.server.save(savedResponse).done(function(){view.savedResponse=savedResponse;var currentResponse=view.response();var currentResponseIsEmpty=currentResponse.every(function(element){return element===""});view.submitEnabled(!currentResponseIsEmpty);var currentResponseEqualsSaved=currentResponse.every(function(element,index){return element===savedResponse[index]});if(currentResponseEqualsSaved){view.saveEnabled(false);view.saveStatus(gettext("This response has been saved but not submitted."))}}).fail(function(errMsg){view.saveStatus(gettext("Error"));view.baseView.toggleActionError("save",errMsg);view.errorOnLastSave=true})},submit:function(){this.submitEnabled(false);var view=this;var baseView=this.baseView;var fileDefer=$.Deferred();if(view.files!==null&&!view.fileUploaded){var msg=gettext("Do you want to upload your file before submitting?");if(confirm(msg)){fileDefer=view.fileUpload()}else{view.submitEnabled(true);return}}else{fileDefer.resolve()}fileDefer.pipe(function(){return view.confirmSubmission().pipe(function(){var submission=view.response();baseView.toggleActionError("response",null);return view.server.submit(submission)})}).done($.proxy(view.moveToNextStep,view)).fail(function(errCode,errMsg){if(errCode==="ENOMULTI"){view.moveToNextStep()}else{if(errMsg){baseView.toggleActionError("submit",errMsg)}view.submitEnabled(true)}})},moveToNextStep:function(){var baseView=this.baseView;var usageID=baseView.getUsageID();this.load(usageID);baseView.loadAssessmentModules(usageID);baseView.unsavedWarningEnabled(false,this.UNSAVED_WARNING_KEY)},confirmSubmission:function(){var msg=gettext("You're about to submit your response for this assignment. After you submit this response, you can't change it or submit a new response.");return $.Deferred(function(defer){if(confirm(msg)){defer.resolve()}else{defer.reject()}})},prepareUpload:function(files,uploadType){this.files=null;this.fileType=files[0].type;var ext=files[0].name.split(".").pop().toLowerCase();if(files[0].size>this.MAX_FILE_SIZE){this.baseView.toggleActionError("upload",gettext("File size must be 5MB or less."))}else if(uploadType==="image"&&this.data.ALLOWED_IMAGE_MIME_TYPES.indexOf(this.fileType)===-1){
this.baseView.toggleActionError("upload",gettext("You can upload files with these file types: ")+"JPG, PNG or GIF")}else if(uploadType==="pdf-and-image"&&this.data.ALLOWED_FILE_MIME_TYPES.indexOf(this.fileType)===-1){this.baseView.toggleActionError("upload",gettext("You can upload files with these file types: ")+"JPG, PNG, GIF or PDF")}else if(uploadType==="custom"&&this.data.FILE_TYPE_WHITE_LIST.indexOf(ext)===-1){this.baseView.toggleActionError("upload",gettext("You can upload files with these file types: ")+this.data.FILE_TYPE_WHITE_LIST.join(", "))}else if(this.data.FILE_EXT_BLACK_LIST.indexOf(ext)!==-1){this.baseView.toggleActionError("upload",gettext("File type is not allowed."))}else{this.baseView.toggleActionError("upload",null);this.files=files}$(".file__upload").prop("disabled",this.files===null)},fileUpload:function(){var view=this;var fileUpload=$(".file__upload");fileUpload.prop("disabled",true);var handleError=function(errMsg){view.baseView.toggleActionError("upload",errMsg);fileUpload.prop("disabled",false)};return this.server.getUploadUrl(view.fileType,view.files[0].name).done(function(url){var file=view.files[0];view.fileUploader.upload(url,file).done(function(){view.fileUrl();view.baseView.toggleActionError("upload",null);view.fileUploaded=true}).fail(handleError)}).fail(handleError)},fileUrl:function(){var view=this;var file=$(".submission__answer__file",view.element);view.server.getDownloadUrl().done(function(url){if(file.prop("tagName")==="IMG"){file.attr("src",url)}else{file.attr("href",url)}return url})}};OpenAssessment.Rubric=function(element){this.element=element};OpenAssessment.Rubric.prototype={criterionFeedback:function(criterionFeedback){var selector="textarea.answer__value";var feedback={};var rubric=this;$(selector,this.element).each(function(index,sel){var criterionName=rubric.getCriterionName(sel);if(typeof criterionFeedback!=="undefined"){$(sel).val(criterionFeedback[criterionName]);feedback[criterionName]=criterionFeedback[criterionName]}else{feedback[criterionName]=$(sel).val()}});return feedback},overallFeedback:function(overallFeedback){var selector=".assessment__rubric__question--feedback__value";if(typeof overallFeedback==="undefined"){return $(selector,this.element).val()}else{$(selector,this.element).val(overallFeedback)}},optionsSelected:function(optionsSelected){var selector="input[type=radio]";var rubric=this;if(typeof optionsSelected==="undefined"){var options={};$(selector+":checked",this.element).each(function(index,sel){options[rubric.getCriterionName(sel)]=sel.value});return options}else{$(selector,this.element).prop("checked",false);$(selector,this.element).each(function(index,sel){var criterionName=rubric.getCriterionName(sel);if(optionsSelected.hasOwnProperty(criterionName)){if(sel.value===optionsSelected[criterionName]){$(sel).prop("checked",true)}}})}},canSubmitCallback:function(callback){var rubric=this;callback(rubric.canSubmit());$(this.element).on("change keyup drop paste",function(){callback(rubric.canSubmit())})},canSubmit:function(){var numChecked=$("input[type=radio]:checked",this.element).length;var numAvailable=$(".field--radio.assessment__rubric__question.has--options",this.element).length;var completedRequiredComments=true;$("textarea[required]",this.element).each(function(){var trimmedText=$.trim($(this).val());if(trimmedText===""){completedRequiredComments=false}});return numChecked===numAvailable&&completedRequiredComments},changesExistCallback:function(callback){var rubric=this;callback(rubric.changesExist());$(this.element).on("change keyup drop paste",function(){callback(rubric.changesExist())})},changesExist:function(){var numChecked=$("input[type=radio]:checked",this.element).length;var textExists=false;$("textarea",this.element).each(function(){var trimmedText=$.trim($(this).val());if(trimmedText!==""){textExists=true}});return numChecked>0||textExists},showCorrections:function(corrections){var selector="input[type=radio]";var hasErrors=false;var rubric=this;$(selector,this.element).each(function(index,sel){var listItem=$(sel).parents(".assessment__rubric__question");if(corrections.hasOwnProperty(rubric.getCriterionName(sel))){hasErrors=true;listItem.find(".message--incorrect").removeClass("is--hidden");listItem.find(".message--correct").addClass("is--hidden")}else{listItem.find(".message--correct").removeClass("is--hidden");listItem.find(".message--incorrect").addClass("is--hidden")}});return hasErrors},getCriterionName:function(element){return $(element).data("criterion-name")}};OpenAssessment.SelfView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView;this.rubric=null};OpenAssessment.SelfView.prototype={UNSAVED_WARNING_KEY:"self-assessment",load:function(usageID){var view=this;var stepID=".step--self-assessment";this.server.render("self_assessment").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers();if(typeof usageID!=="undefined"&&$(stepID,view.element).hasClass("is--showing")){$("[id='oa_self_"+usageID+"']",view.element).focus()}}).fail(function(){view.showLoadError("self-assessment")})},installHandlers:function(){var view=this;var sel=$(".step--self-assessment",view.element);this.baseView.setUpCollapseExpand(sel);var rubricSelector=$(".self-assessment--001__assessment",this.element);if(rubricSelector.size()>0){var rubricElement=rubricSelector.get(0);this.rubric=new OpenAssessment.Rubric(rubricElement)}else{this.rubric=null}if(this.rubric!==null){this.rubric.canSubmitCallback($.proxy(this.selfSubmitEnabled,this));this.rubric.changesExistCallback($.proxy(this.assessmentRubricChanges,this))}sel.find(".self-assessment--001__assessment__submit").click(function(eventObject){eventObject.preventDefault();view.selfAssess()})},selfSubmitEnabled:function(enabled){return this.baseView.buttonEnabled(".self-assessment--001__assessment__submit",enabled)},assessmentRubricChanges:function(changesExist){if(changesExist){this.baseView.unsavedWarningEnabled(true,this.UNSAVED_WARNING_KEY,gettext("If you leave this page without submitting your self assessment, you will lose any work you have done."))}},selfAssess:function(){var view=this;var baseView=this.baseView;var usageID=baseView.getUsageID();baseView.toggleActionError("self",null);view.selfSubmitEnabled(false);this.server.selfAssess(this.rubric.optionsSelected(),this.rubric.criterionFeedback(),this.rubric.overallFeedback()).done(function(){baseView.unsavedWarningEnabled(false,view.UNSAVED_WARNING_KEY);baseView.loadAssessmentModules(usageID);view.load(usageID);baseView.scrollToTop(".step--self-assessment")}).fail(function(errMsg){baseView.toggleActionError("self",errMsg);view.selfSubmitEnabled(true)})}};OpenAssessment.StaffView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView};OpenAssessment.StaffView.prototype={load:function(usageID){var view=this;this.server.render("staff_assessment").done(function(html){$(".step--staff-assessment",view.element).replaceWith(html);view.installHandlers();if(typeof usageID!=="undefined"&&$(".step--staff-assessment",view.element).hasClass("is--showing")){$("[id='oa_staff_grade_"+usageID+"']",view.element).focus()}}).fail(function(){view.baseView.showLoadError("staff-assessment")})},installHandlers:function(){this.baseView.setUpCollapseExpand($(".step--staff-assessment",this.element))}};(function(OpenAssessment){"use strict";OpenAssessment.StaffAreaView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView};OpenAssessment.StaffAreaView.prototype={FULL_GRADE_UNSAVED_WARNING_KEY:"staff-grade",OVERRIDE_UNSAVED_WARNING_KEY:"staff-override",load:function(){var view=this;if($(".openassessment__staff-area",view.element).length>0){this.server.render("staff_area").done(function(html){$(".openassessment__staff-area",view.element).replaceWith(html);view.server.renderLatex($(".openassessment__staff-area",view.element));view.installHandlers()}).fail(function(){view.baseView.showLoadError("staff_area")})}},loadStudentInfo:function(classToExpand){var view=this;var $manageLearnersTab=$(".openassessment__staff-tools",this.element);var $form=$manageLearnersTab.find(".openassessment_student_info_form");var studentUsername=$manageLearnersTab.find(".openassessment__student_username").val();var showFormError=function(errorMessage){$form.find(".form--error").text(errorMessage).focus()};var deferred=$.Deferred();$(".openassessment__student-info",view.element).text("");if(studentUsername.trim()){this.server.studentInfo(studentUsername).done(function(html){showFormError("");$(".openassessment__student-info",view.element).replaceWith(html);$manageLearnersTab.on("click",".action--submit-cancel-submission",function(eventObject){eventObject.preventDefault();view.cancelSubmission($(this).data("submission-uuid"))});var handleChange=function(eventData){view.handleCommentChanged(eventData)};$manageLearnersTab.find(".cancel_submission_comments").on("change keyup drop paste",handleChange);var $rubric=$manageLearnersTab.find(".staff-assessment__assessment");if($rubric.size()>0){var rubricElement=$rubric.get(0);var rubric=new OpenAssessment.Rubric(rubricElement);rubric.canSubmitCallback($.proxy(view.staffSubmitEnabled,view,$manageLearnersTab));rubric.changesExistCallback($.proxy(view.assessmentRubricChanges,view,view.OVERRIDE_UNSAVED_WARNING_KEY));$manageLearnersTab.find(".wrapper--staff-assessment .action--submit",view.element).click(function(eventObject){var target=$(eventObject.currentTarget),rootElement=target.closest(".openassessment__student-info"),submissionID=rootElement.data("submission-uuid");eventObject.preventDefault();view.submitStaffOverride(submissionID,rubric,$manageLearnersTab)})}view.baseView.setUpCollapseExpand($manageLearnersTab);$manageLearnersTab.find(".staff-info__student__report__summary").focus();if(classToExpand){$manageLearnersTab.find("."+classToExpand+" ."+view.baseView.SLIDABLE_CONTENT_CLASS).slideDown();$manageLearnersTab.find("."+classToExpand+" ."+view.baseView.SLIDABLE_CLASS).addClass(view.baseView.IS_SHOWING_CLASS).attr("aria-expanded","true").focus()}deferred.resolve()}).fail(function(){showFormError(gettext("Unexpected server error."));deferred.reject()})}else{showFormError(gettext("You must provide a learner name."));deferred.reject()}return deferred.promise()},loadStaffGradeForm:function(){var view=this;var $staffGradeTab=$(".openassessment__staff-grading",this.element);var $staffGradeControl=$staffGradeTab.find("."+view.baseView.SLIDABLE_CLASS);var $staffGradeContent=$staffGradeTab.find("."+view.baseView.SLIDABLE_CONTENT_CLASS);var $staffGradeContainer=$staffGradeTab.find("."+view.baseView.SLIDABLE_CONTAINER_CLASS);var deferred=$.Deferred();var showFormError=function(errorMessage){$staffGradeTab.find(".staff__grade__form--error").text(errorMessage).focus()};$staffGradeControl.attr("aria-expanded","true");if(this.staffGradeFormLoaded){$staffGradeContent.slideDown();$staffGradeContainer.addClass(view.baseView.IS_SHOWING_CLASS);deferred.resolve()}else{this.staffGradeFormLoaded=true;this.server.staffGradeForm().done(function(html){showFormError("");$staffGradeTab.find(".staff__grade__form").replaceWith(html);view.updateStaffGradeCounts();var $rubric=$staffGradeTab.find(".staff-assessment__assessment");if($rubric.size()>0){var rubricElement=$rubric.get(0);var rubric=new OpenAssessment.Rubric(rubricElement);rubric.canSubmitCallback($.proxy(view.staffSubmitEnabled,view,$staffGradeTab));rubric.changesExistCallback($.proxy(view.assessmentRubricChanges,view,view.FULL_GRADE_UNSAVED_WARNING_KEY));$staffGradeTab.find(".wrapper--staff-assessment .action--submit").click(function(eventObject){var submissionID=$staffGradeTab.find(".staff__grade__form").data("submission-uuid");eventObject.preventDefault();view.submitStaffGrade(submissionID,rubric,$staffGradeTab,$(eventObject.currentTarget).hasClass("continue_grading--action"))})}$staffGradeContent.slideDown(function(){$staffGradeControl.focus();view.baseView.setUpCollapseExpand($(".staff__grade__form",view.element))});$staffGradeContainer.addClass(view.baseView.IS_SHOWING_CLASS);deferred.resolve()}).fail(function(){showFormError(gettext("Unexpected server error."));view.staffGradeFormLoaded=false;deferred.reject()})}return deferred.promise()},closeStaffGradeForm:function(clear){var view=this;var $staffGradeTab=$(".openassessment__staff-grading",view.element);var $staffGradeControl=$staffGradeTab.find("."+view.baseView.SLIDABLE_CLASS).first();var $staffGradeContent=$staffGradeTab.find("."+view.baseView.SLIDABLE_CONTENT_CLASS);var $staffGradeContainer=$staffGradeTab.find("."+view.baseView.SLIDABLE_CONTAINER_CLASS);$staffGradeControl.attr("aria-expanded","false");if(clear){$staffGradeTab.find(".staff__grade__form").replaceWith('<div class="staff__grade__form"></div>');this.updateStaffGradeCounts()}else{$staffGradeContent.slideUp()}$staffGradeContainer.removeClass(view.baseView.IS_SHOWING_CLASS);$staffGradeControl.focus()},updateStaffGradeCounts:function(){var view=this;var $staffGradeTab=$(".openassessment__staff-grading",this.element);view.server.staffGradeCounts().done(function(html){$staffGradeTab.find(".staff__grade__status").replaceWith(html)}).fail(function(){$staffGradeTab.find(".staff__grade__status").replaceWith('<span class="staff__grade__status"><span class="staff__grade__value"><span class="copy">'+gettext("Error getting the number of ungraded responses")+"</span></span></span>")})},installHandlers:function(){var view=this;var $staffArea=$(".openassessment__staff-area",this.element);var $manageLearnersTab=$(".openassessment__staff-tools",$staffArea);var $staffGradeTool=$(".openassessment__staff-grading",$staffArea);if($staffArea.length<=0){return}$staffArea.find(".ui-staff__button").click(function(eventObject){$staffArea.find(".ui-staff__button").each(function(index,button){if(button!==eventObject.currentTarget){var $panel=$staffArea.find("."+$(button).data("panel")).first();$panel.slideUp(0)}});var $button=$(eventObject.currentTarget),$panel=$staffArea.find("."+$button.data("panel")).first();if($button.hasClass("is--active")){$button.removeClass("is--active").attr("aria-expanded","false");$panel.slideUp()}else{$staffArea.find(".ui-staff__button").removeClass("is--active").attr("aria-expanded","false");$button.addClass("is--active").attr("aria-expanded","true");$panel.slideDown()}$panel.find(".ui-staff_close_button").focus()});$staffArea.find(".ui-staff_close_button").click(function(eventObject){var $button=$(eventObject.currentTarget),$panel=$button.closest(".wrapper--ui-staff");$staffArea.find(".ui-staff__button").removeClass("is--active").attr("aria-expanded","false");$panel.slideUp();$staffArea.find(".ui-staff__button").each(function(index,button){var $staffPanel=$staffArea.find("."+$(button).data("panel")).first();if($staffPanel[0]===$panel[0]){$(button).focus()}})});$manageLearnersTab.find(".openassessment_student_info_form").submit(function(eventObject){eventObject.preventDefault();view.loadStudentInfo()});$manageLearnersTab.find(".action--submit-username").click(function(eventObject){eventObject.preventDefault();view.loadStudentInfo()});$manageLearnersTab.find(".action--submit-training").click(function(eventObject){eventObject.preventDefault();view.scheduleTraining()});$manageLearnersTab.find(".action--submit-unfinished-tasks").click(function(eventObject){eventObject.preventDefault();view.rescheduleUnfinishedTasks()});$staffGradeTool.find(".staff__grade__show-form").click(function(event){var $container=$(event.currentTarget).closest("."+view.baseView.SLIDABLE_CONTAINER_CLASS);var wasShowing=$container.hasClass(view.baseView.IS_SHOWING_CLASS);if(wasShowing){view.closeStaffGradeForm(false)}else{view.loadStaffGradeForm()}})},scheduleTraining:function(){var view=this;this.server.scheduleTraining().done(function(msg){$(".schedule_training_message",view.element).text(msg)}).fail(function(errMsg){$(".schedule_training_message",view.element).text(errMsg)})},rescheduleUnfinishedTasks:function(){var view=this;this.server.rescheduleUnfinishedTasks().done(function(msg){$(".reschedule_unfinished_tasks_message",view.element).text(msg)}).fail(function(errMsg){$(".reschedule_unfinished_tasks_message",view.element).text(errMsg)})},cancelSubmission:function(submissionUUID){this.cancelSubmissionEnabled(false);var view=this;var comments=$(".cancel_submission_comments",this.element).val();this.server.cancelSubmission(submissionUUID,comments).done(function(){view.loadStudentInfo("staff-info__student__grade")}).fail(function(errorMessage){$(".cancel-submission-error").html(_.escape(errorMessage))})},cancelSubmissionEnabled:function(enabled){return this.baseView.buttonEnabled(".action--submit-cancel-submission",enabled)},comment:function(text){var $submissionComments=$(".cancel_submission_comments",this.element);if(typeof text==="undefined"){return $submissionComments.val()}else{$submissionComments.val(text)}},handleCommentChanged:function(){var isBlank=$.trim(this.comment())!=="";this.cancelSubmissionEnabled(isBlank)},staffSubmitEnabled:function(scope,enabled){return this.baseView.buttonEnabled(".wrapper--staff-assessment .action--submit",enabled)},assessmentRubricChanges:function(key,changesExist){if(changesExist){this.baseView.unsavedWarningEnabled(true,key,gettext("If you leave this page without submitting your staff assessment, you will lose any work you have done."))}},submitStaffOverride:function(submissionID,rubric,scope){var view=this;var successCallback=function(){view.baseView.unsavedWarningEnabled(false,view.OVERRIDE_UNSAVED_WARNING_KEY);view.loadStudentInfo("staff-info__student__grade")};this.callStaffAssess(submissionID,rubric,scope,successCallback,".staff-override-error","regrade")},submitStaffGrade:function(submissionID,rubric,scope,continueGrading){var view=this;var successCallback=function(){view.baseView.unsavedWarningEnabled(false,view.FULL_GRADE_UNSAVED_WARNING_KEY);view.staffGradeFormLoaded=false;if(continueGrading){view.loadStaffGradeForm();view.baseView.scrollToTop(".openassessment__staff-area")}else{view.closeStaffGradeForm(true)}};this.callStaffAssess(submissionID,rubric,scope,successCallback,".staff-grade-error","full-grade")},callStaffAssess:function(submissionID,rubric,scope,successCallback,errorSelector,assessType){var view=this;view.staffSubmitEnabled(scope,false);this.server.staffAssess(rubric.optionsSelected(),rubric.criterionFeedback(),rubric.overallFeedback(),submissionID,assessType).done(successCallback).fail(function(errorMessage){scope.find(errorSelector).html(_.escape(errorMessage));view.staffSubmitEnabled(scope,true)})}}})(OpenAssessment);OpenAssessment.StudentTrainingView=function(element,server,baseView){this.element=element;this.server=server;this.baseView=baseView;this.rubric=null};OpenAssessment.StudentTrainingView.prototype={load:function(usageID){var view=this;var stepID=".step--student-training";this.server.render("student_training").done(function(html){$(stepID,view.element).replaceWith(html);view.server.renderLatex($(stepID,view.element));view.installHandlers();if(typeof usageID!=="undefined"&&$(stepID,view.element).hasClass("is--showing")){$("[id='oa_training_"+usageID+"']",view.element).focus()}}).fail(function(){view.baseView.showLoadError("student-training")})},installHandlers:function(){var sel=$(".step--student-training",this.element);var view=this;this.baseView.setUpCollapseExpand(sel);var rubricSelector=$(".student-training--001__assessment",this.element);if(rubricSelector.size()>0){var rubricElement=rubricSelector.get(0);this.rubric=new OpenAssessment.Rubric(rubricElement)}if(this.rubric!==null){this.rubric.canSubmitCallback($.proxy(this.assessButtonEnabled,this))}sel.find(".student-training--001__assessment__submit").click(function(eventObject){eventObject.preventDefault();view.assess()})},assess:function(){this.assessButtonEnabled(false);var options={};if(this.rubric!==null){options=this.rubric.optionsSelected()}var view=this;var baseView=this.baseView;var usageID=baseView.getUsageID();this.server.trainingAssess(options).done(function(corrections){var incorrect=$(".openassessment__student-training--incorrect",view.element);var instructions=$(".openassessment__student-training--instructions",view.element);if(!view.rubric.showCorrections(corrections)){view.load(usageID);baseView.loadAssessmentModules(usageID);incorrect.addClass("is--hidden");instructions.removeClass("is--hidden")}else{instructions.addClass("is--hidden");incorrect.removeClass("is--hidden")}baseView.scrollToTop(".step--student-training")}).fail(function(errMsg){baseView.toggleActionError("student-training",errMsg);view.assessButtonEnabled(true)})},assessButtonEnabled:function(isEnabled){return this.baseView.buttonEnabled(".student-training--001__assessment__submit",isEnabled)}};
......@@ -1114,11 +1114,6 @@
@include margin-right(($baseline-h/4));
}
.leaderboard__title {
@extend %t-superheading;
color: $heading-color;
}
.list.leaderboard__score__list {
list-style-type: none;
......@@ -1146,7 +1141,7 @@
.leaderboard__score__title {
font-size: 15px;
color: $edx-gray-l1;
color: $heading-color;
text-transform: uppercase;
display: inline-block;
@include padding-left(15px);
......
......@@ -42,7 +42,7 @@
}
// step title/name
h2.step__title {
.step__title {
@include text-align(left);
@include float(none);
margin-top: 0 !important;
......@@ -80,7 +80,7 @@
// submission answer leaderboard fix (TNL-4009). 4 class selectors is more specific than
// lms/static/sass/course/courseware/_courseware.scss#L453 in edx-platform (3 class selectors)
.leaderboard__answer .submission__answer__display__content {
h2.submission__answer__part__text__title {
.submission__answer__part__text__title {
@include text-align(left);
@include float(none);
font-size: inherit;
......
......@@ -239,10 +239,6 @@
}
}
.step__status__label {
@extend %text-sr;
}
// step content wrapper
.wrapper--step__content {
margin-top: ($baseline-v/2);
......@@ -547,11 +543,16 @@
@extend %t-heading;
}
div.submission__answer__part__text__value {
.submission__answer__part__text__value {
margin: ($baseline-v/2) 0;
&:not(textarea) {
border: 1px solid $color-decorative-secondary;
background-color: $white;
padding: $baseline-v;
}
}
// --------------------
// response
......
......@@ -286,7 +286,7 @@ class TestPeerAssessment(XBlockHandlerTestCase):
self.assertIsNotNone(peer_response)
self.assertNotIn(submission["answer"]["parts"][0]["text"].encode('utf-8'), peer_response.body)
self.assertNotIn(submission["answer"]["parts"][1]["text"].encode('utf-8'), peer_response.body)
self.assertIn("Peer Assessments Complete", peer_response.body)
self.assertIn("You have successfully completed", peer_response.body)
@ddt.ddt
......
......@@ -416,9 +416,18 @@ class AssessmentPage(OpenAssessmentPage, AssessmentMixin):
if self._assessment_type not in ['peer-assessment', 'student-training']:
msg = "Only peer assessment and student training steps can retrieve the number completed"
raise PageConfigurationError(msg)
status_completed_css = self._bounded_selector(".step__status__value--completed")
candidates = [int(x) for x in self.q(css=status_completed_css).text]
return candidates[0] if len(candidates) > 0 else None
complete_candidates = [int(x) for x in self.q(css=status_completed_css).text]
if len(complete_candidates) > 0:
completed = complete_candidates[0]
else:
# The number completed is no longer available on this page, but can be inferred from the
# current review number.
status_current_css = self._bounded_selector(".step__status__number--current")
current_candidates = [int(y) for y in self.q(css=status_current_css).text]
completed = current_candidates[0] - 1 if len(current_candidates) > 0 and current_candidates[0] > 0 else None
return completed
@property
def label(self):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment