Skip to content

Commit

Permalink
Merge pull request #8451 from RocketChat/improvements/markdown-parser
Browse files Browse the repository at this point in the history
Improve markdown parser code
  • Loading branch information
rodrigok committed Oct 11, 2017
1 parent 7932694 commit 2d95ca1
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 32 deletions.
34 changes: 16 additions & 18 deletions packages/rocketchat-markdown/parser/original/markdown.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand All @@ -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')) {
Expand Down Expand Up @@ -53,34 +64,21 @@ const parseNotEscaped = function(msg, message) {
msg = msg.replace(/<\/blockquote>\n<blockquote/gm, '</blockquote><blockquote');

// Support ![alt text](http://image url)
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';
const html = `<a href="${ _.escapeHTML(url) }" title="${ _.escapeHTML(title) }" target="${ _.escapeHTML(target) }" rel="noopener noreferrer"><div class="inline-image" style="background-image: url(${ _.escapeHTML(url) });"></div></a>`;

if (message && message.tokens) {
const token = `=!=${ Random.id() }=!=`;

message.tokens.push({
token,
text: html
});

return token;
}

return html;
return addAsToken(`<a href="${ _.escapeHTML(url) }" title="${ _.escapeHTML(title) }" target="${ _.escapeHTML(target) }" rel="noopener noreferrer"><div class="inline-image" style="background-image: url(${ _.escapeHTML(url) });"></div></a>`);
});

// 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 `<a href="${ _.escapeHTML(url) }" target="${ _.escapeHTML(target) }" rel="noopener noreferrer">${ _.escapeHTML(title) }</a>`;
return addAsToken(`<a href="${ _.escapeHTML(url) }" target="${ _.escapeHTML(target) }" rel="noopener noreferrer">${ _.escapeHTML(title) }</a>`);
});

// Support <http://link|Text>
msg = msg.replace(new RegExp(`(?:<|&lt;)((?:${ schemes }):\\/\\/[^\\|]+)\\|(.+?)(?=>|&gt;)(?:>|&gt;)`, 'gm'), (match, url, title) => {
const target = url.indexOf(Meteor.absoluteUrl()) === 0 ? '' : '_blank';
return `<a href="${ _.escapeHTML(url) }" target="${ _.escapeHTML(target) }" rel="noopener noreferrer">${ _.escapeHTML(title) }</a>`;
return addAsToken(`<a href="${ _.escapeHTML(url) }" target="${ _.escapeHTML(target) }" rel="noopener noreferrer">${ _.escapeHTML(title) }</a>`);
});

return msg;
Expand Down
19 changes: 5 additions & 14 deletions packages/rocketchat-markdown/tests/client.tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
Expand Down Expand Up @@ -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() {
Expand Down

0 comments on commit 2d95ca1

Please sign in to comment.