From e66fa82f3a1d7fc769fe57b801d7f4c17d1b3e78 Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Wed, 31 May 2017 15:31:24 -0400 Subject: [PATCH] FIX: Don't load JS via SCRIPT tag in QUnit mode --- .../javascripts/admin/components/ace-editor.js.es6 | 12 +++++++++--- .../javascripts/discourse/lib/load-script.js.es6 | 12 ++++++++++-- test/javascripts/test_helper.js | 1 + 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/admin/components/ace-editor.js.es6 b/app/assets/javascripts/admin/components/ace-editor.js.es6 index 372a32b33a1..749ce2492da 100644 --- a/app/assets/javascripts/admin/components/ace-editor.js.es6 +++ b/app/assets/javascripts/admin/components/ace-editor.js.es6 @@ -1,6 +1,8 @@ import loadScript from 'discourse/lib/load-script'; import { observes } from 'ember-addons/ember-computed-decorators'; +const LOAD_ASYNC = !Ember.Test; + export default Ember.Component.extend({ mode: 'css', classNames: ['ace-wrapper'], @@ -23,7 +25,7 @@ export default Ember.Component.extend({ @observes('mode') modeChanged() { - if (this._editor && !this._skipContentChangeEvent) { + if (LOAD_ASYNC && this._editor && !this._skipContentChangeEvent) { this._editor.getSession().setMode("ace/mode/" + this.get('mode')); } }, @@ -56,10 +58,14 @@ export default Ember.Component.extend({ if (!this.element || this.isDestroying || this.isDestroyed) { return; } const editor = loadedAce.edit(this.$('.ace')[0]); - editor.setTheme("ace/theme/chrome"); + if (LOAD_ASYNC) { + editor.setTheme("ace/theme/chrome"); + } editor.setShowPrintMargin(false); editor.setOptions({fontSize: "14px"}); - editor.getSession().setMode("ace/mode/" + this.get('mode')); + if (LOAD_ASYNC) { + editor.getSession().setMode("ace/mode/" + this.get('mode')); + } editor.on('change', () => { this._skipContentChangeEvent = true; this.set('content', editor.getSession().getValue()); diff --git a/app/assets/javascripts/discourse/lib/load-script.js.es6 b/app/assets/javascripts/discourse/lib/load-script.js.es6 index 8df26b8bb62..ddcdaf3d774 100644 --- a/app/assets/javascripts/discourse/lib/load-script.js.es6 +++ b/app/assets/javascripts/discourse/lib/load-script.js.es6 @@ -35,6 +35,11 @@ export default function loadScript(url, opts) { opts = opts || {}; + $('script').each((i, tag) => { + _loaded[tag.getAttribute('src')] = true; + }); + + return new Ember.RSVP.Promise(function(resolve) { url = Discourse.getURL(url); @@ -42,7 +47,7 @@ export default function loadScript(url, opts) { if (_loaded[url]) { return resolve(); } if (_loading[url]) { return _loading[url].then(resolve);} - var done; + let done; _loading[url] = new Ember.RSVP.Promise(function(_done){ done = _done; }); @@ -60,7 +65,7 @@ export default function loadScript(url, opts) { resolve(); }; - var cdnUrl = url; + let cdnUrl = url; // Scripts should always load from CDN // CSS is type text, to accept it from a CDN we would need to handle CORS @@ -72,6 +77,9 @@ export default function loadScript(url, opts) { // to dynamically load more JS. In that case, add the `scriptTag: true` // option. if (opts.scriptTag) { + if (Ember.Test) { + throw `In test mode scripts cannot be loaded async ${cdnUrl}`; + } loadWithTag(cdnUrl, cb); } else { ajax({url: cdnUrl, dataType: opts.css ? "text": "script", cache: true}).then(cb); diff --git a/test/javascripts/test_helper.js b/test/javascripts/test_helper.js index 02f9f580828..12b73912ba5 100644 --- a/test/javascripts/test_helper.js +++ b/test/javascripts/test_helper.js @@ -48,6 +48,7 @@ window.MessageBus.stop(); // Trick JSHint into allow document.write var d = document; +d.write(''); d.write('
'); d.write('');