Rafał Pitoń 8 лет назад
Родитель
Сommit
9ce4f4e7e2
3 измененных файлов с 24 добавлено и 6 удалено
  1. 4 4
      misago/markup/finalise.py
  2. 4 2
      misago/markup/mentions.py
  3. 16 0
      misago/markup/tests/test_mentions.py

+ 4 - 4
misago/markup/finalise.py

@@ -6,7 +6,7 @@ from django.utils.translation import gettext as _
 
 
 HEADER_RE = re.compile(r'''
-<header>(?P<author>.*?)</header>
+<header>(?P<title>.*?)</header>
 '''.strip(), re.IGNORECASE | re.MULTILINE | re.DOTALL);
 
 
@@ -15,9 +15,9 @@ def finalise_markup(post):
 
 
 def replace_headers(matchobj):
-    author = matchobj.group('author')
-    if author:
-        quote_title = _("%(author)s has written:") % {'author': author}
+    title = matchobj.group('title')
+    if title:
+        quote_title = _("%(title)s has written:") % {'title': title}
     else:
         quote_title = _("Quoted message:")
     return '<header>{}</header>'.format(quote_title)

+ 4 - 2
misago/markup/mentions.py

@@ -19,10 +19,12 @@ def add_mentions(request, result):
 
     soup = BeautifulSoup(result['parsed_text'], 'html5lib')
 
+    elements = []
     for tagname in SUPPORTED_TAGS:
         if tagname in result['parsed_text']:
-            for element in soup.find_all(tagname):
-                add_mentions_to_element(request, element, mentions_dict)
+            elements += soup.find_all(tagname)
+    for element in elements:
+        add_mentions_to_element(request, element, mentions_dict)
 
     result['parsed_text'] = six.text_type(soup.body)[6:-7].strip()
     result['mentions'] = list(filter(bool, mentions_dict.values()))

+ 16 - 0
misago/markup/tests/test_mentions.py

@@ -77,3 +77,19 @@ class MentionsTests(AuthenticatedUserTestCase):
         add_mentions(MockRequest(self.user), result)
         self.assertEqual(result['parsed_text'], after)
         self.assertEqual(result['mentions'], [self.user])
+
+    def test_repeated_mention(self):
+        """markup extension handles mentions across document"""
+        before = '<p>Hello @{0}</p><p>@{0}, how is it going?</p>'.format(self.user.username)
+
+        formats = (self.user.get_absolute_url(), self.user.username)
+        after = '<p>Hello <a href="{0}">@{1}</a></p><p><a href="{0}">@{1}</a>, how is it going?</p>'.format(*formats)
+
+        result = {
+            'parsed_text': before,
+            'mentions': []
+        }
+
+        add_mentions(MockRequest(self.user), result)
+        self.assertEqual(result['parsed_text'], after)
+        self.assertEqual(result['mentions'], [self.user])