]> git.ipfire.org Git - ipfire.org.git/commitdiff
wiki: Handle external links and email addresses
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 27 Apr 2019 13:41:20 +0000 (14:41 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 27 Apr 2019 13:41:20 +0000 (14:41 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/wiki.py

index 2761f38e35ffdd7f6bed6f377872c9a26dfdbcdc..d6f9db9ce076f7443d5e939ff66e9d58a303c55b 100644 (file)
@@ -289,23 +289,32 @@ class Page(misc.Object):
 
                # Add wiki links
                patterns = (
-                       (r"\[\[([\w\d\/\-\.]+)(?:\|([\w\d\s]+))\]\]", r"\1", r"\2", None),
-                       (r"\[\[([\w\d\/\-\.]+)\]\]", r"\1", r"\1", self.backend.wiki.get_page_title),
+                       (r"\[\[([\w\d\/\-\.]+)(?:\|(.+?))\]\]", r"\1", r"\2", None, True),
+                       (r"\[\[([\w\d\/\-\.]+)\]\]", r"\1", r"\1", self.backend.wiki.get_page_title, True),
+
+                       # External links
+                       (r"\[\[((?:ftp|git|https?|rsync|sftp|ssh|webcal)\:\/\/.+?)(?:\|(.+?))\]\]",
+                               r"\1", r"\2", None, False),
+
+                       # Mail
+                       (r"\[\[([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)\]\]",
+                               r"\1", r"\1", None, False),
                )
 
-               for pattern, link, title, repl in patterns:
+               for pattern, link, title, repl, internal in patterns:
                        replacements = []
 
                        for match in re.finditer(pattern, text):
                                l = match.expand(link)
                                t = match.expand(title)
 
-                               # Allow relative links
-                               if not l.startswith("/"):
-                                       l = os.path.join(self.page, l)
+                               if internal:
+                                       # Allow relative links
+                                       if not l.startswith("/"):
+                                               l = os.path.join(self.page, l)
 
-                               # Normalise links
-                               l = os.path.normpath(l)
+                                       # Normalise links
+                                       l = os.path.normpath(l)
 
                                if callable(repl):
                                        t = repl(l) or t