From ef079004dac940e2788f75d80586df3c9ec17d23 Mon Sep 17 00:00:00 2001
From: Robin Ward <robin.ward@gmail.com>
Date: Tue, 23 Feb 2016 12:10:04 -0500
Subject: [PATCH] Ability to decorate after post cooked, and rawHtml helper

---
 app/assets/javascripts/discourse/lib/plugin-api.js.es6       | 1 -
 .../javascripts/discourse/widgets/decorator-helper.js.es6    | 5 +++++
 app/assets/javascripts/discourse/widgets/post.js.es6         | 5 +++--
 app/assets/javascripts/discourse/widgets/widget.js.es6       | 2 +-
 4 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 b/app/assets/javascripts/discourse/lib/plugin-api.js.es6
index 49db0a29892..3f1ec4b5fa8 100644
--- a/app/assets/javascripts/discourse/lib/plugin-api.js.es6
+++ b/app/assets/javascripts/discourse/lib/plugin-api.js.es6
@@ -23,7 +23,6 @@ class PluginApi {
   constructor(version, container) {
     this.version = version;
     this.container = container;
-
     this._currentUser = container.lookup('current-user:main');
   }
 
diff --git a/app/assets/javascripts/discourse/widgets/decorator-helper.js.es6 b/app/assets/javascripts/discourse/widgets/decorator-helper.js.es6
index d1cbf491204..3448a660f3b 100644
--- a/app/assets/javascripts/discourse/widgets/decorator-helper.js.es6
+++ b/app/assets/javascripts/discourse/widgets/decorator-helper.js.es6
@@ -1,6 +1,7 @@
 import Connector from 'discourse/widgets/connector';
 import { h } from 'virtual-dom';
 import PostCooked from 'discourse/widgets/post-cooked';
+import RawHtml from 'discourse/widgets/raw-html';
 
 class DecoratorHelper {
   constructor(widget, attrs, state) {
@@ -17,6 +18,10 @@ class DecoratorHelper {
     return this.widget.findAncestorModel();
   }
 
+  rawHtml(html) {
+    return new RawHtml({ html });
+  }
+
   cooked(cooked) {
     return new PostCooked({ cooked });
   }
diff --git a/app/assets/javascripts/discourse/widgets/post.js.es6 b/app/assets/javascripts/discourse/widgets/post.js.es6
index 47e071d5b0b..e61b00ff74c 100644
--- a/app/assets/javascripts/discourse/widgets/post.js.es6
+++ b/app/assets/javascripts/discourse/widgets/post.js.es6
@@ -1,5 +1,5 @@
 import PostCooked from 'discourse/widgets/post-cooked';
-import { createWidget } from 'discourse/widgets/widget';
+import { createWidget, applyDecorators } from 'discourse/widgets/widget';
 import { iconNode } from 'discourse/helpers/fa-icon';
 import { transformBasicPost } from 'discourse/lib/transform-post';
 import { h } from 'virtual-dom';
@@ -251,7 +251,8 @@ createWidget('post-contents', {
   },
 
   html(attrs, state) {
-    const result = [new PostCooked(attrs, new DecoratorHelper(this))];
+    let result = [new PostCooked(attrs, new DecoratorHelper(this))];
+    result = result.concat(applyDecorators(this, 'after-cooked', attrs, state));
 
     if (attrs.cooked_hidden) {
       result.push(this.attach('expand-hidden', attrs));
diff --git a/app/assets/javascripts/discourse/widgets/widget.js.es6 b/app/assets/javascripts/discourse/widgets/widget.js.es6
index 7176de339b7..f959c8fc77d 100644
--- a/app/assets/javascripts/discourse/widgets/widget.js.es6
+++ b/app/assets/javascripts/discourse/widgets/widget.js.es6
@@ -22,7 +22,7 @@ export function decorateWidget(widgetName, cb) {
   _decorators[widgetName].push(cb);
 }
 
-function applyDecorators(widget, type, attrs, state) {
+export function applyDecorators(widget, type, attrs, state) {
   const decorators = _decorators[`${widget.name}:${type}`] || [];
 
   if (decorators.length) {