Before switching to the new comment rendering script and Markdown, no
special syntax was needed to make URLs clickable. Reintroduce this
feature and automatically detect links in addition to the hyperlink
syntax already supported by Markdown.

Signed-off-by: Lukas Fleischer <[email protected]>
---
 aurweb/scripts/rendercomment.py | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/aurweb/scripts/rendercomment.py b/aurweb/scripts/rendercomment.py
index 7e8a16b..c8921f8 100755
--- a/aurweb/scripts/rendercomment.py
+++ b/aurweb/scripts/rendercomment.py
@@ -1,5 +1,6 @@
 #!/usr/bin/python3
 
+import re
 import sys
 import bleach
 import markdown
@@ -7,6 +8,19 @@ import markdown
 import aurweb.db
 
 
+class LinkifyPreprocessor(markdown.preprocessors.Preprocessor):
+    _urlre = re.compile(r'(\b(?:https?|ftp):\/\/[\w\/\#~:.?+=&%@!\-;,]+?'
+                        r'(?=[.:?\-;,]*(?:[^\w\/\#~:.?+=&%@!\-;,]|$)))')
+
+    def run(self, lines):
+        return [self._urlre.sub(r'<\1>', line) for line in lines]
+
+
+class LinkifyExtension(markdown.extensions.Extension):
+    def extendMarkdown(self, md, md_globals):
+        md.preprocessors.add('linkify', LinkifyPreprocessor(md), '_end')
+
+
 def get_comment(conn, commentid):
     cur = conn.execute('SELECT Comments FROM PackageComments WHERE ID = ?',
                        [commentid])
@@ -24,7 +38,7 @@ def main():
     conn = aurweb.db.Connection()
 
     text = get_comment(conn, commentid)
-    html = markdown.markdown(text, extensions=['nl2br'])
+    html = markdown.markdown(text, extensions=['nl2br', LinkifyExtension()])
     allowed_tags = bleach.sanitizer.ALLOWED_TAGS + ['p', 'br']
     html = bleach.clean(html, tags=allowed_tags)
     save_rendered_comment(conn, commentid, html)
-- 
2.12.2

Reply via email to