diff options
author | Harrison Healey <harrisonmhealey@gmail.com> | 2016-05-24 10:12:02 -0400 |
---|---|---|
committer | Corey Hulen <corey@hulen.com> | 2016-05-24 07:12:02 -0700 |
commit | 3b5a5110c72d7eb2c94d9f428145383b15bd0e4e (patch) | |
tree | 68fc1cae0a937b1a0cb0217500af19c7ddb10026 | |
parent | 7e2b539de484ac4f2e97eafce6b8d63ffa2caf13 (diff) | |
download | chat-3b5a5110c72d7eb2c94d9f428145383b15bd0e4e.tar.gz chat-3b5a5110c72d7eb2c94d9f428145383b15bd0e4e.tar.bz2 chat-3b5a5110c72d7eb2c94d9f428145383b15bd0e4e.zip |
Revert "Updated our fork of marked and added more links to test-links.md (#3047)" (#3090)
This reverts commit c868620693c69e2931c3023460eaafd9f6d330b6.
-rw-r--r-- | tests/test-links.md | 147 | ||||
-rw-r--r-- | webapp/package.json | 2 | ||||
-rw-r--r-- | webapp/utils/markdown.jsx | 52 |
3 files changed, 112 insertions, 89 deletions
diff --git a/tests/test-links.md b/tests/test-links.md index 5e5d0efae..c9aca446d 100644 --- a/tests/test-links.md +++ b/tests/test-links.md @@ -1,93 +1,70 @@ -# Link Testing +# Link Testing -Links in Mattermosts should render as specified below. +Links in Mattermosts should render as specified below. -#### These strings should auto-link: +#### These strings should auto-link: -http://example.com -https://example.com -www.example.com -www.example.com/index -www.example.com/index.html -www.example.com/index/sub -www.example.com/index?params=1 -www.example.com/index?params=1&other=2 -www.example.com/index?params=1;other=2 -http://example.com:8065 -http://www.example.com/_/page -www.example.com/_/page -https://en.wikipedia.org/wiki/🐬 -https://en.wikipedia.org/wiki/Rendering_(computer_graphics) -http://127.0.0.1 -http://192.168.1.1:4040 -http://[::1]:80 -http://[::1]:8065 -https://[::1]:80 -http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80 -http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:8065 -https://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:443 -http://username:password@example.com -http://username:password@127.0.0.1 -http://username:password@[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80 -test@example.com -http://example.com/more_(than)_one_(parens) -http://example.com/(something)?after=parens -http://foo.com/unicode_(✪)_in_parens -http://✪df.ws/1234 -*https://example.com* -_https://example.com_ -**https://example.com** -__https://example.com__ -***https://example.com*** -___https://example.com___ -<https://example.com> -<https://en.wikipedia.org/wiki/Rendering_(computer_graphics)> -www1.example.com - -#### These strings should not auto-link: - -example.com -readme.md -@example.com -./make-compiled-client.sh -test.:test -https://<your-mattermost-url>/signup/gitlab -`https://example.com` +http://example.com +https://example.com +www.example.com +www.example.com/index +www.example.com/index.html +www.example.com/index/sub +www.example.com/index?params=1 +www.example.com/index?params=1&other=2 +www.example.com/index?params=1;other=2 +http://example.com:8065 +http://www.example.com/_/page +www.example.com/_/page +https://en.wikipedia.org/wiki/🐬 +https://en.wikipedia.org/wiki/Rendering_(computer_graphics) +http://127.0.0.1 +http://192.168.1.1:4040 +http://[::1]:80 +http://[::1]:8065 +https://[::1]:80 +http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80 +http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:8065 +https://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:443 +http://username:password@example.com +http://username:password@127.0.0.1 +http://username:password@[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80 +test@example.com + +#### These strings should not auto-link: + +example.com +readme.md +http:// +@example.com +./make-compiled-client.sh +test.:test +https://<your-mattermost-url>/signup/gitlab #### Only the links within these sentences should auto-link: -(http://example.com) -(see http://example.com) -(http://example.com watch this) -(test@example.com) -This is a sentence with a http://example.com in it. -This is a sentence with a [link](http://example.com) in it. -This is a sentence with a http://example.com/_/underscore in it. -This is a sentence with a link (http://example.com) in it. -This is a sentence with a (https://en.wikipedia.org/wiki/Rendering_(computer_graphics)) in it. -This is a sentence with a http://192.168.1.1:4040 in it. -This is a sentence with a https://[::1]:80 in it. -This is a link to http://example.com. -This is a link containing http://example.com/something?with,commas,in,url, but not at end - -#### These links should auto-link to the specified location: +(http://example.com) +(test@example.com) +This is a sentence with a http://example.com in it. +This is a sentence with a [link](http://example.com) in it. +This is a sentence with a http://example.com/_/underscore in it. +This is a sentence with a link (http://example.com) in it. +This is a sentence with a (https://en.wikipedia.org/wiki/Rendering_(computer_graphics)) in it. +This is a sentence with a http://192.168.1.1:4040 in it. +This is a sentence with a https://[::1]:80 in it. +This is a link to http://example.com. -[example link](example.com) links to `http://example.com` -[example.com](example.com) links to `http://example.com` -[example.com/other](example.com) links to `http://example.com` -[example.com/other_link](example.com/example) links to `http://example.com/example` -www.example.com links to `http://www.example.com` -https://example.com links to `https://example.com` and not `http://example.com` -https://en.wikipedia.org/wiki/🐬 links to the Wikipedia article on dolphins -https://en.wikipedia.org/wiki/URLs#Syntax links to the Syntax section of the Wikipedia article on URLs -test@example.com links to `mailto:test@example.com` -mailto:test@example.com links to `mailto:test@example.com` -[email link](mailto:test@example.com) links to `mailto:test@example.com` and not `http://mailto:test@example.com` -[other link](ts3server://example.com) links to `ts3server://example.com` and not `http://ts3server://example.com` -test_underscore@example.com links to `mailto:test_underscore@example.com` -[link with spaces](example.com/ spaces in the url) links to either `http://example.com/ spaces in the url` or `http://example.com/%20spaces%20in%20the%20url` +#### These links should auto-link to the specified location: -#### These links should have tooltips when you hover over them -[link](example.com "catch phrase!") should have the tooltip `catch phrase!` -[link](example.com "title with "quotes"") should have the tooltip `title with "quotes"` -[link with spaces](example.com/ spaces in the url "and a title") should have the tooltip `and a title`
\ No newline at end of file +[example link](example.com) links to `http://example.com` +[example.com](example.com) links to `http://example.com` +[example.com/other](example.com) links to `http://example.com` +[example.com/other_link](example.com/example) links to `http://example.com/example` +www.example.com links to `http://www.example.com` +https://example.com links to `https://example.com` and not `http://example.com` +https://en.wikipedia.org/wiki/🐬 links to the Wikipedia article on dolphins +https://en.wikipedia.org/wiki/URLs#Syntax links to the Syntax section of the Wikipedia article on URLs +test@example.com links to `mailto:test@example.com` +[email link](mailto:test@example.com) links to `mailto:test@example.com` and not `http://mailto:test@example.com` +[other link](ts3server://example.com) links to `ts3server://example.com` and not `http://ts3server://example.com` +test_underscore@example.com links to `mailto:test_underscore@example.com`
\ No newline at end of file diff --git a/webapp/package.json b/webapp/package.json index df699b773..ccc88c18c 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -16,7 +16,7 @@ "jasny-bootstrap": "3.1.3", "jquery": "2.2.3", "keymirror": "0.1.1", - "marked": "mattermost/marked#43e7e590944ea308a4d36f21917118d51a261e74", + "marked": "mattermost/marked#cb85e5cc81bc7937dbb73c3c53d9532b1b97e3ca", "match-at": "0.1.0", "mattermost": "mattermost/mattermost-javascript#master", "object-assign": "4.1.0", 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]+?(?=[\\<!\[_*`~]|https?:\/\/| {2,}\n|$)/ + this.rules.text = /^[\s\S]+?(?=[\\<!\[_*`~]|https?:\/\/|www\.|\(| {2,}\n|$)/; + + // modified version of the regex that allows links starting with www and those surrounded by parentheses + // the original is /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/ + this.rules.url = /^(\(?(?:https?:\/\/|www\.)[^\s<.][^\s<]*[^<.,:;"'\]\s])/; + + // modified version of the regex that allows <links> 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 + '</a>'; + output += '>' + outText + '</a>'; - 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 |