summaryrefslogtreecommitdiffstats
path: root/web/react/utils
diff options
context:
space:
mode:
authorhmhealey <harrisonmhealey@gmail.com>2015-09-22 14:30:50 -0400
committerhmhealey <harrisonmhealey@gmail.com>2015-09-22 14:30:50 -0400
commit1afa1d37c77b9508a4256e32c4e1fea27113033f (patch)
treec6c8bb345da696dbb8f9f49ffcce9843b3164ab1 /web/react/utils
parentd025da5da9b6b6bf3c0003191f07a8184e545f8a (diff)
downloadchat-1afa1d37c77b9508a4256e32c4e1fea27113033f.tar.gz
chat-1afa1d37c77b9508a4256e32c4e1fea27113033f.tar.bz2
chat-1afa1d37c77b9508a4256e32c4e1fea27113033f.zip
Moved text formatting code to only occur inside of markdown text nodes
Diffstat (limited to 'web/react/utils')
-rw-r--r--web/react/utils/markdown.jsx13
-rw-r--r--web/react/utils/text_formatting.jsx39
2 files changed, 33 insertions, 19 deletions
diff --git a/web/react/utils/markdown.jsx b/web/react/utils/markdown.jsx
index 96da54217..0a876a3e3 100644
--- a/web/react/utils/markdown.jsx
+++ b/web/react/utils/markdown.jsx
@@ -1,9 +1,18 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
+const TextFormatting = require('./text_formatting.jsx');
+
const marked = require('marked');
export class MattermostMarkdownRenderer extends marked.Renderer {
+ constructor(options, formattingOptions = {}) {
+ super(options);
+
+ this.text = this.text.bind(this);
+
+ this.formattingOptions = formattingOptions;
+ }
link(href, title, text) {
let outHref = href;
@@ -19,4 +28,8 @@ export class MattermostMarkdownRenderer extends marked.Renderer {
return output;
}
+
+ text(text) {
+ return TextFormatting.doFormatText(text, this.formattingOptions);
+ }
}
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;
}