diff --git a/Changelog.md b/Changelog.md index 97b82aeec..1f599fb0b 100644 --- a/Changelog.md +++ b/Changelog.md @@ -25,6 +25,7 @@ * Show hovercards in the notification drop-down for users on the same pod [#4843](https://github.com/diaspora/diaspora/pull/4843) * The photo stream no longer repeats after the last photo [#4726](https://github.com/diaspora/diaspora/issues/4726) * Fix hovercards in the notificaitons dropdown [#4693](https://github.com/diaspora/diaspora/issues/4693) +* Do not parse hashtags inside Markdown links [#3692](https://github.com/diaspora/diaspora/issues/3692) ## Features * You can report a single post by clicking the correct icon in the controler section [#4517](https://github.com/diaspora/diaspora/pull/4517) diff --git a/app/assets/javascripts/app/helpers/text_formatter.js b/app/assets/javascripts/app/helpers/text_formatter.js index 3e122d87a..d5ae68444 100644 --- a/app/assets/javascripts/app/helpers/text_formatter.js +++ b/app/assets/javascripts/app/helpers/text_formatter.js @@ -108,11 +108,15 @@ $(function() { }; textFormatter.hashtagify = function hashtagify(text){ - var utf8WordCharcters =/(\s|^|>)#([\u0080-\uFFFF|\w|-]+|<3)/g - return text.replace(utf8WordCharcters, function(hashtag, preceeder, tagText) { - return preceeder + "#" + tagText + "" - }) + var utf8WordCharcters =/(]*>.*?<\/a>)|(\s|^|>)#([\u0080-\uFFFF|\w|-]+|<3)/g; + + return text.replace(utf8WordCharcters, function(result, linkTag, preceeder, tagText) { + if(linkTag) + return linkTag; + else + return preceeder + "#" + tagText + ""; + }); }; textFormatter.mentionify = function mentionify(text, mentions) { diff --git a/spec/javascripts/app/helpers/text_formatter_spec.js b/spec/javascripts/app/helpers/text_formatter_spec.js index 29aec511e..334321d5a 100644 --- a/spec/javascripts/app/helpers/text_formatter_spec.js +++ b/spec/javascripts/app/helpers/text_formatter_spec.js @@ -238,6 +238,25 @@ describe("app.helpers.textFormatter", function(){ expect(formattedText).toContain("/tags/parties") }) + + it("doesn't create tag if the text is a link", function(){ + var tags = ['diaspora', 'twitter', 'hrabrahabr']; + + var text = $('', { href: 'http://me.co' }).html('#me')[0].outerHTML; + _.each(tags, function(tagName){ + text += ' #'+tagName+','; + }); + text += 'I love'; + + var formattedText = this.formatter.hashtagify(text); + var wrapper = $('
').html(formattedText); + + expect(wrapper.find("a[href='http://me.co']").text()).toContain('#me'); + _.each(tags, function(tagName){ + expect(wrapper.find("a[href='/tags/"+tagName+"']").text()).toContain('#'+tagName); + }); + + }) }) })