diff --git a/taiga/mdrender/extensions/mentions.py b/taiga/mdrender/extensions/mentions.py index 4c243910..0664bd94 100644 --- a/taiga/mdrender/extensions/mentions.py +++ b/taiga/mdrender/extensions/mentions.py @@ -25,22 +25,22 @@ from markdown.extensions import Extension from markdown.inlinepatterns import Pattern -from markdown.util import etree +from markdown.util import etree, AtomicString from taiga.users.models import User class MentionsExtension(Extension): def extendMarkdown(self, md, md_globals): - MENTION_RE = r'(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9-]+)' + MENTION_RE = r'(@)([a-z0-9.-\.]+)' mentionsPattern = MentionsPattern(MENTION_RE) mentionsPattern.md = md - md.inlinePatterns.add('mentions', mentionsPattern, '_begin') + md.inlinePatterns.add('mentions', mentionsPattern, '_end') class MentionsPattern(Pattern): def handleMatch(self, m): - username = m.group(2) + username = m.group(3) try: user = User.objects.get(username=username) @@ -49,10 +49,11 @@ class MentionsPattern(Pattern): url = "/profile/{}".format(username) - link_text = "@{}".format(username) + link_text = "@{}".format(username) a = etree.Element('a') - a.text = link_text + a.text = AtomicString(link_text) + a.set('href', url) a.set('title', user.get_full_name()) a.set('class', "mention") diff --git a/tests/integration/test_mdrender.py b/tests/integration/test_mdrender.py index a5e076e8..3735eac2 100644 --- a/tests/integration/test_mdrender.py +++ b/tests/integration/test_mdrender.py @@ -46,3 +46,8 @@ def test_render_and_extract_mentions(): user = factories.UserFactory(username="user1", full_name="test") (_, extracted) = render_and_extract(dummy_project, "**@user1**") assert extracted['mentions'] == [user] + +def test_proccessor_valid_email(): + result = render(dummy_project, "**beta.tester@taiga.io**") + expected_result = "

beta.tester@taiga.io

" + assert result == expected_result