diff --git a/app/assets/javascripts/admin/components/resumable_upload_component.js b/app/assets/javascripts/admin/components/resumable_upload_component.js index 3e3c1ad6fca2c..a5ef4af921ae5 100644 --- a/app/assets/javascripts/admin/components/resumable_upload_component.js +++ b/app/assets/javascripts/admin/components/resumable_upload_component.js @@ -9,13 +9,8 @@ error="errorAction" uploadText="UPLOAD" }} - - @class ResumableUploadComponent - @extends Ember.Component - @namespace Discourse - @module Discourse **/ -Discourse.ResumableUploadComponent = Ember.Component.extend({ +Discourse.ResumableUploadComponent = Ember.Component.extend(Discourse.StringBuffer, { tagName: "button", classNames: ["btn", "ru"], classNameBindings: ["isUploading"], @@ -25,7 +20,7 @@ Discourse.ResumableUploadComponent = Ember.Component.extend({ isUploading: false, progress: 0, - shouldRerender: Discourse.View.renderIfChanged("isUploading", "progress"), + rerenderTriggers: ['isUploading', 'progress'], text: function() { if (this.get("isUploading")) { @@ -35,7 +30,7 @@ Discourse.ResumableUploadComponent = Ember.Component.extend({ } }.property("isUploading", "progress"), - render: function(buffer) { + renderString: function(buffer) { var icon = this.get("isUploading") ? "times" : "upload"; buffer.push(""); buffer.push("" + this.get("text") + ""); diff --git a/app/assets/javascripts/discourse/mixins/string-buffer.js.es6 b/app/assets/javascripts/discourse/mixins/string-buffer.js.es6 new file mode 100644 index 0000000000000..070dfd12701c0 --- /dev/null +++ b/app/assets/javascripts/discourse/mixins/string-buffer.js.es6 @@ -0,0 +1,27 @@ +export default Ember.Mixin.create({ + + _watchProps: function() { + var args = this.get('rerenderTriggers'); + if (!Ember.isNone(args)) { + var self = this; + args.forEach(function(k) { + self.addObserver(k, self.rerenderString); + }); + } + }.on('init'), + + render: function(buffer) { + this.renderString(buffer); + }, + + _rerenderString: function() { + var buffer = []; + this.renderString(buffer); + this.$().html(buffer.join('')); + }, + + rerenderString: function() { + Ember.run.once(this, '_rerenderString'); + } + +});