From 6ff7bf7505fcba84a0072649a99b67b91c6a10a6 Mon Sep 17 00:00:00 2001
From: Robin Ward <robin.ward@gmail.com>
Date: Thu, 29 Jun 2017 12:14:27 -0400
Subject: [PATCH] REFACTOR: Use component for `cook-text` to improve async
 workflow

---
 .../discourse/components/cook-text.js.es6      | 15 +++++++++++++++
 .../discourse/helpers/cook-text.js.es6         | 18 ------------------
 .../templates/components/cook-text.hbs         |  1 +
 .../templates/components/queued-post.hbs       |  2 +-
 4 files changed, 17 insertions(+), 19 deletions(-)
 create mode 100644 app/assets/javascripts/discourse/components/cook-text.js.es6
 delete mode 100644 app/assets/javascripts/discourse/helpers/cook-text.js.es6
 create mode 100644 app/assets/javascripts/discourse/templates/components/cook-text.hbs

diff --git a/app/assets/javascripts/discourse/components/cook-text.js.es6 b/app/assets/javascripts/discourse/components/cook-text.js.es6
new file mode 100644
index 00000000000..80ed6935632
--- /dev/null
+++ b/app/assets/javascripts/discourse/components/cook-text.js.es6
@@ -0,0 +1,15 @@
+import { cookAsync } from 'discourse/lib/text';
+
+const CookText = Ember.Component.extend({
+  tagName: '',
+  cooked: null,
+
+  didReceiveAttrs() {
+    this._super(...arguments);
+    cookAsync(this.get('rawText')).then(cooked => this.set('cooked', cooked));
+  }
+});
+
+CookText.reopenClass({ positionalParams: ['rawText'] });
+
+export default CookText;
diff --git a/app/assets/javascripts/discourse/helpers/cook-text.js.es6 b/app/assets/javascripts/discourse/helpers/cook-text.js.es6
deleted file mode 100644
index c636f0a385b..00000000000
--- a/app/assets/javascripts/discourse/helpers/cook-text.js.es6
+++ /dev/null
@@ -1,18 +0,0 @@
-import { cookAsync } from 'discourse/lib/text';
-import guid from 'pretty-text/guid';
-import { registerUnbound } from 'discourse-common/lib/helpers';
-
-function cookText(text) {
-  const id = `${guid().replace(/-/g, '')}`;
-
-  cookAsync(text)
-    .then(cooked => {
-      Em.run.next(()=>{
-        $('#' + id).html(cooked.string);
-      });
-  });
-
-  return new Handlebars.SafeString(`<div id='${id}'></div>`);
-}
-
-registerUnbound('cook-text', cookText);
diff --git a/app/assets/javascripts/discourse/templates/components/cook-text.hbs b/app/assets/javascripts/discourse/templates/components/cook-text.hbs
new file mode 100644
index 00000000000..1732a781917
--- /dev/null
+++ b/app/assets/javascripts/discourse/templates/components/cook-text.hbs
@@ -0,0 +1 @@
+{{cooked}}
diff --git a/app/assets/javascripts/discourse/templates/components/queued-post.hbs b/app/assets/javascripts/discourse/templates/components/queued-post.hbs
index 6ddd37b864a..4b094fdb210 100644
--- a/app/assets/javascripts/discourse/templates/components/queued-post.hbs
+++ b/app/assets/javascripts/discourse/templates/components/queued-post.hbs
@@ -34,7 +34,7 @@
       {{#if editing}}
         {{d-editor value=buffered.raw}}
       {{else}}
-        {{{cook-text post.raw}}}
+        {{cook-text post.raw}}
       {{/if}}
     </div>