diff --git a/app/assets/javascripts/admin/components/ace-editor.js.es6 b/app/assets/javascripts/admin/components/ace-editor.js.es6 index 561ebc6d8ab..01773d2cbf8 100644 --- a/app/assets/javascripts/admin/components/ace-editor.js.es6 +++ b/app/assets/javascripts/admin/components/ace-editor.js.es6 @@ -1,26 +1,17 @@ -/* global ace:true */ import loadScript from 'discourse/lib/load-script'; -import { escapeExpression } from 'discourse/lib/utilities'; -import { bufferedRender } from 'discourse-common/lib/buffered-render'; +import { observes } from 'ember-addons/ember-computed-decorators'; -export default Ember.Component.extend(bufferedRender({ +export default Ember.Component.extend({ mode: 'css', classNames: ['ace-wrapper'], _editor: null, _skipContentChangeEvent: null, - contentChanged: function() { + @observes('content') + contentChanged() { if (this._editor && !this._skipContentChangeEvent) { this._editor.getSession().setValue(this.get('content')); } - }.observes('content'), - - buildBuffer(buffer) { - buffer.push("
"); - if (this.get('content')) { - buffer.push(escapeExpression(this.get('content'))); - } - buffer.push("
"); }, _destroyEditor: function() { @@ -40,31 +31,30 @@ export default Ember.Component.extend(bufferedRender({ } }, - _initEditor: function() { - const self = this; + didInsertElement() { + this._super(); - loadScript("/javascripts/ace/ace.js", { scriptTag: true }).then(function() { - ace.require(['ace/ace'], function(loadedAce) { - const editor = loadedAce.edit(self.$('.ace')[0]); + loadScript("/javascripts/ace/ace.js", { scriptTag: true }).then(() => { + window.ace.require(['ace/ace'], loadedAce => { + const editor = loadedAce.edit(this.$('.ace')[0]); editor.setTheme("ace/theme/chrome"); editor.setShowPrintMargin(false); - editor.getSession().setMode("ace/mode/" + self.get('mode')); - editor.on('change', function() { - self._skipContentChangeEvent = true; - self.set('content', editor.getSession().getValue()); - self._skipContentChangeEvent = false; + editor.getSession().setMode("ace/mode/" + this.get('mode')); + editor.on('change', () => { + this._skipContentChangeEvent = true; + this.set('content', editor.getSession().getValue()); + this._skipContentChangeEvent = false; }); editor.$blockScrolling = Infinity; - self.$().data('editor', editor); - self._editor = editor; - if (self.appEvents) { + this.$().data('editor', editor); + this._editor = editor; + if (this.appEvents) { // xxx: don't run during qunit tests - self.appEvents.on('ace:resize', self, self.resize); + this.appEvents.on('ace:resize', self, self.resize); } }); }); - - }.on('didInsertElement') -})); + } +}); diff --git a/app/assets/javascripts/admin/templates/components/ace-editor.hbs b/app/assets/javascripts/admin/templates/components/ace-editor.hbs new file mode 100644 index 00000000000..c837b2b34ee --- /dev/null +++ b/app/assets/javascripts/admin/templates/components/ace-editor.hbs @@ -0,0 +1 @@ +
{{content}}
diff --git a/app/assets/javascripts/discourse-common/lib/buffered-render.js.es6 b/app/assets/javascripts/discourse-common/lib/buffered-render.js.es6 index f8d5bec53c2..6f19de49124 100644 --- a/app/assets/javascripts/discourse-common/lib/buffered-render.js.es6 +++ b/app/assets/javascripts/discourse-common/lib/buffered-render.js.es6 @@ -2,10 +2,7 @@ // In the long term we'll want to remove this. const Mixin = { - __bufferTimeout: null, - _customRender() { - Ember.run.cancel(this.__bufferTimeout); if (!this.element || this.isDestroying || this.isDestroyed) { return; } const buffer = [];