diff --git a/packages/rocketchat-markdown/parser/original/markdown.js b/packages/rocketchat-markdown/parser/original/markdown.js index 5e49e2f2752c..6b64da6734dc 100644 --- a/packages/rocketchat-markdown/parser/original/markdown.js +++ b/packages/rocketchat-markdown/parser/original/markdown.js @@ -3,6 +3,7 @@ * @param {String} msg - The message html */ import { Meteor } from 'meteor/meteor'; +import { Random } from 'meteor/random'; import { _ } from 'meteor/underscore'; import { RocketChat } from 'meteor/rocketchat:lib'; @@ -11,6 +12,16 @@ const parseNotEscaped = function(msg, message) { message.tokens = []; } + const addAsToken = function(html) { + const token = `=!=${ Random.id() }=!=`; + message.tokens.push({ + token, + text: html + }); + + return token; + }; + const schemes = RocketChat.settings.get('Markdown_SupportSchemesForLink').split(',').join('|'); if (RocketChat.settings.get('Markdown_Headers')) { @@ -53,34 +64,21 @@ const parseNotEscaped = function(msg, message) { msg = msg.replace(/<\/blockquote>\n
{ const target = url.indexOf(Meteor.absoluteUrl()) === 0 ? '' : '_blank'; - const html = `
`; - - if (message && message.tokens) { - const token = `=!=${ Random.id() }=!=`; - - message.tokens.push({ - token, - text: html - }); - - return token; - } - - return html; + return addAsToken(`
`); }); // Support [Text](http://link) - msg = msg.replace(new RegExp(`\\[([^\\]]+)\\]\\(((?:${ schemes }):\\/\\/[^\\)]+)\\)`, 'gm'), function(match, title, url) { + msg = msg.replace(new RegExp(`\\[([^\\]]+)\\]\\(((?:${ schemes }):\\/\\/[^\\)]+)\\)`, 'gm'), (match, title, url) => { const target = url.indexOf(Meteor.absoluteUrl()) === 0 ? '' : '_blank'; - return `${ _.escapeHTML(title) }`; + return addAsToken(`${ _.escapeHTML(title) }`); }); // Support msg = msg.replace(new RegExp(`(?:<|<)((?:${ schemes }):\\/\\/[^\\|]+)\\|(.+?)(?=>|>)(?:>|>)`, 'gm'), (match, url, title) => { const target = url.indexOf(Meteor.absoluteUrl()) === 0 ? '' : '_blank'; - return `${ _.escapeHTML(title) }`; + return addAsToken(`${ _.escapeHTML(title) }`); }); return msg; diff --git a/packages/rocketchat-markdown/tests/client.tests.js b/packages/rocketchat-markdown/tests/client.tests.js index 546e84a382be..80822cc3be7f 100644 --- a/packages/rocketchat-markdown/tests/client.tests.js +++ b/packages/rocketchat-markdown/tests/client.tests.js @@ -226,6 +226,9 @@ const testObject = (object, parser = original, test = defaultObjectTest) => { Object.keys(object).forEach((objectKey) => { describe(objectKey, () => { const result = parser({html: objectKey}); + result.tokens.forEach((token) => { + result.html = result.html.replace(token.token, token.text); + }); it(`should be equal to ${ object[objectKey] }`, () => { test(result, object, objectKey); }); @@ -254,21 +257,9 @@ describe('Original', function() { describe('Link', () => testObject(link)); - describe('Inline Code', () => testObject(inlinecode, undefined, (result, object, objectKey) => { - let html = result.html; - result.tokens.forEach((token) => { - html = html.replace(token.token, token.text); - }); - assert.equal(html, object[objectKey]); - })); + describe('Inline Code', () => testObject(inlinecode)); - describe('Code', () => testObject(code, undefined, (result, object, objectKey) => { - let html = result.html; - result.tokens.forEach((token) => { - html = html.replace(token.token, token.text); - }); - assert.equal(html, object[objectKey]); - })); + describe('Code', () => testObject(code)); }); // describe.only('Marked', function() {