]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/backend/wiki.py
wiki: Add support for relative links
[ipfire.org.git] / src / backend / wiki.py
index ab98b9a370424d55829c3a8b8c9aaba75619fea8..723836726dc83915528c49d13cf4d0d9c33f096b 100644 (file)
@@ -305,19 +305,26 @@ class Page(misc.Object):
 
                # Add wiki links
                patterns = (
-                       (r"\[\[([\w\d\/]+)(?:\|([\w\d\s]+))\]\]", r"/\1", r"\2", None, None),
-                       (r"\[\[([\w\d\/\-]+)\]\]", r"/\1", r"\1", self.backend.wiki.get_page_title, r"\1"),
+                       (r"\[\[([\w\d\/]+)(?:\|([\w\d\s]+))\]\]", r"/\1", r"\2", None),
+                       (r"\[\[([\w\d\/\-\.]+)\]\]", r"\1", r"\1", self.backend.wiki.get_page_title),
                )
 
-               for pattern, link, title, repl, args in patterns:
+               for pattern, link, title, repl 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)
+
+                               # Normalise links
+                               l = os.path.normpath(l)
+
                                if callable(repl):
-                                       t = repl(match.expand(args)) or t
+                                       t = repl(l) or t
 
                                replacements.append((match.span(), t or l, l))