From 99caf602cbcbb6336f36b5c04349e9bc3da251b9 Mon Sep 17 00:00:00 2001 From: "E. Kolpakov" Date: Tue, 6 Jan 2015 18:34:54 +0300 Subject: [PATCH] Refactoring create_course_utils and create_library_utils to reduce the amount of differences (mostly renames --- cms/static/js/index.js | 4 +- .../js/spec/views/pages/course_rerun_spec.js | 2 +- cms/static/js/views/course_rerun.js | 2 +- .../js/views/utils/create_course_utils.js | 74 ++++++++++--------- .../js/views/utils/create_library_utils.js | 31 ++++---- 5 files changed, 60 insertions(+), 53 deletions(-) diff --git a/cms/static/js/index.js b/cms/static/js/index.js index a78e0d5e90..74239e3a26 100644 --- a/cms/static/js/index.js +++ b/cms/static/js/index.js @@ -60,7 +60,7 @@ define(["domReady", "jquery", "underscore", "js/utils/cancel_on_escape", "js/vie }; analytics.track('Created a Course', course_info); - CreateCourseUtils.createCourse(course_info, function (errorMessage) { + CreateCourseUtils.create(course_info, function (errorMessage) { $('.create-course .wrap-error').addClass('is-shown'); $('#course_creation_error').html('

' + errorMessage + '

'); $('.new-course-save').addClass('is-disabled').attr('aria-disabled', true); @@ -114,7 +114,7 @@ define(["domReady", "jquery", "underscore", "js/utils/cancel_on_escape", "js/vie }; analytics.track('Created a Library', lib_info); - CreateLibraryUtils.createLibrary(lib_info, function (errorMessage) { + CreateLibraryUtils.create(lib_info, function (errorMessage) { $('.create-library .wrap-error').addClass('is-shown'); $('#library_creation_error').html('

' + errorMessage + '

'); $('.new-library-save').addClass('is-disabled').attr('aria-disabled', true); diff --git a/cms/static/js/spec/views/pages/course_rerun_spec.js b/cms/static/js/spec/views/pages/course_rerun_spec.js index 320f8d6557..ba6cd799aa 100644 --- a/cms/static/js/spec/views/pages/course_rerun_spec.js +++ b/cms/static/js/spec/views/pages/course_rerun_spec.js @@ -62,7 +62,7 @@ define(["jquery", "js/common_helpers/ajax_helpers", "js/spec_helpers/view_helper describe("Error messages", function () { var setErrorMessage = function(selector, message) { var element = $(selector).parent(); - CreateCourseUtils.setNewCourseFieldInErr(element, message); + CreateCourseUtils.setFieldInErr(element, message); return element; }; diff --git a/cms/static/js/views/course_rerun.js b/cms/static/js/views/course_rerun.js index b8d361aac4..9ef7a7f265 100644 --- a/cms/static/js/views/course_rerun.js +++ b/cms/static/js/views/course_rerun.js @@ -41,7 +41,7 @@ define(["domReady", "jquery", "underscore", "js/views/utils/create_course_utils" }; analytics.track('Reran a Course', course_info); - CreateCourseUtils.createCourse(course_info, function (errorMessage) { + CreateCourseUtils.create(course_info, function (errorMessage) { $('.wrapper-error').addClass('is-shown').removeClass('is-hidden'); $('#course_rerun_error').html('

' + errorMessage + '

'); $('.rerun-course-save').addClass('is-disabled').attr('aria-disabled', true).removeClass('is-processing').html(gettext('Create Re-run')); diff --git a/cms/static/js/views/utils/create_course_utils.js b/cms/static/js/views/utils/create_course_utils.js index 735d22b708..6f01821547 100644 --- a/cms/static/js/views/utils/create_course_utils.js +++ b/cms/static/js/views/utils/create_course_utils.js @@ -3,38 +3,42 @@ */ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], function ($, _, gettext, ViewUtils) { + "use strict"; return function (selectors, classes) { - var toggleSaveButton, validateTotalCourseItemsLength, setNewCourseFieldInErr, - hasInvalidRequiredFields, createCourse, validateFilledFields, configureHandlers; + var toggleSaveButton, validateTotalKeyLength, setFieldInErr, + hasInvalidRequiredFields, create, validateFilledFields, configureHandlers; var validateRequiredField = ViewUtils.validateRequiredField; var validateURLItemEncoding = ViewUtils.validateURLItemEncoding; - var keyLengthViolationMessage = gettext('The combined length of the organization, course number, and course run fields cannot be more than <%=limit%> characters.'); + var keyLengthViolationMessage = gettext("The combined length of the organization, course number, and course run fields cannot be more than <%=limit%> characters."); + + var keyFieldSelectors = [selectors.org, selectors.number, selectors.run]; + var nonEmptyCheckFieldSelectors = [selectors.name, selectors.org, selectors.number, selectors.run]; toggleSaveButton = function (is_enabled) { var is_disabled = !is_enabled; $(selectors.save).toggleClass(classes.disabled, is_disabled).attr('aria-disabled', is_disabled); }; - // Ensure that org, course_num and run passes checkTotalKeyLengthViolations - validateTotalCourseItemsLength = function () { + // Ensure that key fields passes checkTotalKeyLengthViolations check + validateTotalKeyLength = function () { ViewUtils.checkTotalKeyLengthViolations( selectors, classes, - [selectors.org, selectors.number, selectors.run], + keyFieldSelectors, keyLengthViolationMessage ); }; - setNewCourseFieldInErr = function (el, msg) { - if (msg) { - el.addClass(classes.error); - el.children(selectors.tipError).addClass(classes.showing).removeClass(classes.hiding).text(msg); + setFieldInErr = function (element, message) { + if (message) { + element.addClass(classes.error); + element.children(selectors.tipError).addClass(classes.showing).removeClass(classes.hiding).text(message); toggleSaveButton(false); } else { - el.removeClass(classes.error); - el.children(selectors.tipError).addClass(classes.hiding).removeClass(classes.showing); + element.removeClass(classes.error); + element.children(selectors.tipError).addClass(classes.hiding).removeClass(classes.showing); // One "error" div is always present, but hidden or shown if ($(selectors.error).length === 1) { toggleSaveButton(true); @@ -45,18 +49,18 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], // One final check for empty values hasInvalidRequiredFields = function () { return _.reduce( - [selectors.name, selectors.org, selectors.number, selectors.run], - function (acc, ele) { - var $ele = $(ele); - var error = validateRequiredField($ele.val()); - setNewCourseFieldInErr($ele.parent(), error); + nonEmptyCheckFieldSelectors, + function (acc, element) { + var $element = $(element); + var error = validateRequiredField($element.val()); + setFieldInErr($element.parent(), error); return error ? true : acc; }, false ); }; - createCourse = function (courseInfo, errorHandler) { + create = function (courseInfo, errorHandler) { $.postJSON( '/course/', courseInfo, @@ -73,10 +77,10 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], // Ensure that all fields are not empty validateFilledFields = function () { return _.reduce( - [selectors.org, selectors.number, selectors.run, selectors.name], - function (acc, ele) { - var $ele = $(ele); - return $ele.val().length !== 0 ? acc : false; + nonEmptyCheckFieldSelectors, + function (acc, element) { + var $element = $(element); + return $element.val().length !== 0 ? acc : false; }, true ); @@ -85,19 +89,19 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], // Handle validation asynchronously configureHandlers = function () { _.each( - [selectors.org, selectors.number, selectors.run], - function (ele) { - var $ele = $(ele); - $ele.on('keyup', function (event) { + keyFieldSelectors, + function (element) { + var $element = $(element); + $element.on('keyup', function (event) { // Don't bother showing "required field" error when // the user tabs into a new field; this is distracting // and unnecessary - if (event.keyCode === 9) { + if (event.keyCode === $.ui.keyCode.TAB) { return; } - var error = validateURLItemEncoding($ele.val(), $(selectors.allowUnicode).val() === 'True'); - setNewCourseFieldInErr($ele.parent(), error); - validateTotalCourseItemsLength(); + var error = validateURLItemEncoding($element.val(), $(selectors.allowUnicode).val() === 'True'); + setFieldInErr($element.parent(), error); + validateTotalKeyLength(); if (!validateFilledFields()) { toggleSaveButton(false); } @@ -107,8 +111,8 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], var $name = $(selectors.name); $name.on('keyup', function () { var error = validateRequiredField($name.val()); - setNewCourseFieldInErr($name.parent(), error); - validateTotalCourseItemsLength(); + setFieldInErr($name.parent(), error); + validateTotalKeyLength(); if (!validateFilledFields()) { toggleSaveButton(false); } @@ -116,10 +120,10 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], }; return { - validateTotalCourseItemsLength: validateTotalCourseItemsLength, - setNewCourseFieldInErr: setNewCourseFieldInErr, + validateTotalKeyLength: validateTotalKeyLength, + setFieldInErr: setFieldInErr, hasInvalidRequiredFields: hasInvalidRequiredFields, - createCourse: createCourse, + create: create, validateFilledFields: validateFilledFields, configureHandlers: configureHandlers }; diff --git a/cms/static/js/views/utils/create_library_utils.js b/cms/static/js/views/utils/create_library_utils.js index 7c7b6cffa1..d417e07d93 100644 --- a/cms/static/js/views/utils/create_library_utils.js +++ b/cms/static/js/views/utils/create_library_utils.js @@ -5,29 +5,32 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], function ($, _, gettext, ViewUtils) { "use strict"; return function (selectors, classes) { - var toggleSaveButton, validateTotalKeyLength, setNewLibraryFieldInErr, - hasInvalidRequiredFields, createLibrary, validateFilledFields, configureHandlers; + var toggleSaveButton, validateTotalKeyLength, setFieldInErr, + hasInvalidRequiredFields, create, validateFilledFields, configureHandlers; var validateRequiredField = ViewUtils.validateRequiredField; var validateURLItemEncoding = ViewUtils.validateURLItemEncoding; var keyLengthViolationMessage = gettext("The combined length of the organization and library code fields cannot be more than <%=limit%> characters."); + var keyFieldSelectors = [selectors.org, selectors.number]; + var nonEmptyCheckFieldSelectors = [selectors.name, selectors.org, selectors.number]; + toggleSaveButton = function (is_enabled) { var is_disabled = !is_enabled; $(selectors.save).toggleClass(classes.disabled, is_disabled).attr('aria-disabled', is_disabled); }; - // Ensure that org/librarycode passes validateTotalKeyLength check + // Ensure that key fields passes checkTotalKeyLengthViolations check validateTotalKeyLength = function () { ViewUtils.checkTotalKeyLengthViolations( selectors, classes, - [selectors.org, selectors.number], + keyFieldSelectors, keyLengthViolationMessage ); }; - setNewLibraryFieldInErr = function (element, message) { + setFieldInErr = function (element, message) { if (message) { element.addClass(classes.error); element.children(selectors.tipError).addClass(classes.showing).removeClass(classes.hiding).text(message); @@ -46,18 +49,18 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], // One final check for empty values hasInvalidRequiredFields = function () { return _.reduce( - [selectors.name, selectors.org, selectors.number], + nonEmptyCheckFieldSelectors, function (acc, element) { var $element = $(element); var error = validateRequiredField($element.val()); - setNewLibraryFieldInErr($element.parent(), error); + setFieldInErr($element.parent(), error); return error ? true : acc; }, false ); }; - createLibrary = function (libraryInfo, errorHandler) { + create = function (libraryInfo, errorHandler) { $.postJSON( '/library/', libraryInfo @@ -80,7 +83,7 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], // Ensure that all fields are not empty validateFilledFields = function () { return _.reduce( - [selectors.org, selectors.number, selectors.name], + nonEmptyCheckFieldSelectors, function (acc, element) { var $element = $(element); return $element.val().length !== 0 ? acc : false; @@ -92,7 +95,7 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], // Handle validation asynchronously configureHandlers = function () { _.each( - [selectors.org, selectors.number], + keyFieldSelectors, function (element) { var $element = $(element); $element.on('keyup', function (event) { @@ -103,7 +106,7 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], return; } var error = validateURLItemEncoding($element.val(), $(selectors.allowUnicode).val() === 'True'); - setNewLibraryFieldInErr($element.parent(), error); + setFieldInErr($element.parent(), error); validateTotalKeyLength(); if (!validateFilledFields()) { toggleSaveButton(false); @@ -114,7 +117,7 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], var $name = $(selectors.name); $name.on('keyup', function () { var error = validateRequiredField($name.val()); - setNewLibraryFieldInErr($name.parent(), error); + setFieldInErr($name.parent(), error); validateTotalKeyLength(); if (!validateFilledFields()) { toggleSaveButton(false); @@ -124,9 +127,9 @@ define(["jquery", "underscore", "gettext", "js/views/utils/view_utils"], return { validateTotalKeyLength: validateTotalKeyLength, - setNewLibraryFieldInErr: setNewLibraryFieldInErr, + setFieldInErr: setFieldInErr, hasInvalidRequiredFields: hasInvalidRequiredFields, - createLibrary: createLibrary, + create: create, validateFilledFields: validateFilledFields, configureHandlers: configureHandlers };