diff --git a/cms/static/js/views/settings/main_settings_view.js b/cms/static/js/views/settings/main_settings_view.js index 4f99fd5f7c..e8b19c85ff 100644 --- a/cms/static/js/views/settings/main_settings_view.js +++ b/cms/static/js/views/settings/main_settings_view.js @@ -1,4 +1,4 @@ -if (!CMS.Views['Settings']) CMS.Views.Settings = new Object(); +if (!CMS.Views['Settings']) CMS.Views.Settings = {}; // TODO move to common place CMS.Views.ValidatingView = Backbone.View.extend({ @@ -47,7 +47,7 @@ CMS.Views.ValidatingView = Backbone.View.extend({ $(ele).nextAll('.message-error').remove(); } } -}) +}); CMS.Views.Settings.Main = Backbone.View.extend({ // Model class is CMS.Models.Settings.CourseSettings @@ -105,7 +105,6 @@ CMS.Views.Settings.Main = Backbone.View.extend({ el: this.$el.find('.settings-' + this.currentTab), model: this.model.get(this.currentTab) }); - break; case 'faculty': break; case 'grading': @@ -113,7 +112,6 @@ CMS.Views.Settings.Main = Backbone.View.extend({ el: this.$el.find('.settings-' + this.currentTab), model: this.model.get(this.currentTab) }); - break; case 'problems': break; case 'discussions': @@ -125,8 +123,8 @@ CMS.Views.Settings.Main = Backbone.View.extend({ var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes(); - $(e.currentTarget).attr('title', (hours % 12 == 0 ? 12 : hours % 12) + ":" + (minutes < 10 ? "0" : "") - + now.getMinutes() + (hours < 12 ? "am" : "pm") + " (current local time)"); + $(e.currentTarget).attr('title', (hours % 12 === 0 ? 12 : hours % 12) + ":" + (minutes < 10 ? "0" : "") + + now.getMinutes() + (hours < 12 ? "am" : "pm") + " (current local time)"); }, showSettingsTab: function(e) { @@ -159,10 +157,10 @@ CMS.Views.Settings.Details = CMS.Views.ValidatingView.extend({ }, render: function() { - this.setupDatePicker('start_date') - this.setupDatePicker('end_date') - this.setupDatePicker('enrollment_start') - this.setupDatePicker('enrollment_end') + this.setupDatePicker('start_date'); + this.setupDatePicker('end_date'); + this.setupDatePicker('enrollment_start'); + this.setupDatePicker('enrollment_end'); if (this.model.has('syllabus')) { this.$el.find(this.fieldToSelectorMap['syllabus']).html( @@ -209,8 +207,14 @@ CMS.Views.Settings.Details = CMS.Views.ValidatingView.extend({ var cachethis = this; var savefield = function() { cachethis.clearValidationErrors(); - cacheModel.save(fieldName, new Date(datefield.datepicker('getDate').getTime() - + timefield.timepicker("getSecondsFromMidnight") * 1000)); + var date = datefield.datepicker('getDate'); + if (date) { + var time = timefield.timepicker("getSecondsFromMidnight"); + if (!time) { + time = 0; + } + cacheModel.save(fieldName, new Date(date.getTime() + time * 1000)); + } }; // instrument as date and time pickers @@ -245,7 +249,7 @@ CMS.Views.Settings.Details = CMS.Views.ValidatingView.extend({ this.clearValidationErrors(); var previewsource = this.model.save_videosource($(event.currentTarget).val()); this.$el.find(".current-course-introduction-video iframe").attr("src", previewsource); - break + break; default: break; @@ -307,29 +311,29 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ initialize : function() { // load template for grading view var self = this; - this.gradeCutoffTemplate = _.template('
  • ' + - '<%= descriptor %>' + + this.gradeCutoffTemplate = _.template('
  • ' + + '<%= descriptor %>' + '' + '<% if (removable) {%>remove<% ;} %>' + '
  • '); - + // Instrument grading scale // convert cutoffs to inversely ordered list var modelCutoffs = this.model.get('grade_cutoffs'); - for (cutoff in modelCutoffs) { + for (var cutoff in modelCutoffs) { this.descendingCutoffs.push({designation: cutoff, cutoff: Math.round(modelCutoffs[cutoff] * 100)}); } - this.descendingCutoffs = _.sortBy(this.descendingCutoffs, + this.descendingCutoffs = _.sortBy(this.descendingCutoffs, function (gradeEle) { return -gradeEle['cutoff']; }); - + // Instrument grace period this.$el.find('#course-grading-graceperiod').timepicker(); - + // instantiates an editor template for each update in the collection // Because this calls render, put it after everything which render may depend upon to prevent race condition. window.templateLoader.loadRemoteTemplate("course_info_update", "/static/client_templates/course_grade_policy.html", - function (raw_template) { + function (raw_template) { self.template = _.template(raw_template); self.render(); } @@ -373,7 +377,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ }, updateModel : function(event) { if (!this.selectorToField[event.currentTarget.id]) return; - + switch (this.selectorToField[event.currentTarget.id]) { case 'grace_period': this.clearValidationErrors(); @@ -406,7 +410,9 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ // HACK fixing a duplicate call issue by undoing previous call effect. Need to figure out why called 2x gradelist.empty(); var nextWidth = 100; // first width is 100% - var draggable = removable = false; // first and last are not removable, first is not draggable + // Can probably be simplified to one variable now. + var removable = false; + var draggable = false; // first and last are not removable, first is not draggable _.each(this.descendingCutoffs, function(cutoff, index) { var newBar = this.gradeCutoffTemplate({ @@ -463,7 +469,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ // minus 2 b/c minus 1 is the element we're effecting. It's max is just shy of the next one above it var max = (barIndex >= 2 ? cachethis.descendingCutoffs[barIndex - 2]['cutoff'] - 3 : 97); ui.element.resizable("option",{minWidth : min * widthPerPoint, maxWidth : max * widthPerPoint}); - } + }; }, moveBarClosure : function() { @@ -478,7 +484,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ var percentage = Math.min(Math.max(ui.size.width / cachethis.gradeBarWidth * 100, min), max); cachethis.descendingCutoffs[barIndex - 1]['cutoff'] = Math.round(percentage); cachethis.renderGradeRanges(); - } + }; }, renderGradeRanges: function() { @@ -496,7 +502,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ return function(event, ui) { // for some reason the resize is setting height to 0 cachethis.saveCutoffs(); - } + }; }, saveCutoffs: function() { @@ -506,7 +512,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ object[cutoff['designation']] = cutoff['cutoff'] / 100.0; return object; }, - new Object())); + {})); }, addNewGrade: function(e) { @@ -520,7 +526,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ // going to split the grade above the insertion point in half leaving fail in same place var nextGradeTop = (gradeLength > 1 ? this.descendingCutoffs[gradeLength - 2]['cutoff'] : 100); var targetWidth = failBarWidth + ((nextGradeTop - failBarWidth) / 2); - this.descendingCutoffs.push({designation: this.GRADES[gradeLength], cutoff: failBarWidth}) + this.descendingCutoffs.push({designation: this.GRADES[gradeLength], cutoff: failBarWidth}); this.descendingCutoffs[gradeLength - 1]['cutoff'] = Math.round(targetWidth); var $newGradeBar = this.gradeCutoffTemplate({ descriptor : this.GRADES[gradeLength], @@ -538,7 +544,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ // Munge existing grade labels? // If going from Pass/Fail to 3 levels, change to Pass to A - if (gradeLength == 1 && this.descendingCutoffs[0]['designation'] == 'Pass') { + if (gradeLength === 1 && this.descendingCutoffs[0]['designation'] === 'Pass') { this.descendingCutoffs[0]['designation'] = this.GRADES[0]; this.setTopGradeLabel(); } @@ -557,7 +563,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ this.descendingCutoffs.splice(index, 1); domElement.remove(); - if (this.descendingCutoffs.length == 1 && this.descendingCutoffs[0]['designation'] == this.GRADES[0]) { + if (this.descendingCutoffs.length === 1 && this.descendingCutoffs[0]['designation'] === this.GRADES[0]) { this.descendingCutoffs[0]['designation'] = 'Pass'; this.setTopGradeLabel(); } @@ -573,7 +579,7 @@ CMS.Views.Settings.Grading = CMS.Views.ValidatingView.extend({ }, failLabel: function() { - if (this.descendingCutoffs.length == 1) return 'Fail'; + if (this.descendingCutoffs.length === 1) return 'Fail'; else return 'F'; }, setFailLabel: function() { @@ -609,9 +615,6 @@ CMS.Views.Settings.GraderView = CMS.Views.ValidatingView.extend({ 'weight' : 'course-grading-assignment-gradeweight' }, updateModel : function(event) { - if (!this.model.collection) - console.log("Huh?"); - switch (event.currentTarget.id) { case 'course-grading-assignment-totalassignments': this.$el.find('#course-grading-assignment-droppable').attr('max', $(event.currentTarget).val()); @@ -620,7 +623,7 @@ CMS.Views.Settings.GraderView = CMS.Views.ValidatingView.extend({ this.clearValidationErrors(); this.model.save(this.selectorToField[event.currentTarget.id], $(event.currentTarget).val()); break; - + } }, deleteModel : function(e) {