diff --git a/Makefile b/Makefile index 368eef778b..0b07aa5de1 100644 --- a/Makefile +++ b/Makefile @@ -25,8 +25,8 @@ update-npm-requirements: cp ./node_modules/backgrid/lib/backgrid*.css $(STATIC_CSS)/lib/backgrid/ javascript: update-npm-requirements - node_modules/.bin/uglifyjs $(STATIC_JS)/src/oa_shared.js $(STATIC_JS)/src/*.js $(STATIC_JS)/src/lms/*.js $(STATIC_JS)/lib/backgrid/backgrid.min.js -c warnings=false > "$(STATIC_JS)/openassessment-lms.min.js" - node_modules/.bin/uglifyjs $(STATIC_JS)/src/oa_shared.js $(STATIC_JS)/src/*.js $(STATIC_JS)/src/studio/*.js $(STATIC_JS)/lib/backgrid/backgrid.min.js -c warnings=false > "$(STATIC_JS)/openassessment-studio.min.js" + node_modules/.bin/uglifyjs $(STATIC_JS)/src/oa_shared.js $(STATIC_JS)/src/*.js $(STATIC_JS)/src/lms/*.js $(STATIC_JS)/lib/backgrid/backgrid.min.js -c > "$(STATIC_JS)/openassessment-lms.min.js" + node_modules/.bin/uglifyjs $(STATIC_JS)/src/oa_shared.js $(STATIC_JS)/src/*.js $(STATIC_JS)/src/studio/*.js $(STATIC_JS)/lib/backgrid/backgrid.min.js -c > "$(STATIC_JS)/openassessment-studio.min.js" sass: python scripts/compile_sass.py diff --git a/openassessment/templates/openassessmentblock/edit/oa_edit.html b/openassessment/templates/openassessmentblock/edit/oa_edit.html index efde4e24b5..6e6a7d2f20 100644 --- a/openassessment/templates/openassessmentblock/edit/oa_edit.html +++ b/openassessment/templates/openassessmentblock/edit/oa_edit.html @@ -10,10 +10,13 @@
{% trans "The display name for this component." %}
@@ -69,6 +74,7 @@{% trans "The date and time when learners can begin submitting responses." %}
@@ -98,6 +104,7 @@{% trans "The date and time when learners can no longer submit responses." %}
@@ -109,6 +116,7 @@{% trans "Specify whether learners must include a text based response to this problem's prompt." %} @@ -122,6 +130,7 @@
{% trans "Specify whether learners are able to upload files as a part of their response." %} @@ -134,6 +143,7 @@
{% trans "Specify whether learners can submit files along with their text responses. Select Images to allow JPG, GIF, or PNG files. Select PDF or Images to allow PDF files and images. Select Custom File Types to allow files with extensions that you specify below. (Use the Select Custom File Types option with caution.)" %} @@ -146,6 +156,7 @@
{% trans "Enter the file extensions, separated by commas, that you want learners to be able to upload. For example: pdf,doc,docx." %} @@ -161,6 +172,8 @@
{% trans "Specify whether learners can write LaTeX formatted strings"%}
@@ -174,6 +187,7 @@{% trans "Specify the number of top scoring responses to display. Valid numbers are 0 to 99. If the number is 0, the Top Responses section does not appear to learners." %}
@@ -191,17 +205,17 @@{% trans "You cannot delete a criterion after the assignment has been released." %}
- +{% trans "Enter feedback text that learners will see before they enter their own feedback. Use this text to show learners a good example peer assessment." %}
diff --git a/openassessment/templates/openassessmentblock/edit/oa_edit_self_assessment.html b/openassessment/templates/openassessmentblock/edit/oa_edit_self_assessment.html index 9c5eb2d4d9..cdc7452c7f 100644 --- a/openassessment/templates/openassessmentblock/edit/oa_edit_self_assessment.html +++ b/openassessment/templates/openassessmentblock/edit/oa_edit_self_assessment.html @@ -6,7 +6,8 @@@@ -26,6 +27,7 @@ class="input setting-input" value="{{ assessments.self_assessment.start|utc|date:"Y-m-d" }}" > +
diff --git a/openassessment/templates/openassessmentblock/edit/oa_edit_student_training.html b/openassessment/templates/openassessmentblock/edit/oa_edit_student_training.html index e873ed42ca..70170bd295 100644 --- a/openassessment/templates/openassessmentblock/edit/oa_edit_student_training.html +++ b/openassessment/templates/openassessmentblock/edit/oa_edit_student_training.html @@ -6,7 +6,8 @@
"+value+"
\n"}),$readerFeedbackSelector.html(htmlFeedback)},areSRStepsLoading:function(){return this.responseView.isRendering||this.peerView.isRendering||this.selfView.isRendering||this.gradeView.isRendering||this.trainingView.isRendering||this.staffView.isRendering},announceStatusChangeToSRandFocus:function(stepID,usageID,gradeStatus,currentView,focusID){var text=this.getStatus(stepID,currentView,gradeStatus);void 0!==usageID&&$(stepID,currentView.element).hasClass("is--showing")&&void 0!==focusID?($(focusID,currentView.element).focus(),this.srStatusUpdates.push(text)):currentView.announceStatus&&this.srStatusUpdates.push(text),!this.areSRStepsLoading()&&0"+(message?_.escape(message):"")+"
"),$(container,element).toggleClass("has--error",null!==message),$(container+" > .message",element).focus()),null!==message){var contentTitle=$(container+" .message__title").text();this.srReadTexts([contentTitle,message])}},showLoadError:function(stepName,errorMessage){errorMessage||(errorMessage=gettext("Unable to load"));var $container=$(".step--"+stepName);$container.toggleClass("has--error",!0),$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(void 0===enabled)return null!==window.onbeforeunload;var usageID=$(this.element).data("usage-id");enabled?(void 0!==OpenAssessment.unsavedChanges[usageID]&&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]}):void 0!==OpenAssessment.unsavedChanges[usageID]&&(delete OpenAssessment.unsavedChanges[usageID][key],$.isEmptyObject(OpenAssessment.unsavedChanges[usageID])&&delete OpenAssessment.unsavedChanges[usageID],$.isEmptyObject(OpenAssessment.unsavedChanges)&&(window.onbeforeunload=null))},buttonEnabled:function(className,enabled){var $element=$(className,this.element);return void 0===enabled?!$element.prop("disabled"):($element.prop("disabled",!enabled),enabled)}},function(OpenAssessment){"use strict";OpenAssessment.CourseItemsListingView=function(runtime,element){var self=this,$section=$(element),block=$section.find(".open-response-assessment-block"),itemViewEnabled=1===parseInt(block.data("item-view-enabled"))&&XBlock;this.$section=$section,this.runtime=runtime,this.oraData=$.parseJSON($("#open-response-assessment-items").text()),$section.find(".open-response-assessment-content").hide(),$section.find(".open-response-assessment-item").hide(),$section.find(".open-response-assessment-msg").show();var AssessmentCell=Backgrid.UriCell.extend({staff:!1,render:function(){this.$el.empty();var url=this.model.get(this.staff?"url_grade_available_responses":"url_base"),rawValue=this.model.get(this.column.get("name")),staffAssessment=this.model.get("staff_assessment"),formattedValue=this.formatter.fromRaw(rawValue,this.model),link=null;return itemViewEnabled&&(!this.staff||this.staff&&staffAssessment)?(link=$("",{text:formattedValue,title:this.title||formattedValue}),this.$el.append(link),link.on("click",$.proxy(self,"displayOraBlock",url))):this.$el.append(formattedValue),this.delegateEvents(),this}}),StaffCell=AssessmentCell.extend({staff:!0});this._columns=[{name:"parent_name",label:gettext("Unit Name"),label_summary:gettext("Units"),cell:"string",num:!1,editable:!1},{name:"name",label:gettext("Assessment"),label_summary:gettext("Assessments"),cell:AssessmentCell,num:!1,editable:!1},{name:"total",label:gettext("Total Responses"),label_summary:gettext("Total Responses"),cell:"string",num:!0,editable:!1},{name:"training",label:gettext("Training"),label_summary:gettext("Training"),cell:"string",num:!0,editable:!1},{name:"peer",label:gettext("Peer"),label_summary:gettext("Peer"),cell:"string",num:!0,editable:!1},{name:"self",label:gettext("Self"),label_summary:gettext("Self"),cell:"string",num:!0,editable:!1},{name:"waiting",label:gettext("Waiting"),label_summary:gettext("Waiting"),cell:"string",num:!0,editable:!1},{name:"staff",label:gettext("Staff"),label_summary:gettext("Staff"),cell:StaffCell,num:!0,editable:!1},{name:"done",label:gettext("Final Grade Received"),label_summary:gettext("Final Grade Received"),cell:"string",num:!0,editable:!1}]},OpenAssessment.CourseItemsListingView.prototype.refreshGrids=function(force){force=force||!1;var self=this,$section=this.$section,block=$section.find(".open-response-assessment-block"),dataUrl=this.runtime.handlerUrl($section,"get_ora2_responses");if(!parseInt(block.data("rendered"))||force)return $.Deferred(function(defer){$.ajax({type:"GET",dataType:"json",url:dataUrl}).done(function(data){self.renderGrids(data),defer.resolve()}).fail(function(data,textStatus){$section.find(".open-response-assessment-msg").text(gettext("List of Open Assessments is unavailable")),defer.rejectWith(this,[textStatus])})}).promise()},OpenAssessment.CourseItemsListingView.prototype.renderGrids=function(data){var $section=this.$section,block=$section.find(".open-response-assessment-block"),oraSteps=["training","peer","self","waiting","staff","done"];$.each(this.oraData,function(i,oraItem){var total=0,itemId=oraItem.id;$.each(oraSteps,function(j,step){oraItem[step]=0}),itemId in data&&(_.extend(oraItem,data[itemId]),oraItem.staff_assessment&&(oraItem.staff=oraItem.waiting,oraItem.waiting=0)),$.each(oraSteps,function(j,step){total+=oraItem[step]}),oraItem.total=total}),block.data("rendered",1),$section.find(".open-response-assessment-msg").hide(),this.showSummaryGrid(this.oraData),this.showOpenResponsesGrid(this.oraData)},OpenAssessment.CourseItemsListingView.prototype.showSummaryGrid=function(data){var $section=this.$section,summaryData=[],summaryDataMap={};$section.find(".open-response-assessment-summary").empty(),$.each(this._columns,function(index,v){summaryData.push({title:v.label_summary,value:0,num:v.num,class:v.name}),summaryDataMap[v.name]=index}),$.each(data,function(index,obj){$.each(obj,function(key,value){var idx=0;key in summaryDataMap&&(idx=summaryDataMap[key],summaryData[idx].num?summaryData[idx].value+=value:summaryData[idx].value+=1)})});var templateData=_.template($("#open-response-assessment-summary-tpl").text());$section.find(".open-response-assessment-summary").append(templateData({oraSummary:summaryData}))},OpenAssessment.CourseItemsListingView.prototype.showOpenResponsesGrid=function(data){var $section=this.$section;$section.find(".open-response-assessment-content").show();var collection=new Backbone.Collection(data);$section.find(".open-response-assessment-main-table").empty();var grid=new Backgrid.Grid({columns:this._columns,collection:collection});$section.find(".open-response-assessment-main-table").append(grid.render().el)},OpenAssessment.CourseItemsListingView.prototype.displayOraBlock=function(url){var $section=this.$section,self=this;return $section.find(".open-response-assessment-content").hide(),$section.find(".open-response-assessment-msg").text(gettext("Please wait")).show(),$.Deferred(function(defer){$.ajax({type:"GET",dataType:"json",url:url}).done(function(data){var el=$section.find(".open-response-assessment-item"),block=el.find(".open-response-assessment-item-block");$section.find(".open-response-assessment-msg").hide(),el.show(),self.renderBreadcrumbs(),block.html(data.html),XBlock.initializeBlock($(block).find(".xblock")[0]),defer.resolve()}).fail(function(data,textStatus){$section.find(".open-response-assessment-item").show(),$section.find(".open-response-assessment-msg").text(gettext("Block view is unavailable")),self.renderBreadcrumbs(),defer.rejectWith(this,[textStatus])})}).promise()},OpenAssessment.CourseItemsListingView.prototype.renderBreadcrumbs=function(){var breadcrumbs=this.$section.find(".open-response-assessment-item-breadcrumbs"),text=gettext("Back to Full List"),fullListItem=$("",{html:"← "+text,title:text});breadcrumbs.append(fullListItem),fullListItem.on("click",$.proxy(this,"backToOpenResponsesGrid"))},OpenAssessment.CourseItemsListingView.prototype.backToOpenResponsesGrid=function(){var $section=this.$section;$section.find(".open-response-assessment-item-breadcrumbs").empty(),$section.find(".open-response-assessment-item-block").empty(),$section.find(".open-response-assessment-item").hide(),$section.find(".open-response-assessment-msg").text(gettext("Please wait")).show(),this.refreshGrids(!0)}}(OpenAssessment),OpenAssessment.DateTimeFactory=function(element){this.element=element},OpenAssessment.DateTimeFactory.prototype={apply:function(){var dtFactory=this;$(".ora-datetime",this.element).each(function(){dtFactory.elementApply($(this))})},determineContext:function(el){return{datetime:el.data("datetime"),timezone:el.data("timezone"),language:el.data("language"),format:""}},determineDateToken:function(el){var dateToken="date";return this.isValid(el.data("datetoken"))&&(dateToken=el.data("datetoken")),dateToken},elementApply:function(el){var dtFactory=this;(function(require){require(["jquery","edx-ui-toolkit/js/utils/date-utils","edx-ui-toolkit/js/utils/string-utils"],function($,DateUtils,StringUtils){var context,localTimeString,displayDatetime,interpolateDict={};dtFactory.isValid(el.data("datetime"))?(context=dtFactory.determineContext(el),dtFactory.isValid(el.data("format"))&&(context.format=DateUtils.dateFormatEnum[el.data("format")]),localTimeString=DateUtils.localize(context),interpolateDict[dtFactory.determineDateToken(el)]=localTimeString,displayDatetime=dtFactory.isValid(el.data("string"))?StringUtils.interpolate(el.data("string"),interpolateDict):localTimeString):displayDatetime=StringUtils.interpolate(el.data("string"),interpolateDict),el.text(displayDatetime)})}).call(this,require||RequireJS.require)},isValid:function(candidateVariable){return void 0!==candidateVariable&&""!==candidateVariable&&"Invalid date"!==candidateVariable&&"None"!==candidateVariable}},OpenAssessment.FileUploader=function(){this.upload=function(url,file){return $.Deferred(function(defer){$.ajax({url:url,type:"PUT",data:file,async:!1,processData:!1,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,this.announceStatus=!1,this.isRendering=!1,this.dateFactory=new OpenAssessment.DateTimeFactory(this.element)},OpenAssessment.GradeView.prototype={load:function(usageID){var view=this,baseView=this.baseView,stepID=".step--grade",focusID="[id='oa_grade_"+usageID+"']";view.isRendering=!0,this.server.render("grade").done(function(html){$(stepID,view.element).replaceWith(html),view.server.renderLatex($(stepID,view.element)),view.isRendering=!1,view.installHandlers(),view.baseView.announceStatusChangeToSRandFocus(stepID,usageID,!0,view,focusID),view.dateFactory.apply()}).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(void 0===text)return $("[id='feedback__remarks__value__"+usageID+"']",this.element).val();$("[id='feedback__remarks__value__"+usageID+"']",this.element).val(text)},feedbackOptions:function(options){var view=this,usageID=this.baseView.getUsageID()||"";if(void 0===options)return $.map($(".feedback__overall__value:checked",view.element),function(element){return $(element).val()});$(".feedback__overall__value",this.element).prop("checked",!1),$.each(options,function(index,opt){$("[id='feedback__overall__value--"+opt+"__"+usageID+"']",view.element).prop("checked",!0)})},setHidden:function(selector,hidden){selector.toggleClass("is--hidden",hidden),selector.attr("aria-hidden",hidden?"true":"false")},isHidden:function(selector){return selector.hasClass("is--hidden")&&"true"===selector.attr("aria-hidden")},feedbackState:function(newState){var containerSel=$(".submission__feedback__content",this.element),instructionsSel=containerSel.find(".submission__feedback__instructions"),fieldsSel=containerSel.find(".submission__feedback__fields"),actionsSel=containerSel.find(".submission__feedback__actions"),transitionSel=containerSel.find(".transition__status"),messageSel=containerSel.find(".message--complete");if(void 0===newState){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),hasSubmitted=containerSel.hasClass("is--submitted")&&this.isHidden(transitionSel)&&!this.isHidden(messageSel)&&this.isHidden(instructionsSel)&&this.isHidden(fieldsSel)&&this.isHidden(actionsSel);if(!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))return"open";if(isSubmitting)return"submitting";if(hasSubmitted)return"submitted";throw"Invalid feedback state"}"open"===newState?(containerSel.toggleClass("is--transitioning",!1),containerSel.toggleClass("is--submitting",!1),containerSel.toggleClass("is--submitted",!1),this.setHidden(instructionsSel,!1),this.setHidden(fieldsSel,!1),this.setHidden(actionsSel,!1),this.setHidden(transitionSel,!0),this.setHidden(messageSel,!0)):"submitting"===newState?(containerSel.toggleClass("is--transitioning",!0),containerSel.toggleClass("is--submitting",!0),containerSel.toggleClass("is--submitted",!1),this.setHidden(instructionsSel,!0),this.setHidden(fieldsSel,!0),this.setHidden(actionsSel,!0),this.setHidden(transitionSel,!1),this.setHidden(messageSel,!0)):"submitted"===newState&&(containerSel.toggleClass("is--transitioning",!1),containerSel.toggleClass("is--submitting",!1),containerSel.toggleClass("is--submitted",!0),this.setHidden(instructionsSel,!0),this.setHidden(fieldsSel,!0),this.setHidden(actionsSel,!0),this.setHidden(transitionSel,!0),this.setHidden(messageSel,!1))},submitFeedbackOnAssessment:function(){var view=this,baseView=this.baseView;$(".feedback__submit",this.element).prop("disabled",!0),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,baseView=this.baseView,stepID=".step--leaderboard";this.server.render("leaderboard").done(function(html){$(stepID,view.element).replaceWith(html),view.server.renderLatex($(stepID,view.element)),view.installHandlers(),void 0!==usageID&&$(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,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,this.isRendering=!1,this.announceStatus=!1,this.dateFactory=new OpenAssessment.DateTimeFactory(this.element)},OpenAssessment.PeerView.prototype={UNSAVED_WARNING_KEY:"peer-assessment",load:function(usageID){var view=this,stepID=".step--peer-assessment",focusID="[id='oa_peer_"+usageID+"']";view.isRendering=!0,this.server.render("peer_assessment").done(function(html){$(stepID,view.element).replaceWith(html),view.isRendering=!1,view.server.renderLatex($(stepID,view.element)),view.installHandlers(!1),view.baseView.announceStatusChangeToSRandFocus(stepID,usageID,!1,view,focusID),view.announceStatus=!1,view.dateFactory.apply()}).fail(function(){view.baseView.showLoadError("peer-assessment")}),view.baseView.loadMessageView()},loadContinuedAssessment:function(usageID){var view=this,focusID="[id='oa_peer_"+usageID+"']";view.continueAssessmentEnabled(!1),view.isRendering=!0,this.server.renderContinuedPeer().done(function(html){$(".step--peer-assessment",view.element).replaceWith(html),view.server.renderLatex($(".step--peer-assessment",view.element)),view.isRendering=!1,view.installHandlers(!0),view.baseView.announceStatusChangeToSRandFocus(".step--peer-assessment",usageID,!1,view,focusID)}).fail(function(){view.baseView.showLoadError("peer-assessment"),view.continueAssessmentEnabled(!0)})},continueAssessmentEnabled:function(enabled){return this.baseView.buttonEnabled(".action--continue--grading",enabled)},installHandlers:function(isContinuedAssessment){var sel=$(".step--peer-assessment",this.element),view=this;this.baseView.setUpCollapseExpand(sel),this.baseView.bindLatexPreview(sel);var rubricSelector=$(".peer-assessment--001__assessment",this.element);if(0"+value+"
\n"}),$readerFeedbackSelector.html(htmlFeedback)},areSRStepsLoading:function(){return this.responseView.isRendering||this.peerView.isRendering||this.selfView.isRendering||this.gradeView.isRendering||this.trainingView.isRendering||this.staffView.isRendering},announceStatusChangeToSRandFocus:function(stepID,usageID,text,currentView,focusID){text=this.getStatus(stepID,currentView,text);void 0!==usageID&&$(stepID,currentView.element).hasClass("is--showing")&&void 0!==focusID?($(focusID,currentView.element).focus(),this.srStatusUpdates.push(text)):currentView.announceStatus&&this.srStatusUpdates.push(text),!this.areSRStepsLoading()&&0"+(message?_.escape(message):"")+"
"),$(contentTitle,element).toggleClass("has--error",null!==message),$(contentTitle+" > .message",element).focus()),null!==message&&(contentTitle=$(contentTitle+" .message__title").text(),this.srReadTexts([contentTitle,message]))},showLoadError:function($container,errorMessage){errorMessage=errorMessage||gettext("Unable to load");$container=$(".step--"+$container);$container.toggleClass("has--error",!0),$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(void 0===enabled)return null!==window.onbeforeunload;var usageID=$(this.element).data("usage-id");enabled?(void 0!==OpenAssessment.unsavedChanges[usageID]&&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]}):void 0!==OpenAssessment.unsavedChanges[usageID]&&(delete OpenAssessment.unsavedChanges[usageID][key],$.isEmptyObject(OpenAssessment.unsavedChanges[usageID])&&delete OpenAssessment.unsavedChanges[usageID],$.isEmptyObject(OpenAssessment.unsavedChanges)&&(window.onbeforeunload=null))},buttonEnabled:function($element,enabled){$element=$($element,this.element);return void 0===enabled?!$element.prop("disabled"):($element.prop("disabled",!enabled),enabled)}},function(OpenAssessment){"use strict";OpenAssessment.CourseItemsListingView=function(AssessmentCell,block){var self=this,StaffCell=$(block),block=StaffCell.find(".open-response-assessment-block"),itemViewEnabled=1===parseInt(block.data("item-view-enabled"))&&XBlock;this.$section=StaffCell,this.runtime=AssessmentCell,this.oraData=$.parseJSON($("#open-response-assessment-items").text()),StaffCell.find(".open-response-assessment-content").hide(),StaffCell.find(".open-response-assessment-item").hide(),StaffCell.find(".open-response-assessment-msg").show();AssessmentCell=Backgrid.UriCell.extend({staff:!1,render:function(){this.$el.empty();var url=this.model.get(this.staff?"url_grade_available_responses":"url_base"),link=this.model.get(this.column.get("name")),staffAssessment=this.model.get("staff_assessment"),formattedValue=this.formatter.fromRaw(link,this.model),link=null;return itemViewEnabled&&(!this.staff||this.staff&&staffAssessment)?(link=$("",{text:formattedValue,title:this.title||formattedValue}),this.$el.append(link),link.on("click",$.proxy(self,"displayOraBlock",url))):this.$el.append(formattedValue),this.delegateEvents(),this}}),StaffCell=AssessmentCell.extend({staff:!0});this._columns=[{name:"parent_name",label:gettext("Unit Name"),label_summary:gettext("Units"),cell:"string",num:!1,editable:!1},{name:"name",label:gettext("Assessment"),label_summary:gettext("Assessments"),cell:AssessmentCell,num:!1,editable:!1},{name:"total",label:gettext("Total Responses"),label_summary:gettext("Total Responses"),cell:"string",num:!0,editable:!1},{name:"training",label:gettext("Training"),label_summary:gettext("Training"),cell:"string",num:!0,editable:!1},{name:"peer",label:gettext("Peer"),label_summary:gettext("Peer"),cell:"string",num:!0,editable:!1},{name:"self",label:gettext("Self"),label_summary:gettext("Self"),cell:"string",num:!0,editable:!1},{name:"waiting",label:gettext("Waiting"),label_summary:gettext("Waiting"),cell:"string",num:!0,editable:!1},{name:"staff",label:gettext("Staff"),label_summary:gettext("Staff"),cell:StaffCell,num:!0,editable:!1},{name:"done",label:gettext("Final Grade Received"),label_summary:gettext("Final Grade Received"),cell:"string",num:!0,editable:!1}]},OpenAssessment.CourseItemsListingView.prototype.refreshGrids=function(force){force=force||!1;var self=this,$section=this.$section,block=$section.find(".open-response-assessment-block"),dataUrl=this.runtime.handlerUrl($section,"get_ora2_responses");if(!parseInt(block.data("rendered"))||force)return $.Deferred(function(defer){$.ajax({type:"GET",dataType:"json",url:dataUrl}).done(function(data){self.renderGrids(data),defer.resolve()}).fail(function(data,textStatus){$section.find(".open-response-assessment-msg").text(gettext("List of Open Assessments is unavailable")),defer.rejectWith(this,[textStatus])})}).promise()},OpenAssessment.CourseItemsListingView.prototype.renderGrids=function(data){var $section=this.$section,block=$section.find(".open-response-assessment-block"),oraSteps=["training","peer","self","waiting","staff","done"];$.each(this.oraData,function(i,oraItem){var total=0,itemId=oraItem.id;$.each(oraSteps,function(j,step){oraItem[step]=0}),itemId in data&&(_.extend(oraItem,data[itemId]),oraItem.staff_assessment&&(oraItem.staff=oraItem.waiting,oraItem.waiting=0)),$.each(oraSteps,function(j,step){total+=oraItem[step]}),oraItem.total=total}),block.data("rendered",1),$section.find(".open-response-assessment-msg").hide(),this.showSummaryGrid(this.oraData),this.showOpenResponsesGrid(this.oraData)},OpenAssessment.CourseItemsListingView.prototype.showSummaryGrid=function(templateData){var $section=this.$section,summaryData=[],summaryDataMap={};$section.find(".open-response-assessment-summary").empty(),$.each(this._columns,function(index,v){summaryData.push({title:v.label_summary,value:0,num:v.num,class:v.name}),summaryDataMap[v.name]=index}),$.each(templateData,function(index,obj){$.each(obj,function(key,value){var idx;key in summaryDataMap&&(idx=summaryDataMap[key],summaryData[idx].num?summaryData[idx].value+=value:summaryData[idx].value+=1)})});templateData=_.template($("#open-response-assessment-summary-tpl").text());$section.find(".open-response-assessment-summary").append(templateData({oraSummary:summaryData}))},OpenAssessment.CourseItemsListingView.prototype.showOpenResponsesGrid=function(grid){var $section=this.$section;$section.find(".open-response-assessment-content").show();grid=new Backbone.Collection(grid);$section.find(".open-response-assessment-main-table").empty();grid=new Backgrid.Grid({columns:this._columns,collection:grid});$section.find(".open-response-assessment-main-table").append(grid.render().el)},OpenAssessment.CourseItemsListingView.prototype.displayOraBlock=function(url){var $section=this.$section,self=this;return $section.find(".open-response-assessment-content").hide(),$section.find(".open-response-assessment-msg").text(gettext("Please wait")).show(),$.Deferred(function(defer){$.ajax({type:"GET",dataType:"json",url:url}).done(function(data){var el=$section.find(".open-response-assessment-item"),block=el.find(".open-response-assessment-item-block");$section.find(".open-response-assessment-msg").hide(),el.show(),self.renderBreadcrumbs(),block.html(data.html),XBlock.initializeBlock($(block).find(".xblock")[0]),defer.resolve()}).fail(function(data,textStatus){$section.find(".open-response-assessment-item").show(),$section.find(".open-response-assessment-msg").text(gettext("Block view is unavailable")),self.renderBreadcrumbs(),defer.rejectWith(this,[textStatus])})}).promise()},OpenAssessment.CourseItemsListingView.prototype.renderBreadcrumbs=function(){var breadcrumbs=this.$section.find(".open-response-assessment-item-breadcrumbs"),fullListItem=gettext("Back to Full List"),fullListItem=$("",{html:"← "+fullListItem,title:fullListItem});breadcrumbs.append(fullListItem),fullListItem.on("click",$.proxy(this,"backToOpenResponsesGrid"))},OpenAssessment.CourseItemsListingView.prototype.backToOpenResponsesGrid=function(){var $section=this.$section;$section.find(".open-response-assessment-item-breadcrumbs").empty(),$section.find(".open-response-assessment-item-block").empty(),$section.find(".open-response-assessment-item").hide(),$section.find(".open-response-assessment-msg").text(gettext("Please wait")).show(),this.refreshGrids(!0)}}(OpenAssessment),OpenAssessment.DateTimeFactory=function(element){this.element=element},OpenAssessment.DateTimeFactory.prototype={apply:function(){var dtFactory=this;$(".ora-datetime",this.element).each(function(){dtFactory.elementApply($(this))})},determineContext:function(el){return{datetime:el.data("datetime"),timezone:el.data("timezone"),language:el.data("language"),format:""}},determineDateToken:function(el){var dateToken="date";return dateToken=this.isValid(el.data("datetoken"))?el.data("datetoken"):dateToken},elementApply:function(el){var dtFactory=this;!function(require){require(["jquery","edx-ui-toolkit/js/utils/date-utils","edx-ui-toolkit/js/utils/string-utils"],function($,DateUtils,StringUtils){var localTimeString,displayDatetime={},displayDatetime=dtFactory.isValid(el.data("datetime"))?(localTimeString=dtFactory.determineContext(el),dtFactory.isValid(el.data("format"))&&(localTimeString.format=DateUtils.dateFormatEnum[el.data("format")]),localTimeString=DateUtils.localize(localTimeString),displayDatetime[dtFactory.determineDateToken(el)]=localTimeString,dtFactory.isValid(el.data("string"))?StringUtils.interpolate(el.data("string"),displayDatetime):localTimeString):StringUtils.interpolate(el.data("string"),displayDatetime);el.text(displayDatetime)})}.call(this,require||RequireJS.require)},isValid:function(candidateVariable){return void 0!==candidateVariable&&""!==candidateVariable&&"Invalid date"!==candidateVariable&&"None"!==candidateVariable}},OpenAssessment.FileUploader=function(){this.upload=function(url,file){return $.Deferred(function(defer){$.ajax({url:url,type:"PUT",data:file,async:!1,processData:!1,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,this.announceStatus=!1,this.isRendering=!1,this.dateFactory=new OpenAssessment.DateTimeFactory(this.element)},OpenAssessment.GradeView.prototype={load:function(usageID){var view=this,baseView=this.baseView,stepID=".step--grade",focusID="[id='oa_grade_"+usageID+"']";view.isRendering=!0,this.server.render("grade").done(function(html){$(stepID,view.element).replaceWith(html),view.server.renderLatex($(stepID,view.element)),view.isRendering=!1,view.installHandlers(),view.baseView.announceStatusChangeToSRandFocus(stepID,usageID,!0,view,focusID),view.dateFactory.apply()}).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(void 0===text)return $("[id='feedback__remarks__value__"+usageID+"']",this.element).val();$("[id='feedback__remarks__value__"+usageID+"']",this.element).val(text)},feedbackOptions:function(options){var view=this,usageID=this.baseView.getUsageID()||"";if(void 0===options)return $.map($(".feedback__overall__value:checked",view.element),function(element){return $(element).val()});$(".feedback__overall__value",this.element).prop("checked",!1),$.each(options,function(index,opt){$("[id='feedback__overall__value--"+opt+"__"+usageID+"']",view.element).prop("checked",!0)})},setHidden:function(selector,hidden){selector.toggleClass("is--hidden",hidden),selector.attr("aria-hidden",hidden?"true":"false")},isHidden:function(selector){return selector.hasClass("is--hidden")&&"true"===selector.attr("aria-hidden")},feedbackState:function(newState){var containerSel=$(".submission__feedback__content",this.element),instructionsSel=containerSel.find(".submission__feedback__instructions"),fieldsSel=containerSel.find(".submission__feedback__fields"),actionsSel=containerSel.find(".submission__feedback__actions"),transitionSel=containerSel.find(".transition__status"),messageSel=containerSel.find(".message--complete");if(void 0===newState){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),hasSubmitted=containerSel.hasClass("is--submitted")&&this.isHidden(transitionSel)&&!this.isHidden(messageSel)&&this.isHidden(instructionsSel)&&this.isHidden(fieldsSel)&&this.isHidden(actionsSel);if(!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))return"open";if(isSubmitting)return"submitting";if(hasSubmitted)return"submitted";throw"Invalid feedback state"}"open"===newState?(containerSel.toggleClass("is--transitioning",!1),containerSel.toggleClass("is--submitting",!1),containerSel.toggleClass("is--submitted",!1),this.setHidden(instructionsSel,!1),this.setHidden(fieldsSel,!1),this.setHidden(actionsSel,!1),this.setHidden(transitionSel,!0),this.setHidden(messageSel,!0)):"submitting"===newState?(containerSel.toggleClass("is--transitioning",!0),containerSel.toggleClass("is--submitting",!0),containerSel.toggleClass("is--submitted",!1),this.setHidden(instructionsSel,!0),this.setHidden(fieldsSel,!0),this.setHidden(actionsSel,!0),this.setHidden(transitionSel,!1),this.setHidden(messageSel,!0)):"submitted"===newState&&(containerSel.toggleClass("is--transitioning",!1),containerSel.toggleClass("is--submitting",!1),containerSel.toggleClass("is--submitted",!0),this.setHidden(instructionsSel,!0),this.setHidden(fieldsSel,!0),this.setHidden(actionsSel,!0),this.setHidden(transitionSel,!0),this.setHidden(messageSel,!1))},submitFeedbackOnAssessment:function(){var view=this,baseView=this.baseView;$(".feedback__submit",this.element).prop("disabled",!0),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,baseView=this.baseView,stepID=".step--leaderboard";this.server.render("leaderboard").done(function(html){$(stepID,view.element).replaceWith(html),view.server.renderLatex($(stepID,view.element)),view.installHandlers(),void 0!==usageID&&$(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,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,this.isRendering=!1,this.announceStatus=!1,this.dateFactory=new OpenAssessment.DateTimeFactory(this.element)},OpenAssessment.PeerView.prototype={UNSAVED_WARNING_KEY:"peer-assessment",load:function(usageID){var view=this,stepID=".step--peer-assessment",focusID="[id='oa_peer_"+usageID+"']";view.isRendering=!0,this.server.render("peer_assessment").done(function(html){$(stepID,view.element).replaceWith(html),view.isRendering=!1,view.server.renderLatex($(stepID,view.element)),view.installHandlers(!1),view.baseView.announceStatusChangeToSRandFocus(stepID,usageID,!1,view,focusID),view.announceStatus=!1,view.dateFactory.apply()}).fail(function(){view.baseView.showLoadError("peer-assessment")}),view.baseView.loadMessageView()},loadContinuedAssessment:function(usageID){var view=this,focusID="[id='oa_peer_"+usageID+"']";view.continueAssessmentEnabled(!1),view.isRendering=!0,this.server.renderContinuedPeer().done(function(html){$(".step--peer-assessment",view.element).replaceWith(html),view.server.renderLatex($(".step--peer-assessment",view.element)),view.isRendering=!1,view.installHandlers(!0),view.baseView.announceStatusChangeToSRandFocus(".step--peer-assessment",usageID,!1,view,focusID)}).fail(function(){view.baseView.showLoadError("peer-assessment"),view.continueAssessmentEnabled(!0)})},continueAssessmentEnabled:function(enabled){return this.baseView.buttonEnabled(".action--continue--grading",enabled)},installHandlers:function(isContinuedAssessment){var sel=$(".step--peer-assessment",this.element),view=this;this.baseView.setUpCollapseExpand(sel),this.baseView.bindLatexPreview(sel);var rubricElement=$(".peer-assessment--001__assessment",this.element);0