From 9a3e0444a391980b3d6fec2b7609c925ecc1a5c4 Mon Sep 17 00:00:00 2001 From: irfanuddinahmad Date: Fri, 8 May 2026 20:59:59 +0500 Subject: [PATCH] chore: drop orphaned JS/underscore for grading and schedule-details pages Remove JS models, views, spec files, and Underscore templates that were exclusively used by the legacy Grading and Schedule Details pages, which were dropped in prior commits. This work is part of https://github.com/openedx/edx-platform/issues/36108 Co-Authored-By: Claude Sonnet 4.6 --- cms/static/cms/js/spec/main.js | 4 +- cms/static/js/collections/course_grader.js | 10 - .../js/models/settings/course_details.js | 165 --- .../models/settings/course_grading_policy.js | 101 -- .../js/spec/models/settings_grading_spec.js | 47 - .../js/spec/views/settings/main_spec.js | 369 ----- cms/static/js/views/instructor_info.js | 96 -- cms/static/js/views/learning_info.js | 60 - cms/static/js/views/settings/grader.js | 79 - cms/static/js/views/settings/grading.js | 430 ------ cms/static/js/views/settings/main.js | 503 ------- cms/static/sass/_build-v1.scss | 1 - cms/static/sass/elements/_header.scss | 4 - cms/static/sass/views/_settings.scss | 1312 ----------------- .../js/course-instructor-details.underscore | 43 - ...course-settings-learning-fields.underscore | 5 - .../js/course_grade_cutoff.underscore | 5 - .../js/course_grade_policy.underscore | 82 -- 18 files changed, 1 insertion(+), 3315 deletions(-) delete mode 100644 cms/static/js/collections/course_grader.js delete mode 100644 cms/static/js/models/settings/course_details.js delete mode 100644 cms/static/js/models/settings/course_grading_policy.js delete mode 100644 cms/static/js/spec/models/settings_grading_spec.js delete mode 100644 cms/static/js/spec/views/settings/main_spec.js delete mode 100644 cms/static/js/views/instructor_info.js delete mode 100644 cms/static/js/views/learning_info.js delete mode 100644 cms/static/js/views/settings/grader.js delete mode 100644 cms/static/js/views/settings/grading.js delete mode 100644 cms/static/js/views/settings/main.js delete mode 100644 cms/static/sass/views/_settings.scss delete mode 100644 cms/templates/js/course-instructor-details.underscore delete mode 100644 cms/templates/js/course-settings-learning-fields.underscore delete mode 100644 cms/templates/js/course_grade_cutoff.underscore delete mode 100644 cms/templates/js/course_grade_policy.underscore diff --git a/cms/static/cms/js/spec/main.js b/cms/static/cms/js/spec/main.js index a734ab416a94..e7660161da33 100644 --- a/cms/static/cms/js/spec/main.js +++ b/cms/static/cms/js/spec/main.js @@ -233,7 +233,6 @@ 'js/spec/models/metadata_spec', 'js/spec/models/section_spec', 'js/spec/models/settings_course_grader_spec', - 'js/spec/models/settings_grading_spec', 'js/spec/models/upload_spec', 'js/spec/views/metadata_edit_spec', 'js/spec/views/upload_spec', @@ -263,8 +262,7 @@ 'js/spec/views/pages/library_users_spec', 'js/spec/views/modals/base_modal_spec', 'js/spec/views/modals/move_xblock_modal_spec', - 'js/spec/views/modals/validation_error_modal_spec', - 'js/spec/views/settings/main_spec', + 'js/spec/views/modals/validation_error_modal_spec' ]; i = 0; diff --git a/cms/static/js/collections/course_grader.js b/cms/static/js/collections/course_grader.js deleted file mode 100644 index c7f61483635e..000000000000 --- a/cms/static/js/collections/course_grader.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['backbone', 'js/models/settings/course_grader'], function(Backbone, CourseGrader) { - var CourseGraderCollection = Backbone.Collection.extend({ - model: CourseGrader, - sumWeights: function() { - return this.reduce(function(subtotal, grader) { return subtotal + grader.get('weight'); }, 0); - } - }); - - return CourseGraderCollection; -}); // end define() diff --git a/cms/static/js/models/settings/course_details.js b/cms/static/js/models/settings/course_details.js deleted file mode 100644 index 1714436d7d32..000000000000 --- a/cms/static/js/models/settings/course_details.js +++ /dev/null @@ -1,165 +0,0 @@ -define(['backbone', 'underscore', 'gettext', 'js/models/validation_helpers', 'js/utils/date_utils', - 'edx-ui-toolkit/js/utils/string-utils' -], -function(Backbone, _, gettext, ValidationHelpers, DateUtils, StringUtils) { - 'use strict'; - - var CourseDetails = Backbone.Model.extend({ - defaults: { - org: '', - course_id: '', - run: '', - language: '', - start_date: null, // maps to 'start' - end_date: null, // maps to 'end' - certificates_display_behavior: '', - certificate_available_date: null, - enrollment_start: null, - enrollment_end: null, - syllabus: null, - title: '', - subtitle: '', - duration: '', - description: '', - short_description: '', - overview: '', - intro_video: null, - effort: null, // an int or null, - license: null, - course_image_name: '', // the filename - course_image_asset_path: '', // the full URL (/c4x/org/course/num/asset/filename) - banner_image_name: '', - banner_image_asset_path: '', - video_thumbnail_image_name: '', - video_thumbnail_image_asset_path: '', - pre_requisite_courses: [], - entrance_exam_enabled: '', - entrance_exam_minimum_score_pct: '50', - learning_info: [], - instructor_info: {}, - self_paced: null - }, - - validate: function(newattrs) { - // Returns either nothing (no return call) so that validate works or an object of {field: errorstring} pairs - // A bit funny in that the video key validation is asynchronous; so, it won't stop the validation. - var errors = {}; - const CERTIFICATES_DISPLAY_BEHAVIOR_OPTIONS = { - END: 'end', - END_WITH_DATE: 'end_with_date', - EARLY_NO_INFO: 'early_no_info' - }; - - newattrs = DateUtils.convertDateStringsToObjects( - newattrs, - ['start_date', 'end_date', 'certificate_available_date', 'enrollment_start', 'enrollment_end'] - ); - - if (newattrs.start_date === null) { - errors.start_date = gettext('The course must have an assigned start date.'); - } - - if (newattrs.start_date && newattrs.end_date && newattrs.start_date >= newattrs.end_date) { - errors.end_date = gettext('The course end date must be later than the course start date.'); - } - if (newattrs.start_date && newattrs.enrollment_start - && newattrs.start_date < newattrs.enrollment_start) { - errors.enrollment_start = gettext( - 'The course start date must be later than the enrollment start date.' - ); - } - if (newattrs.enrollment_start && newattrs.enrollment_end - && newattrs.enrollment_start >= newattrs.enrollment_end) { - errors.enrollment_end = gettext( - 'The enrollment start date cannot be after the enrollment end date.' - ); - } - if (newattrs.end_date && newattrs.enrollment_end && newattrs.end_date < newattrs.enrollment_end) { - errors.enrollment_end = gettext('The enrollment end date cannot be after the course end date.'); - } - if (this.showCertificateAvailableDate && newattrs.end_date && newattrs.certificate_available_date - && newattrs.certificate_available_date < newattrs.end_date) { - errors.certificate_available_date = gettext( - 'The certificate available date must be later than the course end date.' - ); - } - - if ( - newattrs.certificates_display_behavior - && !(Object.values(CERTIFICATES_DISPLAY_BEHAVIOR_OPTIONS).includes(newattrs.certificates_display_behavior)) - ) { - errors.certificates_display_behavior = StringUtils.interpolate( - gettext( - 'The certificate display behavior must be one of: {behavior_options}' - ), - { - behavior_options: Object.values(CERTIFICATES_DISPLAY_BEHAVIOR_OPTIONS).join(', ') - } - ); - } - - // Throw error if there's a value for certificate_available_date - if ( - (newattrs.certificate_available_date && newattrs.certificates_display_behavior != CERTIFICATES_DISPLAY_BEHAVIOR_OPTIONS.END_WITH_DATE) - || (!newattrs.certificate_available_date && newattrs.certificates_display_behavior == CERTIFICATES_DISPLAY_BEHAVIOR_OPTIONS.END_WITH_DATE) - ) { - errors.certificates_display_behavior = StringUtils.interpolate( - gettext( - 'The certificates display behavior must be {valid_option} if certificate available date is set.' - ), - { - valid_option: CERTIFICATES_DISPLAY_BEHAVIOR_OPTIONS.END_WITH_DATE - } - ); - } - - if (newattrs.intro_video && newattrs.intro_video !== this.get('intro_video')) { - if (this._videokey_illegal_chars.exec(newattrs.intro_video)) { - errors.intro_video = gettext('Key should only contain letters, numbers, _, or -'); - } - // TODO check if key points to a real video using google's youtube api - } - if (_.has(newattrs, 'entrance_exam_minimum_score_pct')) { - var range = { - min: 1, - max: 100 - }; - if (!ValidationHelpers.validateIntegerRange(newattrs.entrance_exam_minimum_score_pct, range)) { - errors.entrance_exam_minimum_score_pct = StringUtils.interpolate(gettext( - 'Please enter an integer between %(min)s and %(max)s.' - ), range, true); - } - } - if (!_.isEmpty(errors)) { return errors; } - // NOTE don't return empty errors as that will be interpreted as an error state - }, - - _videokey_illegal_chars: /[^a-zA-Z0-9_-]/g, - - set_videosource: function(newsource) { - // newsource either is