]> git.ipfire.org Git - ipfire.org.git/commitdiff
wiki: Handle external links
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 7 May 2019 21:01:41 +0000 (22:01 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 7 May 2019 21:01:41 +0000 (22:01 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/wiki.py

index fc46927f06211bb23153c6212c8f6cb688fe6098..c445529d86f7880115fc1e063f583162e0dc2b27 100644 (file)
@@ -204,6 +204,9 @@ class Wiki(misc.Object):
 
 
 class Page(misc.Object):
+       # External links
+       external_link = re.compile(r"\[\[((?:ftp|git|https?|rsync|sftp|ssh|webcal)\:\/\/.+?)(?:\|(.+?))\]\]")
+
        # Interwiki links e.g. [[wp>IPFire]]
        interwiki_link = re.compile(r"\[\[(\w+)>(.+?)(?:\|(.+?))?\]\]")
 
@@ -276,6 +279,11 @@ class Page(misc.Object):
                if self.data.author_uid:
                        return self.backend.accounts.get_by_uid(self.data.author_uid)
 
+       def _render_external_link(self, m):
+               url, alias = m.groups()
+
+               return """<a class="link-external" href="%s">%s</a>""" % (url, alias or url)
+
        def _render_interwiki_link(self, m):
                wiki = m.group(1)
                if not wiki:
@@ -352,15 +360,14 @@ class Page(misc.Object):
                # Handle interwiki links
                text = self.interwiki_link.sub(self._render_interwiki_link, text)
 
+               # Handle external links
+               text = self.external_link.sub(self._render_external_link, text)
+
                # Add wiki links
                patterns = (
                        (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),