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');
+ }
+
+});