From 1afa1d37c77b9508a4256e32c4e1fea27113033f Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Tue, 22 Sep 2015 14:30:50 -0400
Subject: Moved text formatting code to only occur inside of markdown text
 nodes

---
 web/react/utils/text_formatting.jsx | 39 +++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 19 deletions(-)

(limited to 'web/react/utils/text_formatting.jsx')

diff --git a/web/react/utils/text_formatting.jsx b/web/react/utils/text_formatting.jsx
index 089fdd4f9..41dc98084 100644
--- a/web/react/utils/text_formatting.jsx
+++ b/web/react/utils/text_formatting.jsx
@@ -10,8 +10,6 @@ const Utils = require('./utils.jsx');
 
 const marked = require('marked');
 
-const markdownRenderer = new Markdown.MattermostMarkdownRenderer();
-
 // Performs formatting of user posts including highlighting mentions and search terms and converting urls, hashtags, and
 // @mentions to links by taking a user's message and returning a string of formatted html. Also takes a number of options
 // as part of the second parameter:
@@ -25,14 +23,30 @@ export function formatText(text, options = {}) {
         options.markdown = true;
     }
 
-    // wait until marked can sanitize the html so that we don't break markdown block quotes
     let output;
-    if (!options.markdown) {
-        output = sanitizeHtml(text);
+
+    if (options.markdown) {
+        // the markdown renderer will call doFormatText as necessary so just call marked
+        output = marked(text, {
+            renderer: new Markdown.MattermostMarkdownRenderer(null, options),
+            sanitize: true
+        });
     } else {
-        output = text;
+        output = sanitizeHtml(text);
+        output = doFormatText(output, options);
     }
 
+    // replace newlines with spaces if necessary
+    if (options.singleline) {
+        output = replaceNewlines(output);
+    }
+
+    return output;
+}
+
+export function doFormatText(text, options) {
+    let output = text;
+
     const tokens = new Map();
 
     // replace important words and phrases with tokens
@@ -52,22 +66,9 @@ export function formatText(text, options = {}) {
         output = highlightCurrentMentions(output, tokens);
     }
 
-    // perform markdown parsing while we have an html-free input string
-    if (options.markdown) {
-        output = marked(output, {
-            renderer: markdownRenderer,
-            sanitize: true
-        });
-    }
-
     // reinsert tokens with formatted versions of the important words and phrases
     output = replaceTokens(output, tokens);
 
-    // replace newlines with html line breaks
-    if (options.singleline) {
-        output = replaceNewlines(output);
-    }
-
     return output;
 }
 
-- 
cgit v1.2.3-1-g7c22

