diff --git a/.jshintignore b/.jshintignore index 26e4c15e1e..0065f2da20 100644 --- a/.jshintignore +++ b/.jshintignore @@ -1,4 +1,6 @@ **/vendor +cms/static/cms/js/build.js +cms/static/cms/js/spec/main.js cms/static/js/i18n/**/*.js lms/static/js/i18n/**/*.js lms/static/lms/js/build.js diff --git a/cms/static/cms/js/build.js b/cms/static/cms/js/build.js index 65e78c3e62..f6a3c1534c 100644 --- a/cms/static/cms/js/build.js +++ b/cms/static/cms/js/build.js @@ -1,8 +1,8 @@ -(function () { +(function() { 'use strict'; var commonLibrariesPath = 'common/js/common_libraries'; - var getModule = function (moduleName, excludeCommonDeps) { + var getModule = function(moduleName, excludeCommonDeps) { var module = { name: moduleName }; @@ -14,7 +14,7 @@ return module; }; - var getModulesList = function (modules) { + var getModulesList = function(modules) { var result = [getModule(commonLibrariesPath)]; return result.concat(modules.map(function (moduleName) { return getModule(moduleName, true); @@ -92,7 +92,7 @@ /** * Stub out requireJS text in the optimized file, but leave available for non-optimized development use. */ - stubModules: ["text"], + stubModules: ['text'], /** * If shim config is used in the app during runtime, duplicate the config @@ -170,4 +170,4 @@ */ logLevel: 1 }; -} ()) +}()) diff --git a/cms/static/cms/js/require-config.js b/cms/static/cms/js/require-config.js index 70e8d61e0b..7cd1f1caf1 100644 --- a/cms/static/cms/js/require-config.js +++ b/cms/static/cms/js/require-config.js @@ -1,5 +1,6 @@ -;(function (require, define) { +;(function(require, define) { 'use strict'; + if (window) { // MathJax Fast Preview was introduced in 2.5. However, it // causes undesirable flashing/font size changes when @@ -16,300 +17,300 @@ // needs to be served. To handle this, we load the correct file in the // rendered template and then use this to ensure that RequireJS knows // how to find it. - define("gettext", function () { return window.gettext; }); + define('gettext', function() { return window.gettext; }); } require.config({ // NOTE: baseUrl has been previously set in cms/static/templates/base.html waitSeconds: 60, paths: { - "domReady": "js/vendor/domReady", - "mustache": "js/vendor/mustache", - "codemirror": "js/vendor/codemirror-compressed", - "codemirror/stex": "js/vendor/CodeMirror/stex", - "jquery": "common/js/vendor/jquery", - "jquery-migrate": "common/js/vendor/jquery-migrate", - "jquery.ui": "js/vendor/jquery-ui.min", - "jquery.form": "js/vendor/jquery.form", - "jquery.markitup": "js/vendor/markitup/jquery.markitup", - "jquery.leanModal": "js/vendor/jquery.leanModal", - "jquery.ajaxQueue": "js/vendor/jquery.ajaxQueue", - "jquery.smoothScroll": "js/vendor/jquery.smooth-scroll.min", - "jquery.timepicker": "js/vendor/timepicker/jquery.timepicker", - "jquery.cookie": "js/vendor/jquery.cookie", - "jquery.qtip": "js/vendor/jquery.qtip.min", - "jquery.scrollTo": "common/js/vendor/jquery.scrollTo", - "jquery.flot": "js/vendor/flot/jquery.flot.min", - "jquery.fileupload": "js/vendor/jQuery-File-Upload/js/jquery.fileupload", - "jquery.fileupload-process": "js/vendor/jQuery-File-Upload/js/jquery.fileupload-process", - "jquery.fileupload-validate": "js/vendor/jQuery-File-Upload/js/jquery.fileupload-validate", - "jquery.iframe-transport": "js/vendor/jQuery-File-Upload/js/jquery.iframe-transport", - "jquery.inputnumber": "js/vendor/html5-input-polyfills/number-polyfill", - "jquery.immediateDescendents": "coffee/src/jquery.immediateDescendents", - "datepair": "js/vendor/timepicker/datepair", - "date": "js/vendor/date", - "moment": "js/vendor/moment.min", - "moment-with-locales": "js/vendor/moment-with-locales.min", - "text": 'js/vendor/requirejs/text', - "underscore": "common/js/vendor/underscore", - "underscore.string": "common/js/vendor/underscore.string", - "backbone": "common/js/vendor/backbone", - "backbone-relational" : "js/vendor/backbone-relational.min", - "backbone.associations": "js/vendor/backbone-associations-min", - "backbone.paginator": "common/js/vendor/backbone.paginator", - "tinymce": "js/vendor/tinymce/js/tinymce/tinymce.full.min", - "jquery.tinymce": "js/vendor/tinymce/js/tinymce/jquery.tinymce.min", - "xmodule": "/xmodule/xmodule", - "xblock/core": "js/xblock/core", - "xblock": "coffee/src/xblock", - "utility": "js/src/utility", - "accessibility": "js/src/accessibility_tools", - "URI": "js/vendor/URI.min", - "ieshim": "js/src/ie_shim", - "tooltip_manager": "js/src/tooltip_manager", - "modernizr": "edx-pattern-library/js/modernizr-custom", - "afontgarde": "edx-pattern-library/js/afontgarde", - "edxicons": "edx-pattern-library/js/edx-icons", - "draggabilly": "js/vendor/draggabilly", + 'domReady': 'js/vendor/domReady', + 'mustache': 'js/vendor/mustache', + 'codemirror': 'js/vendor/codemirror-compressed', + 'codemirror/stex': 'js/vendor/CodeMirror/stex', + 'jquery': 'common/js/vendor/jquery', + 'jquery-migrate': 'common/js/vendor/jquery-migrate', + 'jquery.ui': 'js/vendor/jquery-ui.min', + 'jquery.form': 'js/vendor/jquery.form', + 'jquery.markitup': 'js/vendor/markitup/jquery.markitup', + 'jquery.leanModal': 'js/vendor/jquery.leanModal', + 'jquery.ajaxQueue': 'js/vendor/jquery.ajaxQueue', + 'jquery.smoothScroll': 'js/vendor/jquery.smooth-scroll.min', + 'jquery.timepicker': 'js/vendor/timepicker/jquery.timepicker', + 'jquery.cookie': 'js/vendor/jquery.cookie', + 'jquery.qtip': 'js/vendor/jquery.qtip.min', + 'jquery.scrollTo': 'common/js/vendor/jquery.scrollTo', + 'jquery.flot': 'js/vendor/flot/jquery.flot.min', + 'jquery.fileupload': 'js/vendor/jQuery-File-Upload/js/jquery.fileupload', + 'jquery.fileupload-process': 'js/vendor/jQuery-File-Upload/js/jquery.fileupload-process', + 'jquery.fileupload-validate': 'js/vendor/jQuery-File-Upload/js/jquery.fileupload-validate', + 'jquery.iframe-transport': 'js/vendor/jQuery-File-Upload/js/jquery.iframe-transport', + 'jquery.inputnumber': 'js/vendor/html5-input-polyfills/number-polyfill', + 'jquery.immediateDescendents': 'coffee/src/jquery.immediateDescendents', + 'datepair': 'js/vendor/timepicker/datepair', + 'date': 'js/vendor/date', + 'moment': 'js/vendor/moment.min', + 'moment-with-locales': 'js/vendor/moment-with-locales.min', + 'text': 'js/vendor/requirejs/text', + 'underscore': 'common/js/vendor/underscore', + 'underscore.string': 'common/js/vendor/underscore.string', + 'backbone': 'common/js/vendor/backbone', + 'backbone-relational': 'js/vendor/backbone-relational.min', + 'backbone.associations': 'js/vendor/backbone-associations-min', + 'backbone.paginator': 'common/js/vendor/backbone.paginator', + 'tinymce': 'js/vendor/tinymce/js/tinymce/tinymce.full.min', + 'jquery.tinymce': 'js/vendor/tinymce/js/tinymce/jquery.tinymce.min', + 'xmodule': '/xmodule/xmodule', + 'xblock/cms.runtime.v1': 'cms/js/xblock/cms.runtime.v1', + 'xblock': 'common/js/xblock', + 'utility': 'js/src/utility', + 'accessibility': 'js/src/accessibility_tools', + 'URI': 'js/vendor/URI.min', + 'ieshim': 'js/src/ie_shim', + 'tooltip_manager': 'js/src/tooltip_manager', + 'modernizr': 'edx-pattern-library/js/modernizr-custom', + 'afontgarde': 'edx-pattern-library/js/afontgarde', + 'edxicons': 'edx-pattern-library/js/edx-icons', + 'draggabilly': 'js/vendor/draggabilly', // Files needed for Annotations feature - "annotator": "js/vendor/ova/annotator-full", - "annotator-harvardx": "js/vendor/ova/annotator-full-firebase-auth", - "video.dev": "js/vendor/ova/video.dev", - "vjs.youtube": 'js/vendor/ova/vjs.youtube', - "rangeslider": 'js/vendor/ova/rangeslider', - "share-annotator": 'js/vendor/ova/share-annotator', - "richText-annotator": 'js/vendor/ova/richText-annotator', - "reply-annotator": 'js/vendor/ova/reply-annotator', - "grouping-annotator": 'js/vendor/ova/grouping-annotator', - "tags-annotator": 'js/vendor/ova/tags-annotator', - "diacritic-annotator": 'js/vendor/ova/diacritic-annotator', - "flagging-annotator": 'js/vendor/ova/flagging-annotator', - "jquery-Watch": 'js/vendor/ova/jquery-Watch', - "openseadragon": 'js/vendor/ova/openseadragon', - "osda": 'js/vendor/ova/OpenSeaDragonAnnotation', - "ova": 'js/vendor/ova/ova', - "catch": 'js/vendor/ova/catch/js/catch', - "handlebars": 'js/vendor/ova/catch/js/handlebars-1.1.2', - "lang_edx": "js/src/lang_edx", + 'annotator': 'js/vendor/ova/annotator-full', + 'annotator-harvardx': 'js/vendor/ova/annotator-full-firebase-auth', + 'video.dev': 'js/vendor/ova/video.dev', + 'vjs.youtube': 'js/vendor/ova/vjs.youtube', + 'rangeslider': 'js/vendor/ova/rangeslider', + 'share-annotator': 'js/vendor/ova/share-annotator', + 'richText-annotator': 'js/vendor/ova/richText-annotator', + 'reply-annotator': 'js/vendor/ova/reply-annotator', + 'grouping-annotator': 'js/vendor/ova/grouping-annotator', + 'tags-annotator': 'js/vendor/ova/tags-annotator', + 'diacritic-annotator': 'js/vendor/ova/diacritic-annotator', + 'flagging-annotator': 'js/vendor/ova/flagging-annotator', + 'jquery-Watch': 'js/vendor/ova/jquery-Watch', + 'openseadragon': 'js/vendor/ova/openseadragon', + 'osda': 'js/vendor/ova/OpenSeaDragonAnnotation', + 'ova': 'js/vendor/ova/ova', + 'catch': 'js/vendor/ova/catch/js/catch', + 'handlebars': 'js/vendor/ova/catch/js/handlebars-1.1.2', + 'lang_edx': 'js/src/lang_edx', // end of Annotation tool files // externally hosted files - "mathjax": "//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured", // jshint ignore:line - "youtube": [ - // youtube URL does not end in ".js". We add "?noext" to the path so - // that require.js adds the ".js" to the query component of the URL, + 'mathjax': '//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // jshint ignore:line + 'youtube': [ + // youtube URL does not end in '.js'. We add '?noext' to the path so + // that require.js adds the '.js' to the query component of the URL, // and leaves the path component intact. - "//www.youtube.com/player_api?noext", + '//www.youtube.com/player_api?noext', // if youtube fails to load, fallback on a local file // so that require doesn't fall over - "js/src/youtube_fallback" + 'js/src/youtube_fallback' ] }, shim: { - "gettext": { - exports: "gettext" + 'gettext': { + exports: 'gettext' }, - "date": { - exports: "Date" + 'date': { + exports: 'Date' }, - "jquery-migrate": ['jquery'], - "jquery.ui": { - deps: ["jquery"], - exports: "jQuery.ui" + 'jquery-migrate': ['jquery'], + 'jquery.ui': { + deps: ['jquery'], + exports: 'jQuery.ui' }, - "jquery.form": { - deps: ["jquery"], - exports: "jQuery.fn.ajaxForm" + 'jquery.form': { + deps: ['jquery'], + exports: 'jQuery.fn.ajaxForm' }, - "jquery.markitup": { - deps: ["jquery"], - exports: "jQuery.fn.markitup" + 'jquery.markitup': { + deps: ['jquery'], + exports: 'jQuery.fn.markitup' }, - "jquery.leanmodal": { - deps: ["jquery"], - exports: "jQuery.fn.leanModal" + 'jquery.leanmodal': { + deps: ['jquery'], + exports: 'jQuery.fn.leanModal' }, - "jquery.ajaxQueue": { - deps: ["jquery"], - exports: "jQuery.fn.ajaxQueue" + 'jquery.ajaxQueue': { + deps: ['jquery'], + exports: 'jQuery.fn.ajaxQueue' }, - "jquery.smoothScroll": { - deps: ["jquery"], - exports: "jQuery.fn.smoothScroll" + 'jquery.smoothScroll': { + deps: ['jquery'], + exports: 'jQuery.fn.smoothScroll' }, - "jquery.cookie": { - deps: ["jquery"], - exports: "jQuery.fn.cookie" + 'jquery.cookie': { + deps: ['jquery'], + exports: 'jQuery.fn.cookie' }, - "jquery.qtip": { - deps: ["jquery"], - exports: "jQuery.fn.qtip" + 'jquery.qtip': { + deps: ['jquery'], + exports: 'jQuery.fn.qtip' }, - "jquery.scrollTo": { - deps: ["jquery"], - exports: "jQuery.fn.scrollTo" + 'jquery.scrollTo': { + deps: ['jquery'], + exports: 'jQuery.fn.scrollTo' }, - "jquery.flot": { - deps: ["jquery"], - exports: "jQuery.fn.plot" + 'jquery.flot': { + deps: ['jquery'], + exports: 'jQuery.fn.plot' }, - "jquery.fileupload": { - deps: ["jquery.ui", "jquery.iframe-transport"], - exports: "jQuery.fn.fileupload" + 'jquery.fileupload': { + deps: ['jquery.ui', 'jquery.iframe-transport'], + exports: 'jQuery.fn.fileupload' }, - "jquery.fileupload-process": { - deps: ["jquery.fileupload"] + 'jquery.fileupload-process': { + deps: ['jquery.fileupload'] }, - "jquery.fileupload-validate": { - deps: ["jquery.fileupload"] + 'jquery.fileupload-validate': { + deps: ['jquery.fileupload'] }, - "jquery.inputnumber": { - deps: ["jquery"], - exports: "jQuery.fn.inputNumber" + 'jquery.inputnumber': { + deps: ['jquery'], + exports: 'jQuery.fn.inputNumber' }, - "jquery.tinymce": { - deps: ["jquery", "tinymce"], - exports: "jQuery.fn.tinymce" + 'jquery.tinymce': { + deps: ['jquery', 'tinymce'], + exports: 'jQuery.fn.tinymce' }, - "datepair": { - deps: ["jquery.ui", "jquery.timepicker"] + 'datepair': { + deps: ['jquery.ui', 'jquery.timepicker'] }, - "underscore": { - exports: "_" + 'underscore': { + exports: '_' }, - "backbone": { - deps: ["underscore", "jquery"], - exports: "Backbone" + 'backbone': { + deps: ['underscore', 'jquery'], + exports: 'Backbone' }, - "backbone.associations": { - deps: ["backbone"], - exports: "Backbone.Associations" + 'backbone.associations': { + deps: ['backbone'], + exports: 'Backbone.Associations' }, - "backbone.paginator": { - deps: ["backbone"], - exports: "Backbone.PageableCollection" + 'backbone.paginator': { + deps: ['backbone'], + exports: 'Backbone.PageableCollection' }, - "youtube": { - exports: "YT" + 'youtube': { + exports: 'YT' }, - "codemirror": { - exports: "CodeMirror" + 'codemirror': { + exports: 'CodeMirror' }, - "codemirror/stex": { - deps: ["codemirror"] + 'codemirror/stex': { + deps: ['codemirror'] }, - "tinymce": { - exports: "tinymce" + 'tinymce': { + exports: 'tinymce' }, - "lang_edx": { - deps: ["jquery"] + 'lang_edx': { + deps: ['jquery'] }, - "mathjax": { - exports: "MathJax", + 'mathjax': { + exports: 'MathJax', init: function() { window.MathJax.Hub.Config({ tex2jax: { inlineMath: [ - ["\\(","\\)"], + ['\\(','\\)'], ['[mathjaxinline]','[/mathjaxinline]'] ], displayMath: [ - ["\\[","\\]"], + ['\\[','\\]'], ['[mathjax]','[/mathjax]'] ] } - }); - // In order to eliminate all flashing during interactive - // preview, it is necessary to set processSectionDelay to 0 - // (remove delay between input and output phases). This - // effectively disables fast preview, regardless of - // the fast preview setting as shown in the context menu. - window.MathJax.Hub.processSectionDelay = 0; - window.MathJax.Hub.Configured(); + }); + // In order to eliminate all flashing during interactive + // preview, it is necessary to set processSectionDelay to 0 + // (remove delay between input and output phases). This + // effectively disables fast preview, regardless of + // the fast preview setting as shown in the context menu. + window.MathJax.Hub.processSectionDelay = 0; + window.MathJax.Hub.Configured(); } }, - "URI": { - exports: "URI" + 'URI': { + exports: 'URI' }, - "tooltip_manager": { - deps: ["jquery", "underscore"] + 'tooltip_manager': { + deps: ['jquery', 'underscore'] }, - "jquery.immediateDescendents": { - deps: ["jquery"] + 'jquery.immediateDescendents': { + deps: ['jquery'] }, - "xblock/core": { - exports: "XBlock", - deps: ["jquery", "jquery.immediateDescendents"] + 'xblock/core': { + exports: 'XBlock', + deps: ['jquery', 'jquery.immediateDescendents'] }, - "xblock/runtime.v1": { - exports: "XBlock", - deps: ["xblock/core"] + 'xblock/runtime.v1': { + exports: 'XBlock', + deps: ['xblock/core'] }, - "coffee/src/main": { - deps: ["coffee/src/ajax_prefix"] + 'coffee/src/main': { + deps: ['coffee/src/ajax_prefix'] }, - "js/src/logger": { - exports: "Logger", - deps: ["coffee/src/ajax_prefix"] + 'js/src/logger': { + exports: 'Logger', + deps: ['coffee/src/ajax_prefix'] }, - "modernizr": { - exports: "Modernizr" + 'modernizr': { + exports: 'Modernizr' }, - "afontgarde": { - exports: "AFontGarde" + 'afontgarde': { + exports: 'AFontGarde' }, // the following are all needed for annotation tools - "video.dev": { - exports:"videojs" + 'video.dev': { + exports: 'videojs' }, - "vjs.youtube": { - deps: ["video.dev"] + 'vjs.youtube': { + deps: ['video.dev'] }, - "rangeslider": { - deps: ["video.dev"] + 'rangeslider': { + deps: ['video.dev'] }, - "annotator": { - exports: "Annotator" + 'annotator': { + exports: 'Annotator' }, - "annotator-harvardx":{ - deps: ["annotator"] + 'annotator-harvardx': { + deps: ['annotator'] }, - "share-annotator": { - deps: ["annotator"] + 'share-annotator': { + deps: ['annotator'] }, - "richText-annotator": { - deps: ["annotator", "tinymce"] + 'richText-annotator': { + deps: ['annotator', 'tinymce'] }, - "reply-annotator": { - deps: ["annotator"] + 'reply-annotator': { + deps: ['annotator'] }, - "tags-annotator": { - deps: ["annotator"] + 'tags-annotator': { + deps: ['annotator'] }, - "diacritic-annotator": { - deps: ["annotator"] + 'diacritic-annotator': { + deps: ['annotator'] }, - "flagging-annotator": { - deps: ["annotator"] + 'flagging-annotator': { + deps: ['annotator'] }, - "grouping-annotator": { - deps: ["annotator"] + 'grouping-annotator': { + deps: ['annotator'] }, - "ova":{ - exports: "ova", - deps: ["annotator", "annotator-harvardx", "video.dev", "vjs.youtube", - "rangeslider", "share-annotator", "richText-annotator", "reply-annotator", - "tags-annotator", "flagging-annotator", "grouping-annotator", "diacritic-annotator", - "jquery-Watch", "catch", "handlebars", "URI"] + 'ova': { + exports: 'ova', + deps: ['annotator', 'annotator-harvardx', 'video.dev', 'vjs.youtube', + 'rangeslider', 'share-annotator', 'richText-annotator', 'reply-annotator', + 'tags-annotator', 'flagging-annotator', 'grouping-annotator', 'diacritic-annotator', + 'jquery-Watch', 'catch', 'handlebars', 'URI'] }, - "osda":{ - exports: "osda", - deps: ["annotator", "annotator-harvardx", "video.dev", "vjs.youtube", - "rangeslider", "share-annotator", "richText-annotator", "reply-annotator", - "tags-annotator", "flagging-annotator", "grouping-annotator", "diacritic-annotator", - "openseadragon", "jquery-Watch", "catch", "handlebars", "URI"] + 'osda': { + exports: 'osda', + deps: ['annotator', 'annotator-harvardx', 'video.dev', 'vjs.youtube', + 'rangeslider', 'share-annotator', 'richText-annotator', 'reply-annotator', + 'tags-annotator', 'flagging-annotator', 'grouping-annotator', 'diacritic-annotator', + 'openseadragon', 'jquery-Watch', 'catch', 'handlebars', 'URI'] } // end of annotation tool files } diff --git a/cms/static/cms/js/spec/main.js b/cms/static/cms/js/spec/main.js new file mode 100644 index 0000000000..076c47376c --- /dev/null +++ b/cms/static/cms/js/spec/main.js @@ -0,0 +1,299 @@ +(function(requirejs, requireSerial) { + 'use strict'; + + var i, specHelpers, testFiles; + + requirejs.config({ + baseUrl: '/base/', + paths: { + 'gettext': 'xmodule_js/common_static/js/test/i18n', + 'mustache': 'xmodule_js/common_static/js/vendor/mustache', + 'codemirror': 'xmodule_js/common_static/js/vendor/CodeMirror/codemirror', + 'jquery': 'xmodule_js/common_static/common/js/vendor/jquery', + 'jquery-migrate': 'xmodule_js/common_static/common/js/vendor/jquery-migrate', + 'jquery.ui': 'xmodule_js/common_static/js/vendor/jquery-ui.min', + 'jquery.form': 'xmodule_js/common_static/js/vendor/jquery.form', + 'jquery.markitup': 'xmodule_js/common_static/js/vendor/markitup/jquery.markitup', + 'jquery.leanModal': 'xmodule_js/common_static/js/vendor/jquery.leanModal', + 'jquery.ajaxQueue': 'xmodule_js/common_static/js/vendor/jquery.ajaxQueue', + 'jquery.smoothScroll': 'xmodule_js/common_static/js/vendor/jquery.smooth-scroll.min', + 'jquery.scrollTo': 'common/js/vendor/jquery.scrollTo', + 'jquery.timepicker': 'xmodule_js/common_static/js/vendor/timepicker/jquery.timepicker', + 'jquery.cookie': 'xmodule_js/common_static/js/vendor/jquery.cookie', + 'jquery.qtip': 'xmodule_js/common_static/js/vendor/jquery.qtip.min', + 'jquery.fileupload': 'xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload', + 'jquery.fileupload-process': 'xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload-process', // jshint ignore:line + 'jquery.fileupload-validate': 'xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload-validate', // jshint ignore:line + 'jquery.iframe-transport': 'xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.iframe-transport', // jshint ignore:line + 'jquery.inputnumber': 'xmodule_js/common_static/js/vendor/html5-input-polyfills/number-polyfill', + 'jquery.immediateDescendents': 'xmodule_js/common_static/coffee/src/jquery.immediateDescendents', + 'jquery.simulate': 'xmodule_js/common_static/js/vendor/jquery.simulate', + 'datepair': 'xmodule_js/common_static/js/vendor/timepicker/datepair', + 'date': 'xmodule_js/common_static/js/vendor/date', + 'moment': 'xmodule_js/common_static/js/vendor/moment.min', + 'moment-with-locales': 'xmodule_js/common_static/js/vendor/moment-with-locales.min', + 'text': 'xmodule_js/common_static/js/vendor/requirejs/text', + 'underscore': 'common/js/vendor/underscore', + 'underscore.string': 'common/js/vendor/underscore.string', + 'backbone': 'common/js/vendor/backbone', + 'backbone.associations': 'xmodule_js/common_static/js/vendor/backbone-associations-min', + 'backbone.paginator': 'common/js/vendor/backbone.paginator', + 'backbone-relational': 'xmodule_js/common_static/js/vendor/backbone-relational.min', + 'tinymce': 'xmodule_js/common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min', + 'jquery.tinymce': 'xmodule_js/common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce', + 'xmodule': 'xmodule_js/src/xmodule', + 'xblock/cms.runtime.v1': 'cms/js/xblock/cms.runtime.v1', + 'xblock': 'common/js/xblock', + 'utility': 'xmodule_js/common_static/js/src/utility', + 'accessibility': 'xmodule_js/common_static/js/src/accessibility_tools', + 'sinon': 'xmodule_js/common_static/js/vendor/sinon-1.17.0', + 'squire': 'xmodule_js/common_static/js/vendor/Squire', + 'jasmine-imagediff': 'xmodule_js/common_static/js/vendor/jasmine-imagediff', + 'draggabilly': 'xmodule_js/common_static/js/vendor/draggabilly', + 'domReady': 'xmodule_js/common_static/js/vendor/domReady', + 'URI': 'xmodule_js/common_static/js/vendor/URI.min', + 'mock-ajax': 'xmodule_js/common_static/js/vendor/mock-ajax', + 'modernizr': 'edx-pattern-library/js/modernizr-custom', + 'afontgarde': 'edx-pattern-library/js/afontgarde', + 'edxicons': 'edx-pattern-library/js/edx-icons', + 'mathjax': '//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // jshint ignore:line + 'youtube': '//www.youtube.com/player_api?noext', + 'coffee/src/ajax_prefix': 'xmodule_js/common_static/coffee/src/ajax_prefix', + 'js/spec/test_utils': 'js/spec/test_utils' + }, + shim: { + 'gettext': { + exports: 'gettext' + }, + 'date': { + exports: 'Date' + }, + 'jquery-migrate': ['jquery'], + 'jquery.ui': { + deps: ['jquery'], + exports: 'jQuery.ui' + }, + 'jquery.form': { + deps: ['jquery'], + exports: 'jQuery.fn.ajaxForm' + }, + 'jquery.markitup': { + deps: ['jquery'], + exports: 'jQuery.fn.markitup' + }, + 'jquery.leanModal': { + deps: ['jquery'], + exports: 'jQuery.fn.leanModal' + }, + 'jquery.smoothScroll': { + deps: ['jquery'], + exports: 'jQuery.fn.smoothScroll' + }, + 'jquery.ajaxQueue': { + deps: ['jquery'], + exports: 'jQuery.fn.ajaxQueue' + }, + 'jquery.scrollTo': { + deps: ['jquery'], + exports: 'jQuery.fn.scrollTo' + }, + 'jquery.cookie': { + deps: ['jquery'], + exports: 'jQuery.fn.cookie' + }, + 'jquery.qtip': { + deps: ['jquery'], + exports: 'jQuery.fn.qtip' + }, + 'jquery.fileupload': { + deps: ['jquery.ui', 'jquery.iframe-transport'], + exports: 'jQuery.fn.fileupload' + }, + 'jquery.fileupload-process': { + deps: ['jquery.fileupload'] + }, + 'jquery.fileupload-validate': { + deps: ['jquery.fileupload'] + }, + 'jquery.inputnumber': { + deps: ['jquery'], + exports: 'jQuery.fn.inputNumber' + }, + 'jquery.simulate': { + deps: ['jquery'], + exports: 'jQuery.fn.simulate' + }, + 'jquery.tinymce': { + deps: ['jquery', 'tinymce'], + exports: 'jQuery.fn.tinymce' + }, + 'datepair': { + deps: ['jquery.ui', 'jquery.timepicker'] + }, + 'underscore': { + exports: '_' + }, + 'backbone': { + deps: ['underscore', 'jquery'], + exports: 'Backbone' + }, + 'backbone.associations': { + deps: ['backbone'], + exports: 'Backbone.Associations' + }, + 'backbone.paginator': { + deps: ['backbone'], + exports: 'Backbone.PageableCollection' + }, + 'backbone-relational': { + deps: ['backbone'] + }, + 'youtube': { + exports: 'YT' + }, + 'codemirror': { + exports: 'CodeMirror' + }, + 'tinymce': { + exports: 'tinymce' + }, + 'mathjax': { + exports: 'MathJax', + init: function() { + window.MathJax.Hub.Config({ + tex2jax: { + inlineMath: [['\\(', '\\)'], ['[mathjaxinline]', '[/mathjaxinline]']], + displayMath: [['\\[', '\\]'], ['[mathjax]', '[/mathjax]']] + } + }); + return window.MathJax.Hub.Configured(); + } + }, + 'URI': { + exports: 'URI' + }, + 'xmodule': { + exports: 'XModule' + }, + 'sinon': { + exports: 'sinon' + }, + 'jasmine-imagediff': {}, + 'common/js/spec_helpers/jasmine-extensions': { + deps: ['jquery'] + }, + 'common/js/spec_helpers/jasmine-stealth': { + deps: ['underscore', 'underscore.string'] + }, + 'common/js/spec_helpers/jasmine-waituntil': { + deps: ['jquery'] + }, + 'xblock/core': { + exports: 'XBlock', + deps: ['jquery', 'jquery.immediateDescendents'] + }, + 'xblock/runtime.v1': { + exports: 'XBlock', + deps: ['xblock/core'] + }, + 'mock-ajax': { + deps: ['jquery'] + }, + 'coffee/src/main': { + deps: ['coffee/src/ajax_prefix'] + }, + 'coffee/src/ajax_prefix': { + deps: ['jquery'] + }, + 'modernizr': { + exports: 'Modernizr' + }, + 'afontgarde': { + exports: 'AFontGarde' + } + } + }); + + jasmine.getFixtures().fixturesPath += 'coffee/fixtures'; + + 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', + 'coffee/spec/models/settings_course_grader_spec', + 'coffee/spec/models/settings_grading_spec', + 'coffee/spec/models/textbook_spec', + 'coffee/spec/models/upload_spec', + 'coffee/spec/views/course_info_spec', + 'coffee/spec/views/metadata_edit_spec', + 'coffee/spec/views/module_edit_spec', + 'coffee/spec/views/textbook_spec', + 'coffee/spec/views/upload_spec', + 'js/spec/video/transcripts/utils_spec', + 'js/spec/video/transcripts/editor_spec', + 'js/spec/video/transcripts/videolist_spec', + 'js/spec/video/transcripts/message_manager_spec', + 'js/spec/video/transcripts/file_uploader_spec', + 'js/spec/models/component_template_spec', + 'js/spec/models/explicit_url_spec', + 'js/spec/models/xblock_info_spec', + 'js/spec/models/xblock_validation_spec', + 'js/spec/models/license_spec', + 'js/spec/utils/drag_and_drop_spec', + 'js/spec/utils/handle_iframe_binding_spec', + 'js/spec/utils/module_spec', + 'js/spec/views/active_video_upload_list_spec', + 'js/spec/views/previous_video_upload_spec', + 'js/spec/views/previous_video_upload_list_spec', + 'js/spec/views/assets_spec', + 'js/spec/views/baseview_spec', + 'js/spec/views/container_spec', + 'js/spec/views/paged_container_spec', + 'js/spec/views/group_configuration_spec', + 'js/spec/views/unit_outline_spec', + 'js/spec/views/xblock_spec', + 'js/spec/views/xblock_editor_spec', + 'js/spec/views/xblock_string_field_editor_spec', + 'js/spec/views/xblock_validation_spec', + 'js/spec/views/license_spec', + 'js/spec/views/paging_spec', + 'js/spec/views/login_studio_spec', + 'js/spec/views/pages/container_spec', + 'js/spec/views/pages/container_subviews_spec', + 'js/spec/views/pages/group_configurations_spec', + 'js/spec/views/pages/course_outline_spec', + 'js/spec/views/pages/course_rerun_spec', + 'js/spec/views/pages/index_spec', + 'js/spec/views/pages/library_users_spec', + 'js/spec/views/modals/base_modal_spec', + 'js/spec/views/modals/edit_xblock_spec', + 'js/spec/views/modals/validation_error_modal_spec', + 'js/spec/views/settings/main_spec', + 'js/spec/factories/xblock_validation_spec', + 'js/certificates/spec/models/certificate_spec', + 'js/certificates/spec/views/certificate_details_spec', + 'js/certificates/spec/views/certificate_editor_spec', + 'js/certificates/spec/views/certificates_list_spec', + 'js/certificates/spec/views/certificate_preview_spec' + ]; + + i = 0; + + while (i < testFiles.length) { + testFiles[i] = '/base/' + testFiles[i] + '.js'; + i++; + } + + specHelpers = [ + 'common/js/spec_helpers/jasmine-extensions', + 'common/js/spec_helpers/jasmine-stealth', + 'common/js/spec_helpers/jasmine-waituntil' + ]; + + requireSerial(specHelpers.concat(testFiles), function() { + return window.__karma__.start(); + }); + +}).call(this, requirejs, requireSerial); // jshint ignore:line diff --git a/cms/static/cms/js/spec/main_squire.js b/cms/static/cms/js/spec/main_squire.js new file mode 100644 index 0000000000..8e65cef81b --- /dev/null +++ b/cms/static/cms/js/spec/main_squire.js @@ -0,0 +1,218 @@ +(function(requirejs, requireSerial) { + 'use strict'; + + var i, specHelpers, testFiles; + + requirejs.config({ + baseUrl: '/base/', + paths: { + 'gettext': 'xmodule_js/common_static/js/test/i18n', + 'mustache': 'xmodule_js/common_static/js/vendor/mustache', + 'codemirror': 'xmodule_js/common_static/js/vendor/CodeMirror/codemirror', + 'jquery': 'common/js/vendor/jquery', + 'jquery-migrate': 'common/js/vendor/jquery-migrate', + 'jquery.ui': 'xmodule_js/common_static/js/vendor/jquery-ui.min', + 'jquery.form': 'xmodule_js/common_static/js/vendor/jquery.form', + 'jquery.markitup': 'xmodule_js/common_static/js/vendor/markitup/jquery.markitup', + 'jquery.leanModal': 'xmodule_js/common_static/js/vendor/jquery.leanModal', + 'jquery.smoothScroll': 'xmodule_js/common_static/js/vendor/jquery.smooth-scroll.min', + 'jquery.scrollTo': 'common/js/vendor/jquery.scrollTo', + 'jquery.timepicker': 'xmodule_js/common_static/js/vendor/timepicker/jquery.timepicker', + 'jquery.cookie': 'xmodule_js/common_static/js/vendor/jquery.cookie', + 'jquery.qtip': 'xmodule_js/common_static/js/vendor/jquery.qtip.min', + 'jquery.fileupload': 'xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload', + 'jquery.fileupload-process': 'xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload-process', // jshint ignore:line + 'jquery.fileupload-validate': 'xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload-validate', // jshint ignore:line + 'jquery.iframe-transport': 'xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.iframe-transport', // jshint ignore:line + 'jquery.inputnumber': 'xmodule_js/common_static/js/vendor/html5-input-polyfills/number-polyfill', + 'jquery.immediateDescendents': 'xmodule_js/common_static/coffee/src/jquery.immediateDescendents', + 'datepair': 'xmodule_js/common_static/js/vendor/timepicker/datepair', + 'date': 'xmodule_js/common_static/js/vendor/date', + 'text': 'xmodule_js/common_static/js/vendor/requirejs/text', + 'underscore': 'common/js/vendor/underscore', + 'underscore.string': 'common/js/vendor/underscore.string', + 'backbone': 'common/js/vendor/backbone', + 'backbone.associations': 'xmodule_js/common_static/js/vendor/backbone-associations-min', + 'backbone.paginator': 'common/js/vendor/backbone.paginator', + 'tinymce': 'xmodule_js/common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min', + 'jquery.tinymce': 'xmodule_js/common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce', + 'xmodule': 'xmodule_js/src/xmodule', + 'xblock/cms.runtime.v1': 'cms/js/xblock/cms.runtime.v1', + 'xblock': 'common/js/xblock', + 'utility': 'xmodule_js/common_static/js/src/utility', + 'sinon': 'xmodule_js/common_static/js/vendor/sinon-1.17.0', + 'squire': 'xmodule_js/common_static/js/vendor/Squire', + 'modernizr': 'edx-pattern-library/js/modernizr-custom', + 'afontgarde': 'edx-pattern-library/js/afontgarde', + 'edxicons': 'edx-pattern-library/js/edx-icons', + 'draggabilly': 'xmodule_js/common_static/js/vendor/draggabilly', + 'domReady': 'xmodule_js/common_static/js/vendor/domReady', + 'URI': 'xmodule_js/common_static/js/vendor/URI.min', + 'mathjax': '//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // jshint ignore:line + 'youtube': '//www.youtube.com/player_api?noext', + 'coffee/src/ajax_prefix': 'xmodule_js/common_static/coffee/src/ajax_prefix' + }, + shim: { + 'gettext': { + exports: 'gettext' + }, + 'date': { + exports: 'Date' + }, + 'jquery.ui': { + deps: ['jquery'], + exports: 'jQuery.ui' + }, + 'jquery.form': { + deps: ['jquery'], + exports: 'jQuery.fn.ajaxForm' + }, + 'jquery.markitup': { + deps: ['jquery'], + exports: 'jQuery.fn.markitup' + }, + 'jquery.leanModal': { + deps: ['jquery'], + exports: 'jQuery.fn.leanModal' + }, + 'jquery.smoothScroll': { + deps: ['jquery'], + exports: 'jQuery.fn.smoothScroll' + }, + 'jquery.scrollTo': { + deps: ['jquery'], + exports: 'jQuery.fn.scrollTo' + }, + 'jquery.cookie': { + deps: ['jquery'], + exports: 'jQuery.fn.cookie' + }, + 'jquery.qtip': { + deps: ['jquery'], + exports: 'jQuery.fn.qtip' + }, + 'jquery.fileupload': { + deps: ['jquery.ui', 'jquery.iframe-transport'], + exports: 'jQuery.fn.fileupload' + }, + 'jquery.fileupload-process': { + deps: ['jquery.fileupload'] + }, + 'jquery.fileupload-validate': { + deps: ['jquery.fileupload'] + }, + 'jquery.inputnumber': { + deps: ['jquery'], + exports: 'jQuery.fn.inputNumber' + }, + 'jquery.tinymce': { + deps: ['jquery', 'tinymce'], + exports: 'jQuery.fn.tinymce' + }, + 'datepair': { + deps: ['jquery.ui', 'jquery.timepicker'] + }, + 'underscore': { + exports: '_' + }, + 'backbone': { + deps: ['underscore', 'jquery'], + exports: 'Backbone' + }, + 'backbone.associations': { + deps: ['backbone'], + exports: 'Backbone.Associations' + }, + 'backbone.paginator': { + deps: ['backbone'], + exports: 'Backbone.PageableCollection' + }, + 'youtube': { + exports: 'YT' + }, + 'codemirror': { + exports: 'CodeMirror' + }, + 'tinymce': { + exports: 'tinymce' + }, + 'mathjax': { + exports: 'MathJax', + init: function() { + window.MathJax.Hub.Config({ + tex2jax: { + inlineMath: [['\\(', '\\)'], ['[mathjaxinline]', '[/mathjaxinline]']], + displayMath: [['\\[', '\\]'], ['[mathjax]', '[/mathjax]']] + } + }); + window.MathJax.Hub.Configured(); + } + }, + 'URI': { + exports: 'URI' + }, + 'xmodule': { + exports: 'XModule' + }, + 'sinon': { + exports: 'sinon' + }, + 'common/js/spec_helpers/jasmine-extensions': { + deps: ['jquery'] + }, + 'common/js/spec_helpers/jasmine-stealth': { + deps: ['underscore', 'underscore.string'] + }, + 'common/js/spec_helpers/jasmine-waituntil': { + deps: ['jquery'] + }, + 'xblock/core': { + exports: 'XBlock', + deps: ['jquery', 'jquery.immediateDescendents'] + }, + 'xblock/runtime.v1': { + exports: 'XBlock', + deps: ['xblock/core'] + }, + 'coffee/src/main': { + deps: ['coffee/src/ajax_prefix'] + }, + 'coffee/src/ajax_prefix': { + deps: ['jquery'] + }, + 'modernizr': { + exports: 'Modernizr' + }, + 'afontgarde': { + exports: 'AFontGarde' + } + } + }); + + jasmine.getFixtures().fixturesPath += 'coffee/fixtures'; + + testFiles = [ + 'coffee/spec/views/assets_spec', + 'js/spec/video/translations_editor_spec', + 'js/spec/video/file_uploader_editor_spec', + 'js/spec/models/group_configuration_spec' + ]; + + i = 0; + + while (i < testFiles.length) { + testFiles[i] = '/base/' + testFiles[i] + '.js'; + i++; + } + + specHelpers = [ + 'common/js/spec_helpers/jasmine-extensions', + 'common/js/spec_helpers/jasmine-stealth', + 'common/js/spec_helpers/jasmine-waituntil' + ]; + + requireSerial(specHelpers.concat(testFiles), function() { + return window.__karma__.start(); + }); + +}).call(this, requirejs, requireSerial); // jshint ignore:line diff --git a/cms/static/js/spec/xblock/cms.runtime.v1_spec.js b/cms/static/cms/js/spec/xblock/cms.runtime.v1_spec.js similarity index 79% rename from cms/static/js/spec/xblock/cms.runtime.v1_spec.js rename to cms/static/cms/js/spec/xblock/cms.runtime.v1_spec.js index c508c21548..893fe6827a 100644 --- a/cms/static/js/spec/xblock/cms.runtime.v1_spec.js +++ b/cms/static/cms/js/spec/xblock/cms.runtime.v1_spec.js @@ -1,10 +1,11 @@ -define(["js/spec_helpers/edit_helpers", "js/views/modals/base_modal", "xblock/cms.runtime.v1"], - function (EditHelpers, BaseModal) { +define(['js/spec_helpers/edit_helpers', 'js/views/modals/base_modal', 'xblock/cms.runtime.v1'], + function(EditHelpers, BaseModal) { + 'use strict'; - describe("Studio Runtime v1", function() { + describe('Studio Runtime v1', function() { var runtime; - beforeEach(function () { + beforeEach(function() { EditHelpers.installEditTemplates(); runtime = new window.StudioRuntime.v1(); }); @@ -20,7 +21,7 @@ define(["js/spec_helpers/edit_helpers", "js/views/modals/base_modal", "xblock/cm }); it('shows save notifications', function() { - var title = "Mock saving...", + var title = 'Mock saving...', notificationSpy = EditHelpers.createNotificationSpy(); runtime.notify('save', { state: 'start', @@ -34,9 +35,9 @@ define(["js/spec_helpers/edit_helpers", "js/views/modals/base_modal", "xblock/cm }); it('shows error messages', function() { - var title = "Mock Error", - message = "This is a mock error.", - notificationSpy = EditHelpers.createNotificationSpy("Error"); + var title = 'Mock Error', + message = 'This is a mock error.', + notificationSpy = EditHelpers.createNotificationSpy('Error'); runtime.notify('error', { title: title, message: message @@ -44,7 +45,7 @@ define(["js/spec_helpers/edit_helpers", "js/views/modals/base_modal", "xblock/cm EditHelpers.verifyNotificationShowing(notificationSpy, title); }); - describe("Modal Dialogs", function() { + describe('Modal Dialogs', function() { var MockModal, modal, showMockModal; MockModal = BaseModal.extend({ @@ -55,12 +56,12 @@ define(["js/spec_helpers/edit_helpers", "js/views/modals/base_modal", "xblock/cm showMockModal = function() { modal = new MockModal({ - title: "Mock Modal" + title: 'Mock Modal' }); modal.show(); }; - beforeEach(function () { + beforeEach(function() { EditHelpers.installEditTemplates(); }); @@ -68,7 +69,7 @@ define(["js/spec_helpers/edit_helpers", "js/views/modals/base_modal", "xblock/cm EditHelpers.hideModalIfShowing(modal); }); - it('cancels a modal dialog', function () { + it('cancels a modal dialog', function() { showMockModal(); runtime.notify('modal-shown', modal); expect(EditHelpers.isShowingModal(modal)).toBeTruthy(); diff --git a/cms/static/cms/js/xblock/cms.runtime.v1.js b/cms/static/cms/js/xblock/cms.runtime.v1.js new file mode 100644 index 0000000000..6c5e73aaf3 --- /dev/null +++ b/cms/static/cms/js/xblock/cms.runtime.v1.js @@ -0,0 +1,188 @@ +define(['jquery', 'backbone', 'xblock/runtime.v1', 'URI', 'gettext', 'js/utils/modal', + 'common/js/components/views/feedback_notification'], + function($, Backbone, XBlock, URI, gettext, ModalUtils, NotificationView) { + 'use strict'; + + var __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { + var key; + for (key in parent) { + if (__hasProp.call(parent, key)) { + child[key] = parent[key]; + } + } + function Ctor() { + this.constructor = child; + } + Ctor.prototype = parent.prototype; + child.prototype = new Ctor(); + child.__super__ = parent.prototype; + return child; + }, + BaseRuntime = {}, + PreviewRuntime = {}, + StudioRuntime = {}; + + BaseRuntime.v1 = (function(_super) { + + __extends(v1, _super); + + v1.prototype.handlerUrl = function(element, handlerName, suffix, query) { + var uri; + uri = URI(this.handlerPrefix) + .segment($(element).data('usage-id')) + .segment('handler') + .segment(handlerName); + if (suffix !== null) { + uri.segment(suffix); + } + if (query !== null) { + uri.search(query); + } + return uri.toString(); + }; + + function v1() { + v1.__super__.constructor.call(this); + this.dispatcher = _.clone(Backbone.Events); + this.listenTo('save', this._handleSave); + this.listenTo('cancel', this._handleCancel); + this.listenTo('error', this._handleError); + this.listenTo('modal-shown', function(data) { + this.modal = data; + }); + this.listenTo('modal-hidden', function() { + this.modal = null; + }); + this.listenTo('page-shown', function(data) { + this.page = data; + }); + } + + /** + * Notify the Studio client-side runtime of an event so that it + * can update the UI in a consistent way. + * + * @param {string} name The name of the event. + * @param {object} data A JSON representation of the data to be included with the event. + */ + v1.prototype.notify = function(name, data) { + this.dispatcher.trigger(name, data); + }; + + /** + * Listen to a Studio event and invoke the specified callback when it is triggered. + * + * @param {string} name The name of the event. + * @param {function} callback The callback to be invoked. + */ + v1.prototype.listenTo = function(name, callback) { + this.dispatcher.bind(name, callback, this); + }; + + /** + * Refresh the view for the xblock represented by the specified element. + * + * @param {element} element The element representing the XBlock. + */ + v1.prototype.refreshXBlock = function(element) { + if (this.page) { + this.page.refreshXBlock(element); + } + }; + + v1.prototype._handleError = function(data) { + var message, title; + message = data.message || data.msg; + if (message) { + // TODO: remove 'Open Assessment' specific default title + title = data.title || gettext('OpenAssessment Save Error'); + this.alert = new NotificationView.Error({ + title: title, + message: message, + closeIcon: false, + shown: false + }); + this.alert.show(); + } + }; + + v1.prototype._handleSave = function(data) { + var message; + // Starting to save, so show a notification + if (data.state === 'start') { + message = data.message || gettext('Saving'); + this.notification = new NotificationView.Mini({ + title: message + }); + this.notification.show(); + } else if (data.state === 'end') { + // Finished saving, so hide the notification and refresh appropriately + this._hideAlerts(); + + if (this.modal && this.modal.onSave) { + // Notify the modal that the save has completed so that it can hide itself + // and then refresh the xblock. + this.modal.onSave(); + } else if (data.element) { + // ... else ask it to refresh the newly saved xblock + this.refreshXBlock(data.element); + } + this.notification.hide(); + } + }; + + v1.prototype._handleCancel = function() { + this._hideAlerts(); + if (this.modal) { + this.modal.cancel(); + this.notify('modal-hidden'); + } + }; + + /** + * Hide any alerts that are being shown. + */ + v1.prototype._hideAlerts = function() { + if (this.alert && this.alert.options.shown) { + this.alert.hide(); + } + }; + + return v1; + + })(XBlock.Runtime.v1); + + PreviewRuntime.v1 = (function(_super) { + + __extends(v1, _super); + + function v1() { + return v1.__super__.constructor.apply(this, arguments); + } + + v1.prototype.handlerPrefix = '/preview/xblock'; + + return v1; + + })(BaseRuntime.v1); + + StudioRuntime.v1 = (function(_super) { + + __extends(v1, _super); + + function v1() { + return v1.__super__.constructor.apply(this, arguments); + } + + v1.prototype.handlerPrefix = '/xblock'; + + return v1; + + })(BaseRuntime.v1); + + // Install the runtime's into the global namespace + window.BaseRuntime = BaseRuntime; + window.PreviewRuntime = PreviewRuntime; + window.StudioRuntime = StudioRuntime; + }); diff --git a/cms/static/coffee/spec/main.coffee b/cms/static/coffee/spec/main.coffee deleted file mode 100644 index 3685cf47ac..0000000000 --- a/cms/static/coffee/spec/main.coffee +++ /dev/null @@ -1,299 +0,0 @@ -requirejs.config({ - baseUrl: '/base/', - paths: { - "gettext": "xmodule_js/common_static/js/test/i18n", - "mustache": "xmodule_js/common_static/js/vendor/mustache", - "codemirror": "xmodule_js/common_static/js/vendor/CodeMirror/codemirror", - "jquery": "xmodule_js/common_static/common/js/vendor/jquery", - "jquery-migrate": "xmodule_js/common_static/common/js/vendor/jquery-migrate", - "jquery.ui": "xmodule_js/common_static/js/vendor/jquery-ui.min", - "jquery.form": "xmodule_js/common_static/js/vendor/jquery.form", - "jquery.markitup": "xmodule_js/common_static/js/vendor/markitup/jquery.markitup", - "jquery.leanModal": "xmodule_js/common_static/js/vendor/jquery.leanModal", - "jquery.ajaxQueue": "xmodule_js/common_static/js/vendor/jquery.ajaxQueue", - "jquery.smoothScroll": "xmodule_js/common_static/js/vendor/jquery.smooth-scroll.min", - "jquery.scrollTo": "common/js/vendor/jquery.scrollTo", - "jquery.timepicker": "xmodule_js/common_static/js/vendor/timepicker/jquery.timepicker", - "jquery.cookie": "xmodule_js/common_static/js/vendor/jquery.cookie", - "jquery.qtip": "xmodule_js/common_static/js/vendor/jquery.qtip.min", - "jquery.fileupload": "xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload", - "jquery.fileupload-process": "xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload-process", - "jquery.fileupload-validate": "xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload-validate", - "jquery.iframe-transport": "xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.iframe-transport", - "jquery.inputnumber": "xmodule_js/common_static/js/vendor/html5-input-polyfills/number-polyfill", - "jquery.immediateDescendents": "xmodule_js/common_static/coffee/src/jquery.immediateDescendents", - "jquery.simulate": "xmodule_js/common_static/js/vendor/jquery.simulate", - "datepair": "xmodule_js/common_static/js/vendor/timepicker/datepair", - "date": "xmodule_js/common_static/js/vendor/date", - "moment": "xmodule_js/common_static/js/vendor/moment.min", - "moment-with-locales": "xmodule_js/common_static/js/vendor/moment-with-locales.min", - "text": "xmodule_js/common_static/js/vendor/requirejs/text", - "underscore": "common/js/vendor/underscore", - "underscore.string": "common/js/vendor/underscore.string", - "backbone": "common/js/vendor/backbone", - "backbone.associations": "xmodule_js/common_static/js/vendor/backbone-associations-min", - "backbone.paginator": "common/js/vendor/backbone.paginator", - "backbone-relational": "xmodule_js/common_static/js/vendor/backbone-relational.min", - "tinymce": "xmodule_js/common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min", - "jquery.tinymce": "xmodule_js/common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce", - "xmodule": "xmodule_js/src/xmodule", - "xblock/cms.runtime.v1": "coffee/src/xblock/cms.runtime.v1", - "xblock/core": "xmodule_js/common_static/js/xblock/core", - "xblock": "xmodule_js/common_static/coffee/src/xblock", - "utility": "xmodule_js/common_static/js/src/utility", - "accessibility": "xmodule_js/common_static/js/src/accessibility_tools", - "sinon": "xmodule_js/common_static/js/vendor/sinon-1.17.0", - "squire": "xmodule_js/common_static/js/vendor/Squire", - "jasmine-imagediff": "xmodule_js/common_static/js/vendor/jasmine-imagediff", - "draggabilly": "xmodule_js/common_static/js/vendor/draggabilly", - "domReady": "xmodule_js/common_static/js/vendor/domReady", - "URI": "xmodule_js/common_static/js/vendor/URI.min", - "mock-ajax": "xmodule_js/common_static/js/vendor/mock-ajax", - "modernizr": "edx-pattern-library/js/modernizr-custom", - "afontgarde": "edx-pattern-library/js/afontgarde", - "edxicons": "edx-pattern-library/js/edx-icons", - - "mathjax": "//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured", - "youtube": "//www.youtube.com/player_api?noext", - - "coffee/src/ajax_prefix": "xmodule_js/common_static/coffee/src/ajax_prefix", - "js/spec/test_utils": "js/spec/test_utils", - } - shim: { - "gettext": { - exports: "gettext" - }, - "date": { - exports: "Date" - }, - "jquery-migrate": ['jquery'], - "jquery.ui": { - deps: ["jquery"], - exports: "jQuery.ui" - }, - "jquery.form": { - deps: ["jquery"], - exports: "jQuery.fn.ajaxForm" - }, - "jquery.markitup": { - deps: ["jquery"], - exports: "jQuery.fn.markitup" - }, - "jquery.leanModal": { - deps: ["jquery"], - exports: "jQuery.fn.leanModal" - }, - "jquery.smoothScroll": { - deps: ["jquery"], - exports: "jQuery.fn.smoothScroll" - }, - "jquery.ajaxQueue": { - deps: ["jquery"], - exports: "jQuery.fn.ajaxQueue" - }, - "jquery.scrollTo": { - deps: ["jquery"], - exports: "jQuery.fn.scrollTo" - }, - "jquery.cookie": { - deps: ["jquery"], - exports: "jQuery.fn.cookie" - }, - "jquery.qtip": { - deps: ["jquery"], - exports: "jQuery.fn.qtip" - }, - "jquery.fileupload": { - deps: ["jquery.ui", "jquery.iframe-transport"], - exports: "jQuery.fn.fileupload" - }, - "jquery.fileupload-process": { - deps: ["jquery.fileupload"] - }, - "jquery.fileupload-validate": { - deps: ["jquery.fileupload"] - }, - "jquery.inputnumber": { - deps: ["jquery"], - exports: "jQuery.fn.inputNumber" - }, - "jquery.simulate": { - deps: ["jquery"], - exports: "jQuery.fn.simulate" - }, - "jquery.tinymce": { - deps: ["jquery", "tinymce"], - exports: "jQuery.fn.tinymce" - }, - "datepair": { - deps: ["jquery.ui", "jquery.timepicker"] - }, - "underscore": { - exports: "_" - }, - "backbone": { - deps: ["underscore", "jquery"], - exports: "Backbone" - }, - "backbone.associations": { - deps: ["backbone"], - exports: "Backbone.Associations" - }, - "backbone.paginator": { - deps: ["backbone"], - exports: "Backbone.PageableCollection" - }, - "backbone-relational": { - deps: ["backbone"], - }, - "youtube": { - exports: "YT" - }, - "codemirror": { - exports: "CodeMirror" - }, - "tinymce": { - exports: "tinymce" - }, - "mathjax": { - exports: "MathJax", - init: -> - MathJax.Hub.Config - tex2jax: - inlineMath: [ - ["\\(", "\\)"], - ['[mathjaxinline]', '[/mathjaxinline]'] - ] - displayMath: [ - ["\\[", "\\]"], - ['[mathjax]', '[/mathjax]'] - ] - MathJax.Hub.Configured() - }, - "URI": { - exports: "URI" - }, - "xmodule": { - exports: "XModule" - }, - "sinon": { - exports: "sinon" - }, - "jasmine-imagediff": {}, - "common/js/spec_helpers/jasmine-extensions": { - deps: ["jquery"] - }, - "common/js/spec_helpers/jasmine-stealth": { - deps: ["underscore", "underscore.string"] - }, - "common/js/spec_helpers/jasmine-waituntil": { - deps: ["jquery"] - }, - "xblock/core": { - exports: "XBlock", - deps: ["jquery", "jquery.immediateDescendents"] - }, - "xblock/runtime.v1": { - exports: "XBlock", - deps: ["xblock/core"] - }, - "mock-ajax": { - deps: ["jquery"] - } - - "coffee/src/main": { - deps: ["coffee/src/ajax_prefix"] - }, - "coffee/src/ajax_prefix": { - deps: ["jquery"] - }, - "modernizr": { - exports: "Modernizr" - }, - "afontgarde": { - exports: "AFontGarde" - } - } -}); - -jasmine.getFixtures().fixturesPath += 'coffee/fixtures' - -testFiles = [ - "coffee/spec/main_spec", - "coffee/spec/models/course_spec", - "coffee/spec/models/metadata_spec", - "coffee/spec/models/section_spec", - "coffee/spec/models/settings_course_grader_spec", - "coffee/spec/models/settings_grading_spec", - "coffee/spec/models/textbook_spec", - "coffee/spec/models/upload_spec", - "coffee/spec/views/course_info_spec", - "coffee/spec/views/metadata_edit_spec", - "coffee/spec/views/module_edit_spec", - "coffee/spec/views/textbook_spec", - "coffee/spec/views/upload_spec", - "js/spec/video/transcripts/utils_spec", - "js/spec/video/transcripts/editor_spec", - "js/spec/video/transcripts/videolist_spec", - "js/spec/video/transcripts/message_manager_spec", - "js/spec/video/transcripts/file_uploader_spec", - "js/spec/models/component_template_spec", - "js/spec/models/explicit_url_spec", - "js/spec/models/xblock_info_spec", - "js/spec/models/xblock_validation_spec", - "js/spec/models/license_spec", - "js/spec/utils/drag_and_drop_spec", - "js/spec/utils/handle_iframe_binding_spec", - "js/spec/utils/module_spec", - "js/spec/views/active_video_upload_list_spec", - "js/spec/views/previous_video_upload_spec", - "js/spec/views/previous_video_upload_list_spec", - "js/spec/views/assets_spec", - "js/spec/views/baseview_spec", - "js/spec/views/container_spec", - "js/spec/views/paged_container_spec", - "js/spec/views/group_configuration_spec", - "js/spec/views/unit_outline_spec", - "js/spec/views/xblock_spec", - "js/spec/views/xblock_editor_spec", - "js/spec/views/xblock_string_field_editor_spec", - "js/spec/views/xblock_validation_spec", - "js/spec/views/license_spec", - "js/spec/views/paging_spec", - "js/spec/views/login_studio_spec", - "js/spec/views/pages/container_spec", - "js/spec/views/pages/container_subviews_spec", - "js/spec/views/pages/group_configurations_spec", - "js/spec/views/pages/course_outline_spec", - "js/spec/views/pages/course_rerun_spec", - "js/spec/views/pages/index_spec", - "js/spec/views/pages/library_users_spec", - "js/spec/views/modals/base_modal_spec", - "js/spec/views/modals/edit_xblock_spec", - "js/spec/views/modals/validation_error_modal_spec", - "js/spec/views/settings/main_spec", - "js/spec/factories/xblock_validation_spec", - "js/spec/xblock/cms.runtime.v1_spec", - "js/certificates/spec/models/certificate_spec", - "js/certificates/spec/views/certificate_details_spec", - "js/certificates/spec/views/certificate_editor_spec", - "js/certificates/spec/views/certificates_list_spec", - "js/certificates/spec/views/certificate_preview_spec" -] - -i = 0 -while i < testFiles.length - testFiles[i] = '/base/' + testFiles[i] + '.js' - i++ - -specHelpers = [ - 'common/js/spec_helpers/jasmine-extensions', - 'common/js/spec_helpers/jasmine-stealth', - 'common/js/spec_helpers/jasmine-waituntil' -] - -# Jasmine has a global stack for creating a tree of specs. We need to load -# spec files one by one, otherwise some end up getting nested under others. -requireSerial specHelpers.concat(testFiles), -> -# start test run, once Require.js is done - window.__karma__.start() diff --git a/cms/static/coffee/spec/main_squire.coffee b/cms/static/coffee/spec/main_squire.coffee deleted file mode 100644 index 3743e9602d..0000000000 --- a/cms/static/coffee/spec/main_squire.coffee +++ /dev/null @@ -1,218 +0,0 @@ -requirejs.config({ - baseUrl: '/base/', - - paths: { - "gettext": "xmodule_js/common_static/js/test/i18n", - "mustache": "xmodule_js/common_static/js/vendor/mustache", - "codemirror": "xmodule_js/common_static/js/vendor/CodeMirror/codemirror", - "jquery": "common/js/vendor/jquery", - "jquery-migrate": "common/js/vendor/jquery-migrate", - "jquery.ui": "xmodule_js/common_static/js/vendor/jquery-ui.min", - "jquery.form": "xmodule_js/common_static/js/vendor/jquery.form", - "jquery.markitup": "xmodule_js/common_static/js/vendor/markitup/jquery.markitup", - "jquery.leanModal": "xmodule_js/common_static/js/vendor/jquery.leanModal", - "jquery.smoothScroll": "xmodule_js/common_static/js/vendor/jquery.smooth-scroll.min", - "jquery.scrollTo": "common/js/vendor/jquery.scrollTo", - "jquery.timepicker": "xmodule_js/common_static/js/vendor/timepicker/jquery.timepicker", - "jquery.cookie": "xmodule_js/common_static/js/vendor/jquery.cookie", - "jquery.qtip": "xmodule_js/common_static/js/vendor/jquery.qtip.min", - "jquery.fileupload": "xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload", - "jquery.fileupload-process": "xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload-process", - "jquery.fileupload-validate": "xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.fileupload-validate", - "jquery.iframe-transport": "xmodule_js/common_static/js/vendor/jQuery-File-Upload/js/jquery.iframe-transport", - "jquery.inputnumber": "xmodule_js/common_static/js/vendor/html5-input-polyfills/number-polyfill", - "jquery.immediateDescendents": "xmodule_js/common_static/coffee/src/jquery.immediateDescendents", - "datepair": "xmodule_js/common_static/js/vendor/timepicker/datepair", - "date": "xmodule_js/common_static/js/vendor/date", - "text": "xmodule_js/common_static/js/vendor/requirejs/text", - "underscore": "common/js/vendor/underscore", - "underscore.string": "common/js/vendor/underscore.string", - "backbone": "common/js/vendor/backbone", - "backbone.associations": "xmodule_js/common_static/js/vendor/backbone-associations-min", - "backbone.paginator": "common/js/vendor/backbone.paginator", - "tinymce": "xmodule_js/common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min", - "jquery.tinymce": "xmodule_js/common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce", - "xmodule": "xmodule_js/src/xmodule", - "xblock/cms.runtime.v1": "coffee/src/xblock/cms.runtime.v1", - "xblock/core": "xmodule_js/common_static/js/xblock/core", - "xblock": "xmodule_js/common_static/coffee/src/xblock", - "utility": "xmodule_js/common_static/js/src/utility", - "sinon": "xmodule_js/common_static/js/vendor/sinon-1.17.0", - "squire": "xmodule_js/common_static/js/vendor/Squire", - "modernizr": "edx-pattern-library/js/modernizr-custom", - "afontgarde": "edx-pattern-library/js/afontgarde", - "edxicons": "edx-pattern-library/js/edx-icons", - "draggabilly": "xmodule_js/common_static/js/vendor/draggabilly", - "domReady": "xmodule_js/common_static/js/vendor/domReady", - "URI": "xmodule_js/common_static/js/vendor/URI.min", - - "mathjax": "//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured", - "youtube": "//www.youtube.com/player_api?noext", - - "coffee/src/ajax_prefix": "xmodule_js/common_static/coffee/src/ajax_prefix" - } - shim: { - "gettext": { - exports: "gettext" - }, - "date": { - exports: "Date" - }, - "jquery.ui": { - deps: ["jquery"], - exports: "jQuery.ui" - }, - "jquery.form": { - deps: ["jquery"], - exports: "jQuery.fn.ajaxForm" - }, - "jquery.markitup": { - deps: ["jquery"], - exports: "jQuery.fn.markitup" - }, - "jquery.leanModal": { - deps: ["jquery"], - exports: "jQuery.fn.leanModal" - }, - "jquery.smoothScroll": { - deps: ["jquery"], - exports: "jQuery.fn.smoothScroll" - }, - "jquery.scrollTo": { - deps: ["jquery"], - exports: "jQuery.fn.scrollTo" - }, - "jquery.cookie": { - deps: ["jquery"], - exports: "jQuery.fn.cookie" - }, - "jquery.qtip": { - deps: ["jquery"], - exports: "jQuery.fn.qtip" - }, - "jquery.fileupload": { - deps: ["jquery.ui", "jquery.iframe-transport"], - exports: "jQuery.fn.fileupload" - }, - "jquery.fileupload-process": { - deps: ["jquery.fileupload"] - }, - "jquery.fileupload-validate": { - deps: ["jquery.fileupload"] - }, - "jquery.inputnumber": { - deps: ["jquery"], - exports: "jQuery.fn.inputNumber" - }, - "jquery.tinymce": { - deps: ["jquery", "tinymce"], - exports: "jQuery.fn.tinymce" - }, - "datepair": { - deps: ["jquery.ui", "jquery.timepicker"] - }, - "underscore": { - exports: "_" - }, - "backbone": { - deps: ["underscore", "jquery"], - exports: "Backbone" - }, - "backbone.associations": { - deps: ["backbone"], - exports: "Backbone.Associations" - }, - "backbone.paginator": { - deps: ["backbone"], - exports: "Backbone.PageableCollection" - }, - "youtube": { - exports: "YT" - }, - "codemirror": { - exports: "CodeMirror" - }, - "tinymce": { - exports: "tinymce" - }, - "mathjax": { - exports: "MathJax", - init: -> - MathJax.Hub.Config - tex2jax: - inlineMath: [ - ["\\(","\\)"], - ['[mathjaxinline]','[/mathjaxinline]'] - ] - displayMath: [ - ["\\[","\\]"], - ['[mathjax]','[/mathjax]'] - ] - MathJax.Hub.Configured(); - }, - "URI": { - exports: "URI" - }, - "xmodule": { - exports: "XModule" - }, - "sinon": { - exports: "sinon" - }, - "common/js/spec_helpers/jasmine-extensions": { - deps: ["jquery"] - }, - "common/js/spec_helpers/jasmine-stealth": { - deps: ["underscore", "underscore.string"] - }, - "common/js/spec_helpers/jasmine-waituntil": { - deps: ["jquery"] - }, - "xblock/core": { - exports: "XBlock", - deps: ["jquery", "jquery.immediateDescendents"] - }, - "xblock/runtime.v1": { - exports: "XBlock", - deps: ["xblock/core"] - }, - - "coffee/src/main": { - deps: ["coffee/src/ajax_prefix"] - }, - "coffee/src/ajax_prefix": { - deps: ["jquery"] - }, - "modernizr": { - exports: "Modernizr" - }, - "afontgarde": { - exports: "AFontGarde" - } - } -}); - -jasmine.getFixtures().fixturesPath += 'coffee/fixtures' - -testFiles = [ - 'coffee/spec/views/assets_spec', - 'js/spec/video/translations_editor_spec', - 'js/spec/video/file_uploader_editor_spec', - 'js/spec/models/group_configuration_spec' -] -i = 0 -while i < testFiles.length - testFiles[i] = '/base/' + testFiles[i] + '.js' - i++ - -specHelpers = [ - 'common/js/spec_helpers/jasmine-extensions', - 'common/js/spec_helpers/jasmine-stealth', - 'common/js/spec_helpers/jasmine-waituntil' -] - -# Jasmine has a global stack for creating a tree of specs. We need to load -# spec files one by one, otherwise some end up getting nested under others. -requireSerial specHelpers.concat(testFiles), -> -# start test run, once Require.js is done - window.__karma__.start() diff --git a/cms/static/coffee/src/xblock/cms.runtime.v1.coffee b/cms/static/coffee/src/xblock/cms.runtime.v1.coffee deleted file mode 100644 index 4cbade87bf..0000000000 --- a/cms/static/coffee/src/xblock/cms.runtime.v1.coffee +++ /dev/null @@ -1,96 +0,0 @@ -define [ - "jquery", "backbone", "xblock/runtime.v1", "URI", "gettext", - "js/utils/modal", "common/js/components/views/feedback_notification" -], ($, Backbone, XBlock, URI, gettext, ModalUtils, NotificationView) -> - - @BaseRuntime = {} - - class BaseRuntime.v1 extends XBlock.Runtime.v1 - handlerUrl: (element, handlerName, suffix, query, thirdparty) -> - uri = URI(@handlerPrefix).segment($(element).data('usage-id')) - .segment('handler') - .segment(handlerName) - if suffix? then uri.segment(suffix) - if query? then uri.search(query) - uri.toString() - - constructor: () -> - super() - @dispatcher = _.clone(Backbone.Events) - @listenTo('save', @_handleSave) - @listenTo('cancel', @_handleCancel) - @listenTo('error', @_handleError) - @listenTo('modal-shown', (data) -> - @modal = data) - @listenTo('modal-hidden', () -> - @modal = null) - @listenTo('page-shown', (data) -> - @page = data) - - # Notify the Studio client-side runtime of an event so that it can update the UI in a consistent way. - notify: (name, data) -> - @dispatcher.trigger(name, data) - - # Listen to a Studio event and invoke the specified callback when it is triggered. - listenTo: (name, callback) -> - @dispatcher.bind(name, callback, this) - - # Refresh the view for the xblock represented by the specified element. - refreshXBlock: (element) -> - if @page - @page.refreshXBlock(element) - - _handleError: (data) -> - message = data.message || data.msg - if message - # TODO: remove 'Open Assessment' specific default title - title = data.title || gettext("OpenAssessment Save Error") - @alert = new NotificationView.Error - title: title - message: message - closeIcon: false - shown: false - @alert.show() - - _handleSave: (data) -> - # Starting to save, so show a notification - if data.state == 'start' - message = data.message || gettext('Saving') - @notification = new NotificationView.Mini - title: message - @notification.show() - - # Finished saving, so hide the notification and refresh appropriately - else if data.state == 'end' - @_hideAlerts() - - # Notify the modal that the save has completed so that it can hide itself - # and then refresh the xblock. - if @modal and @modal.onSave - @modal.onSave() - # ... else ask it to refresh the newly saved xblock - else if data.element - @refreshXBlock(data.element) - - @notification.hide() - - _handleCancel: () -> - @_hideAlerts() - if @modal - @modal.cancel() - @notify('modal-hidden') - - _hideAlerts: () -> - # Hide any alerts that are being shown - if @alert && @alert.options.shown - @alert.hide() - - @PreviewRuntime = {} - - class PreviewRuntime.v1 extends BaseRuntime.v1 - handlerPrefix: '/preview/xblock' - - @StudioRuntime = {} - - class StudioRuntime.v1 extends BaseRuntime.v1 - handlerPrefix: '/xblock' diff --git a/cms/static/karma_cms.conf.js b/cms/static/karma_cms.conf.js index edfb65d9f4..f2ef478cd3 100644 --- a/cms/static/karma_cms.conf.js +++ b/cms/static/karma_cms.conf.js @@ -21,11 +21,13 @@ var options = { // Make sure the patterns in sourceFiles and specFiles do not match the same file. // Otherwise Istanbul which is used for coverage tracking will cause tests to not run. sourceFiles: [ + {pattern: 'cms/**/!(*spec|djangojs).js'}, {pattern: 'coffee/src/**/!(*spec).js'}, {pattern: 'js/**/!(*spec|djangojs).js'} ], specFiles: [ + {pattern: 'cms/**/*spec.js'}, {pattern: 'coffee/spec/**/*spec.js'}, {pattern: 'js/certificates/spec/**/*spec.js'}, {pattern: 'js/spec/**/*spec.js'} @@ -37,10 +39,10 @@ var options = { ], runFiles: [ - {pattern: 'coffee/spec/main.js', included: true} + {pattern: 'cms/js/spec/main.js', included: true} ] }; -module.exports = function (config) { +module.exports = function(config) { configModule.configure(config, options); }; diff --git a/cms/static/karma_cms_squire.conf.js b/cms/static/karma_cms_squire.conf.js index 093e51bb55..d8bdda0c98 100644 --- a/cms/static/karma_cms_squire.conf.js +++ b/cms/static/karma_cms_squire.conf.js @@ -36,7 +36,7 @@ var options = { ], runFiles: [ - {pattern: 'coffee/spec/main_squire.js', included: true} + {pattern: 'cms/js/spec/main_squire.js', included: true} ] }; diff --git a/common/static/coffee/spec/xblock/core_spec.coffee b/common/static/coffee/spec/xblock/core_spec.coffee deleted file mode 100644 index e04184710a..0000000000 --- a/common/static/coffee/spec/xblock/core_spec.coffee +++ /dev/null @@ -1,96 +0,0 @@ -describe "XBlock", -> - beforeEach -> - setFixtures """ -