From 27d4e4bdc217ec894bf1311f83c0a6350e992ca2 Mon Sep 17 00:00:00 2001 From: Felipe Montoya Date: Thu, 23 Jun 2016 11:53:43 -0500 Subject: [PATCH] Compiling cms/coffee/src/main into a js file and fixing the references Linting --- cms/static/cms/js/require-config.js | 2 +- cms/static/cms/js/spec/main.js | 4 +- cms/static/cms/js/spec/main_squire.js | 2 +- .../coffee/spec/models/textbook_spec.coffee | 3 +- .../spec/views/metadata_edit_spec.coffee | 2 +- .../js/certificates/models/certificate.js | 2 +- cms/static/js/factories/base.js | 2 +- cms/static/js/factories/container.js | 2 +- cms/static/js/factories/edit_tabs.js | 2 +- cms/static/js/factories/library.js | 2 +- cms/static/js/main.js | 124 +++++++++------- cms/static/js/models/group_configuration.js | 2 +- cms/static/js/models/textbook.js | 2 +- cms/static/js/spec/main_spec.js | 139 ++++++++++-------- .../spec/models/group_configuration_spec.js | 2 +- cms/static/js/spec/views/container_spec.js | 2 +- cms/static/js/spec/views/xblock_spec.js | 2 +- cms/static/js/spec_helpers/edit_helpers.js | 2 +- common/djangoapps/terrain/ui_helpers.py | 8 +- 19 files changed, 172 insertions(+), 134 deletions(-) diff --git a/cms/static/cms/js/require-config.js b/cms/static/cms/js/require-config.js index 7cd1f1caf1..964964b0cb 100644 --- a/cms/static/cms/js/require-config.js +++ b/cms/static/cms/js/require-config.js @@ -247,7 +247,7 @@ exports: 'XBlock', deps: ['xblock/core'] }, - 'coffee/src/main': { + 'js/main': { deps: ['coffee/src/ajax_prefix'] }, 'js/src/logger': { diff --git a/cms/static/cms/js/spec/main.js b/cms/static/cms/js/spec/main.js index db82630e76..05e30ae3bf 100644 --- a/cms/static/cms/js/spec/main.js +++ b/cms/static/cms/js/spec/main.js @@ -199,7 +199,7 @@ 'mock-ajax': { deps: ['jquery'] }, - 'coffee/src/main': { + 'js/main': { deps: ['coffee/src/ajax_prefix'] }, 'coffee/src/ajax_prefix': { @@ -218,7 +218,6 @@ testFiles = [ 'cms/js/spec/xblock/cms.runtime.v1_spec', - 'coffee/spec/main_spec', 'coffee/spec/models/course_spec', 'coffee/spec/models/metadata_spec', 'coffee/spec/models/section_spec', @@ -230,6 +229,7 @@ 'coffee/spec/views/metadata_edit_spec', 'coffee/spec/views/textbook_spec', 'coffee/spec/views/upload_spec', + 'js/spec/main_spec', 'js/spec/video/transcripts/utils_spec', 'js/spec/video/transcripts/editor_spec', 'js/spec/video/transcripts/videolist_spec', diff --git a/cms/static/cms/js/spec/main_squire.js b/cms/static/cms/js/spec/main_squire.js index 8e65cef81b..9cc9d7659e 100644 --- a/cms/static/cms/js/spec/main_squire.js +++ b/cms/static/cms/js/spec/main_squire.js @@ -174,7 +174,7 @@ exports: 'XBlock', deps: ['xblock/core'] }, - 'coffee/src/main': { + 'js/main': { deps: ['coffee/src/ajax_prefix'] }, 'coffee/src/ajax_prefix': { diff --git a/cms/static/coffee/spec/models/textbook_spec.coffee b/cms/static/coffee/spec/models/textbook_spec.coffee index dd78ba8997..0d6145d2e5 100644 --- a/cms/static/coffee/spec/models/textbook_spec.coffee +++ b/cms/static/coffee/spec/models/textbook_spec.coffee @@ -1,4 +1,5 @@ -define ["backbone", "js/models/textbook", "js/collections/textbook", "js/models/chapter", "js/collections/chapter", "coffee/src/main"], + +define ["backbone", "js/models/textbook", "js/collections/textbook", "js/models/chapter", "js/collections/chapter", "js/main"], (Backbone, Textbook, TextbookSet, Chapter, ChapterSet, main) -> describe "Textbook model", -> diff --git a/cms/static/coffee/spec/views/metadata_edit_spec.coffee b/cms/static/coffee/spec/views/metadata_edit_spec.coffee index 4c3927c492..17df629586 100644 --- a/cms/static/coffee/spec/views/metadata_edit_spec.coffee +++ b/cms/static/coffee/spec/views/metadata_edit_spec.coffee @@ -1,4 +1,4 @@ -define ["js/models/metadata", "js/collections/metadata", "js/views/metadata", "coffee/src/main"], +define ["js/models/metadata", "js/collections/metadata", "js/views/metadata", "js/main"], (MetadataModel, MetadataCollection, MetadataView, main) -> verifyInputType = (input, expectedType) -> # Some browsers (e.g. FireFox) do not support the "number" diff --git a/cms/static/js/certificates/models/certificate.js b/cms/static/js/certificates/models/certificate.js index 94231d4a61..b6411faea6 100644 --- a/cms/static/js/certificates/models/certificate.js +++ b/cms/static/js/certificates/models/certificate.js @@ -6,7 +6,7 @@ define([ 'backbone-relational', 'backbone.associations', 'gettext', - 'coffee/src/main', + 'js/main', 'js/certificates/models/signatory', 'js/certificates/collections/signatories' ], diff --git a/cms/static/js/factories/base.js b/cms/static/js/factories/base.js index b6f997c8e4..21ca8a49f2 100644 --- a/cms/static/js/factories/base.js +++ b/cms/static/js/factories/base.js @@ -1,2 +1,2 @@ -define(['js/base', 'coffee/src/main', 'js/src/logger', 'datepair', 'accessibility', +define(['js/base', 'js/main', 'js/src/logger', 'datepair', 'accessibility', 'ieshim', 'tooltip_manager', 'lang_edx', 'js/models/course']); diff --git a/cms/static/js/factories/container.js b/cms/static/js/factories/container.js index 6593c25fb3..af6532e34b 100644 --- a/cms/static/js/factories/container.js +++ b/cms/static/js/factories/container.js @@ -1,6 +1,6 @@ define([ 'jquery', 'underscore', 'js/models/xblock_container_info', 'js/views/pages/container', - 'js/collections/component_template', 'xmodule', 'coffee/src/main', + 'js/collections/component_template', 'xmodule', 'js/main', 'xblock/cms.runtime.v1' ], function($, _, XBlockContainerInfo, ContainerPage, ComponentTemplates, xmoduleLoader) { diff --git a/cms/static/js/factories/edit_tabs.js b/cms/static/js/factories/edit_tabs.js index 71ba0f42b6..376952dcb5 100644 --- a/cms/static/js/factories/edit_tabs.js +++ b/cms/static/js/factories/edit_tabs.js @@ -1,5 +1,5 @@ define([ - 'js/models/explicit_url', 'js/views/tabs', 'xmodule', 'coffee/src/main', 'xblock/cms.runtime.v1' + 'js/models/explicit_url', 'js/views/tabs', 'xmodule', 'js/main', 'xblock/cms.runtime.v1' ], function (TabsModel, TabsEditView, xmoduleLoader) { 'use strict'; return function (courseLocation, explicitUrl) { diff --git a/cms/static/js/factories/library.js b/cms/static/js/factories/library.js index 59f447dead..3b558c3aff 100644 --- a/cms/static/js/factories/library.js +++ b/cms/static/js/factories/library.js @@ -1,6 +1,6 @@ define([ 'jquery', 'underscore', 'js/models/xblock_info', 'js/views/pages/paged_container', - 'js/views/library_container', 'js/collections/component_template', 'xmodule', 'coffee/src/main', + 'js/views/library_container', 'js/collections/component_template', 'xmodule', 'js/main', 'xblock/cms.runtime.v1' ], function($, _, XBlockInfo, PagedContainerPage, LibraryContainerView, ComponentTemplates, xmoduleLoader) { diff --git a/cms/static/js/main.js b/cms/static/js/main.js index 23ac832456..d69f68f152 100644 --- a/cms/static/js/main.js +++ b/cms/static/js/main.js @@ -1,55 +1,71 @@ -define ["domReady", "jquery", "underscore.string", "backbone", "gettext", - "common/js/components/views/feedback_notification", - "coffee/src/ajax_prefix", "jquery.cookie"], -(domReady, $, str, Backbone, gettext, NotificationView) -> - main = -> - AjaxPrefix.addAjaxPrefix jQuery, -> - $("meta[name='path_prefix']").attr('content') +(function(AjaxPrefix) { + 'use strict'; + define(['domReady', 'jquery', 'underscore.string', 'backbone', 'gettext', + 'common/js/components/views/feedback_notification', 'coffee/src/ajax_prefix', + 'jquery.cookie'], + function(domReady, $, str, Backbone, gettext, NotificationView) { + var main; + main = function() { + AjaxPrefix.addAjaxPrefix(jQuery, function() { + return $("meta[name='path_prefix']").attr('content'); + }); + window.CMS = window.CMS || {}; + window.CMS.URL = window.CMS.URL || {}; + window.onTouchBasedDevice = function() { + return navigator.userAgent.match(/iPhone|iPod|iPad|Android/i); + }; + _.extend(window.CMS, Backbone.Events); + Backbone.emulateHTTP = true; + $.ajaxSetup({ + headers: { + 'X-CSRFToken': $.cookie('csrftoken') + }, + dataType: 'json' + }); + $(document).ajaxError(function(event, jqXHR, ajaxSettings) { + var message, msg; + if (ajaxSettings.notifyOnError === false) { + return; + } + if (jqXHR.responseText) { + try { + message = JSON.parse(jqXHR.responseText).error; + } catch (error) { + message = str.truncate(jqXHR.responseText, 300); + } + } else { + message = gettext('This may be happening because of an error with our server' + + 'or your internet connection. Try refreshing the page or making' + + 'sure you are online.'); + } + msg = new NotificationView.Error({ + 'title': gettext("Studio's having trouble saving your work"), + 'message': message + }); + return msg.show(); + }); + $.postJSON = function(url, data, callback) { + if ($.isFunction(data)) { + callback = data; + data = undefined; + } + return $.ajax({ + url: url, + type: 'POST', + contentType: 'application/json; charset=utf-8', + dataType: 'json', + data: JSON.stringify(data), + success: callback + }); + }; + return domReady(function() { + if (window.onTouchBasedDevice()) { + return $('body').addClass('touch-based-device'); + } + }); + }; + main(); + return main; + }); - window.CMS = window.CMS or {} - CMS.URL = CMS.URL or {} - window.onTouchBasedDevice = -> - navigator.userAgent.match /iPhone|iPod|iPad|Android/i - - _.extend CMS, Backbone.Events - Backbone.emulateHTTP = true - - $.ajaxSetup - headers : { 'X-CSRFToken': $.cookie 'csrftoken' } - dataType: 'json' - - $(document).ajaxError (event, jqXHR, ajaxSettings, thrownError) -> - if ajaxSettings.notifyOnError is false - return - if jqXHR.responseText - try - message = JSON.parse(jqXHR.responseText).error - catch error - message = str.truncate(jqXHR.responseText, 300) - else - message = gettext("This may be happening because of an error with our server or your internet connection. Try refreshing the page or making sure you are online.") - msg = new NotificationView.Error( - "title": gettext("Studio's having trouble saving your work") - "message": message - ) - msg.show() - - $.postJSON = (url, data, callback) -> - # shift arguments if data argument was omitted - if $.isFunction(data) - callback = data - data = `undefined` - $.ajax - url: url - type: "POST" - contentType: "application/json; charset=utf-8" - dataType: "json" - data: JSON.stringify(data) - success: callback - - domReady -> - if onTouchBasedDevice() - $('body').addClass 'touch-based-device' - - main() - return main +}).call(this, AjaxPrefix); //jshint ignore:line diff --git a/cms/static/js/models/group_configuration.js b/cms/static/js/models/group_configuration.js index 78a62332d9..043b6f0495 100644 --- a/cms/static/js/models/group_configuration.js +++ b/cms/static/js/models/group_configuration.js @@ -1,6 +1,6 @@ define([ 'backbone', 'underscore', 'gettext', 'js/models/group', 'js/collections/group', - 'backbone.associations', 'coffee/src/main' + 'backbone.associations', 'js/main' ], function(Backbone, _, gettext, GroupModel, GroupCollection) { 'use strict'; diff --git a/cms/static/js/models/textbook.js b/cms/static/js/models/textbook.js index b59948f191..f0b8fe3d34 100644 --- a/cms/static/js/models/textbook.js +++ b/cms/static/js/models/textbook.js @@ -1,5 +1,5 @@ define(["backbone", "underscore", "gettext", "js/models/chapter", "js/collections/chapter", - "backbone.associations", "coffee/src/main"], + "backbone.associations", "js/main"], function(Backbone, _, gettext, ChapterModel, ChapterCollection) { var Textbook = Backbone.AssociatedModel.extend({ diff --git a/cms/static/js/spec/main_spec.js b/cms/static/js/spec/main_spec.js index 3875df0de5..e2805ea918 100644 --- a/cms/static/js/spec/main_spec.js +++ b/cms/static/js/spec/main_spec.js @@ -1,60 +1,81 @@ -require ["jquery", "backbone", "coffee/src/main", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "jquery.cookie"], -($, Backbone, main, AjaxHelpers) -> - describe "CMS", -> - it "should initialize URL", -> - expect(window.CMS.URL).toBeDefined() +(function(sandbox) { + 'use strict'; + require(["jquery", "backbone", "js/main", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "jquery.cookie"], + function($, Backbone, main, AjaxHelpers) { + describe("CMS", function() { + return it("should initialize URL", function() { + return expect(window.CMS.URL).toBeDefined(); + }); + }); + describe("main helper", function() { + beforeEach(function() { + this.previousAjaxSettings = $.extend(true, {}, $.ajaxSettings); + spyOn($, "cookie").and.callFake(function(param) { + if (param === "csrftoken") { + return "stubCSRFToken"; + } + }); + return main(); + }); + afterEach(function() { + $.ajaxSettings = this.previousAjaxSettings; + return $.ajaxSettings; + }); + it("turn on Backbone emulateHTTP", function() { + return expect(Backbone.emulateHTTP).toBeTruthy(); + }); + return it("setup AJAX CSRF token", function() { + return expect($.ajaxSettings.headers["X-CSRFToken"]).toEqual("stubCSRFToken"); + }); + }); + describe("AJAX Errors", function() { + var server; + server = null; + beforeEach(function() { + return appendSetFixtures(sandbox({ + id: "page-notification" + })); + }); + afterEach(function() { + return server && server.restore(); + }); + it("successful AJAX request does not pop an error notification", function() { + server = AjaxHelpers.server([ + 200, { + "Content-Type": "application/json" + }, "{}" + ]); + expect($("#page-notification")).toBeEmpty(); + $.ajax("/test"); + expect($("#page-notification")).toBeEmpty(); + server.respond(); + return expect($("#page-notification")).toBeEmpty(); + }); + it("AJAX request with error should pop an error notification", function() { + server = AjaxHelpers.server([ + 500, { + "Content-Type": "application/json" + }, "{}" + ]); + $.ajax("/test"); + server.respond(); + expect($("#page-notification")).not.toBeEmpty(); + return expect($("#page-notification")).toContainElement('div.wrapper-notification-error'); + }); + it("can override AJAX request with error so it does not pop an error notification", function() { + server = AjaxHelpers.server([ + 500, { + "Content-Type": "application/json" + }, "{}" + ]); + $.ajax({ + url: "/test", + notifyOnError: false + }); + server.respond(); + return expect($("#page-notification")).toBeEmpty(); + }); + }); + }); - describe "main helper", -> - beforeEach -> - @previousAjaxSettings = $.extend(true, {}, $.ajaxSettings) - spyOn($, "cookie").and.callFake( - (param) -> - if param == "csrftoken" - return "stubCSRFToken" - ) - - main() - - afterEach -> - $.ajaxSettings = @previousAjaxSettings - - it "turn on Backbone emulateHTTP", -> - expect(Backbone.emulateHTTP).toBeTruthy() - - it "setup AJAX CSRF token", -> - expect($.ajaxSettings.headers["X-CSRFToken"]).toEqual("stubCSRFToken") - - describe "AJAX Errors", -> - server = null - beforeEach -> - appendSetFixtures(sandbox({id: "page-notification"})) - - afterEach -> - server && server.restore() - - it "successful AJAX request does not pop an error notification", -> - server = AjaxHelpers.server([200, {"Content-Type": "application/json"}, "{}"]) - - expect($("#page-notification")).toBeEmpty() - $.ajax("/test") - expect($("#page-notification")).toBeEmpty() - server.respond() - expect($("#page-notification")).toBeEmpty() - - it "AJAX request with error should pop an error notification", -> - server = AjaxHelpers.server([500, {"Content-Type": "application/json"}, "{}"]) - - $.ajax("/test") - server.respond() - expect($("#page-notification")).not.toBeEmpty() - expect($("#page-notification")).toContainElement('div.wrapper-notification-error') - - it "can override AJAX request with error so it does not pop an error notification", -> - server = AjaxHelpers.server([500, {"Content-Type": "application/json"}, "{}"]) - - $.ajax - url: "/test" - notifyOnError: false - - server.respond() - expect($("#page-notification")).toBeEmpty() +}).call(this, sandbox); //jshint ignore:line diff --git a/cms/static/js/spec/models/group_configuration_spec.js b/cms/static/js/spec/models/group_configuration_spec.js index 5a441b809d..75ea29a165 100644 --- a/cms/static/js/spec/models/group_configuration_spec.js +++ b/cms/static/js/spec/models/group_configuration_spec.js @@ -1,5 +1,5 @@ define([ - 'backbone', 'coffee/src/main', 'js/models/group_configuration', + 'backbone', 'js/main', 'js/models/group_configuration', 'js/models/group', 'js/collections/group', 'squire' ], function (Backbone, main, GroupConfigurationModel, GroupModel, GroupCollection, Squire) { 'use strict'; diff --git a/cms/static/js/spec/views/container_spec.js b/cms/static/js/spec/views/container_spec.js index 9d8edebc3e..170f0ad8d3 100644 --- a/cms/static/js/spec/views/container_spec.js +++ b/cms/static/js/spec/views/container_spec.js @@ -1,6 +1,6 @@ define([ "jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "js/spec_helpers/edit_helpers", "js/views/container", "js/models/xblock_info", "jquery.simulate", - "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], + "xmodule", "js/main", "xblock/cms.runtime.v1"], function ($, AjaxHelpers, EditHelpers, ContainerView, XBlockInfo) { describe("Container View", function () { diff --git a/cms/static/js/spec/views/xblock_spec.js b/cms/static/js/spec/views/xblock_spec.js index 23fa1eeadb..9f173a653b 100644 --- a/cms/static/js/spec/views/xblock_spec.js +++ b/cms/static/js/spec/views/xblock_spec.js @@ -1,5 +1,5 @@ define(["jquery", "URI", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/components/utils/view_utils", - "js/views/xblock", "js/models/xblock_info", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], + "js/views/xblock", "js/models/xblock_info", "xmodule", "js/main", "xblock/cms.runtime.v1"], function ($, URI, AjaxHelpers, ViewUtils, XBlockView, XBlockInfo) { "use strict"; describe("XBlockView", function() { diff --git a/cms/static/js/spec_helpers/edit_helpers.js b/cms/static/js/spec_helpers/edit_helpers.js index 4d46e6af42..de1bc47b60 100644 --- a/cms/static/js/spec_helpers/edit_helpers.js +++ b/cms/static/js/spec_helpers/edit_helpers.js @@ -3,7 +3,7 @@ */ define(["jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/spec_helpers/template_helpers", "js/spec_helpers/modal_helpers", "js/views/modals/edit_xblock", - "js/collections/component_template", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], + "js/collections/component_template", "xmodule", "js/main", "xblock/cms.runtime.v1"], function($, _, AjaxHelpers, TemplateHelpers, modal_helpers, EditXBlockModal, ComponentTemplates) { var installMockXBlock, uninstallMockXBlock, installMockXModule, uninstallMockXModule, diff --git a/common/djangoapps/terrain/ui_helpers.py b/common/djangoapps/terrain/ui_helpers.py index 905b84f096..6e0b206040 100644 --- a/common/djangoapps/terrain/ui_helpers.py +++ b/common/djangoapps/terrain/ui_helpers.py @@ -39,7 +39,7 @@ REQUIREJS_WAIT = { # Unit page re.compile(r'^Unit \|'): [ "jquery", "js/base", "js/models/xblock_info", "js/views/pages/container", - "js/collections/component_template", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], + "js/collections/component_template", "xmodule", "js/main", "xblock/cms.runtime.v1"], # Content - Outline # Note that calling your org, course number, or display name, 'course' will mess this up @@ -49,18 +49,18 @@ REQUIREJS_WAIT = { # Dashboard re.compile(r'^Studio Home \|'): [ "js/sock", "gettext", "js/base", - "jquery.ui", "coffee/src/main", "underscore"], + "jquery.ui", "js/main", "underscore"], # Upload re.compile(r'^\s*Files & Uploads'): [ - 'js/base', 'jquery.ui', 'coffee/src/main', 'underscore', + 'js/base', 'jquery.ui', 'js/main', 'underscore', 'js/views/assets', 'js/views/asset' ], # Pages re.compile(r'^Pages \|'): [ 'js/models/explicit_url', 'js/views/tabs', - 'xmodule', 'coffee/src/main', 'xblock/cms.runtime.v1' + 'xmodule', 'js/main', 'xblock/cms.runtime.v1' ], }