From 3b5a5110c72d7eb2c94d9f428145383b15bd0e4e Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Tue, 24 May 2016 10:12:02 -0400 Subject: Revert "Updated our fork of marked and added more links to test-links.md (#3047)" (#3090) This reverts commit c868620693c69e2931c3023460eaafd9f6d330b6. --- webapp/utils/markdown.jsx | 52 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) (limited to 'webapp/utils') diff --git a/webapp/utils/markdown.jsx b/webapp/utils/markdown.jsx index 69b18faee..2ddd3fe11 100644 --- a/webapp/utils/markdown.jsx +++ b/webapp/utils/markdown.jsx @@ -13,6 +13,40 @@ function markdownImageLoaded(image) { } window.markdownImageLoaded = markdownImageLoaded; +class MattermostInlineLexer extends marked.InlineLexer { + constructor(links, options) { + super(links, options); + + this.rules = Object.assign({}, this.rules); + + // modified version of the regex that allows for links starting with www and those surrounded by parentheses + // the original is /^[\s\S]+?(?=[\\ starting with www. + // the original is /^<([^ >]+(@|:\/)[^ >]+)>/ + this.rules.autolink = /^<((?:[^ >]+(@|:\/)|www\.)[^ >]+)>/; + } +} + +class MattermostParser extends marked.Parser { + parse(src) { + this.inline = new MattermostInlineLexer(src.links, this.options, this.renderer); + this.tokens = src.reverse(); + + var out = ''; + while (this.next()) { + out += this.tok(); + } + + return out; + } +} + class MattermostMarkdownRenderer extends marked.Renderer { constructor(options, formattingOptions = {}) { super(options); @@ -75,6 +109,18 @@ class MattermostMarkdownRenderer extends marked.Renderer { link(href, title, text) { let outHref = href; + let outText = text; + let prefix = ''; + let suffix = ''; + + // some links like https://en.wikipedia.org/wiki/Rendering_(computer_graphics) contain brackets + // and we try our best to differentiate those from ones just wrapped in brackets when autolinking + if (outHref.startsWith('(') && outHref.endsWith(')') && text === outHref) { + prefix = '('; + suffix = ')'; + outText = text.substring(1, text.length - 1); + outHref = outHref.substring(1, outHref.length - 1); + } try { const unescaped = decodeURIComponent(unescape(href)).replace(/[^\w:]/g, '').toLowerCase(); @@ -103,9 +149,9 @@ class MattermostMarkdownRenderer extends marked.Renderer { output += ' title="' + title + '"'; } - output += '>' + text + ''; + output += '>' + outText + ''; - return output; + return prefix + output + suffix; } paragraph(text) { @@ -440,7 +486,7 @@ export function format(text, options) { const tokens = new MattermostLexer(markdownOptions).lex(text); - return new marked.Parser(markdownOptions).parse(tokens); + return new MattermostParser(markdownOptions).parse(tokens); } // Marked helper functions that should probably just be exported -- cgit v1.2.3-1-g7c22