* fix: migrate remaining eslint-config-edx * refactor: updated eslint rules according to eslint-config-edx-es5 * refactor: add custom rules to suppress unnecessary eslint issues * refactor: add custom rules to internal eslint configs * fix: fix all indentation issues * chore: update lock file
80 lines
3.4 KiB
JavaScript
80 lines
3.4 KiB
JavaScript
define(['js/views/validation',
|
|
'gettext',
|
|
'edx-ui-toolkit/js/utils/string-utils',
|
|
'edx-ui-toolkit/js/utils/html-utils',
|
|
'underscore',
|
|
'jquery'],
|
|
function(ValidatingView, gettext, StringUtils, HtmlUtils, _, $) {
|
|
var GraderView = ValidatingView.extend({
|
|
// Model class is CMS.Models.Settings.CourseGrader
|
|
events: {
|
|
'input input': 'updateModel',
|
|
'input textarea': 'updateModel',
|
|
// Leaving change in as fallback for older browsers
|
|
'change input': 'updateModel',
|
|
'change textarea': 'updateModel',
|
|
'click .remove-grading-data': 'deleteModel',
|
|
// would love to move to a general superclass, but event hashes don't inherit in backbone :-(
|
|
'focus :input': 'inputFocus',
|
|
'blur :input': 'inputUnfocus'
|
|
},
|
|
initialize: function() {
|
|
this.listenTo(this.model, 'invalid', this.handleValidationError);
|
|
this.selectorToField = _.invert(this.fieldToSelectorMap);
|
|
this.render();
|
|
},
|
|
|
|
render: function() {
|
|
return this;
|
|
},
|
|
fieldToSelectorMap: {
|
|
type: 'course-grading-assignment-name',
|
|
short_label: 'course-grading-assignment-shortname',
|
|
min_count: 'course-grading-assignment-totalassignments',
|
|
drop_count: 'course-grading-assignment-droppable',
|
|
weight: 'course-grading-assignment-gradeweight'
|
|
},
|
|
updateModel: function(event) {
|
|
// HACK to fix model sometimes losing its pointer to the collection [I think I fixed this but leaving
|
|
// this in out of paranoia. If this error ever happens, the user will get a warning that they cannot
|
|
// give 2 assignments the same name.]
|
|
if (!this.model.collection) {
|
|
this.model.collection = this.collection;
|
|
}
|
|
|
|
switch (event.currentTarget.id) {
|
|
case 'course-grading-assignment-totalassignments':
|
|
this.$el.find('#course-grading-assignment-droppable').attr('max', $(event.currentTarget).val());
|
|
this.setField(event);
|
|
break;
|
|
case 'course-grading-assignment-name':
|
|
// Keep the original name, until we save
|
|
this.oldName = this.oldName === undefined ? this.model.get('type') : this.oldName;
|
|
// If the name has changed, alert the user to change all subsection names.
|
|
if (this.setField(event) != this.oldName && !_.isEmpty(this.oldName)) {
|
|
// overload the error display logic
|
|
this._cacheValidationErrors.push(event.currentTarget);
|
|
var message = StringUtils.interpolate(
|
|
gettext('For grading to work, you must change all {oldName} subsections to {newName}.'),
|
|
{
|
|
oldName: this.oldName,
|
|
newName: this.model.get('type')
|
|
}
|
|
);
|
|
HtmlUtils.append($(event.currentTarget).parent(), this.errorTemplate({message: message}));
|
|
}
|
|
break;
|
|
default:
|
|
this.setField(event);
|
|
break;
|
|
}
|
|
},
|
|
deleteModel: function(e) {
|
|
e.preventDefault();
|
|
this.collection.remove(this.model);
|
|
}
|
|
});
|
|
|
|
return GraderView;
|
|
}); // end define()
|