diff --git a/elements/sifrr-code-editor/src/sifrrcodeeditor.js b/elements/sifrr-code-editor/src/sifrrcodeeditor.js index 9d107099..d42e21ad 100644 --- a/elements/sifrr-code-editor/src/sifrrcodeeditor.js +++ b/elements/sifrr-code-editor/src/sifrrcodeeditor.js @@ -42,21 +42,24 @@ class SifrrCodeEditor extends SifrrDom.Element { } cmLoaded() { - SifrrDom.Loader.executeJS( - `https://cdn.jsdelivr.net/npm/codemirror@${CM_VERSION}/mode/${this.getLang()}/${this.getLang()}.js` - ).then(() => { - this.cm = window.CodeMirror.fromTextArea(this.$('textarea'), { - value: this.$('textarea').value, - mode: this.getLang(), - htmlMode: true, - theme: this.getTheme(), - indentUnit: 2, - tabSize: 2, - lineNumbers: true + this.loading = + this.loading || + SifrrDom.Loader.executeJS( + `https://cdn.jsdelivr.net/npm/codemirror@${CM_VERSION}/mode/${this.getLang()}/${this.getLang()}.js` + ).then(() => { + this.cm = window.CodeMirror.fromTextArea(this.$('textarea'), { + value: this.$('textarea').value, + mode: this.getLang(), + htmlMode: true, + theme: this.getTheme(), + indentUnit: 2, + tabSize: 2, + lineNumbers: true + }); + this.cm.on('change', this.setValueFromCm.bind(this)); + this._cmLoaded = true; }); - this.cm.on('change', this.setValueFromCm.bind(this)); - this._cmLoaded = true; - }); + return this.loading; } getTheme() { diff --git a/elements/sifrr-code-editor/test/browser/loading.test.js b/elements/sifrr-code-editor/test/browser/loading.test.js index 98346340..dafd1912 100644 --- a/elements/sifrr-code-editor/test/browser/loading.test.js +++ b/elements/sifrr-code-editor/test/browser/loading.test.js @@ -1,4 +1,6 @@ async function assertValue(selector, value) { + await page.$eval(selector, async el => await el.cmLoaded()); + const value0 = await page.$eval(selector, el => el.value); expect(value0).to.be.equal(value); @@ -13,7 +15,6 @@ describe('code editor', function() { before(async () => { await page.goto(`${PATH}/codeeditor.html`); await page.evaluate(async () => await Sifrr.Dom.loading()); - await page.evaluate(async () => await Sifrr.Dom.elements['sifrr-code-editor'].cm()); }); it('loads code editor', async function() {