Factor out code to generate inline links
[geekigeeki.git] / geekigeeki.py
index 4450aead0d3617848117f6c7ad6098a758b8877d..f3ce1dcb3268d452e29c997c5a698040a15b58cf 100755 (executable)
@@ -3,7 +3,7 @@
 #
 # Copyright 1999, 2000 Martin Pool <mbp@humbug.org.au>
 # Copyright 2002 Gerardo Poggiali
-# Copyright 2007, 2008 Bernie Innocenti <bernie@codewiz.org>
+# Copyright 2007, 2008, 2009 Bernie Innocenti <bernie@codewiz.org>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -151,11 +151,11 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
 
     # Navbar
     print '<div class="nav">'
+    print link_tag('FrontPage', relative_url(site_icon or 'Home'), 'navlink')
     if name:
         print '  <b>' + link_tag('?fullsearch=' + name, text, 'navlink') + '</b> '
     else:
         print '  <b>' + text + '</b> '
-    print ' | ' + link_tag('FrontPage', 'Home', 'navlink')
     print ' | ' + link_tag('FindPage', 'Find Page', 'navlink')
     if 'history_url' in globals():
         print ' | <a href="' + relative_url(history_url) + '" class="navlink">Recent Changes</a>'
@@ -175,7 +175,7 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
 
     user = remote_user()
     if user != 'AnonymousCoward':
-        print ' | <span class="login"><i>logged in as <b>' + cgi.escape(user) + '</b></i></span>'
+        print ' | <span class="login"><i><b>' + link_tag('User/' + user, user) + '</b></i></span>'
 
     print '<hr /></div>'
 
@@ -206,6 +206,13 @@ def link_tag(params, text=None, link_class=None, privileged=False):
 
     return '<a %shref="%s">%s</a>' % (classattr, relative_url(params, privileged=privileged), text)
 
+def link_inline(name, descr=None, args=''):
+    if not descr: descr = name
+    if video_re.match(name):
+        return '<video src="%s">Your browser does not support the HTML5 video tag</video>' % name
+    else:
+        return '<a href="%s"><img border="0" src="%s" alt="%s" /></a>' % (name, name + args, descr)
+
 # Search ---------------------------------------------------
 
 def handle_fullsearch(needle):
@@ -321,14 +328,14 @@ class WikiFormatter:
         self.styles = {
             #wiki   html   enabled?
             "//":  ["em",  False],
-            "''":  ["em",  False],
             "**":  ["b",   False],
-            "'''": ["b",   False],
             "##":  ["tt",  False],
-            "``":  ["tt",  False],
             "__":  ["u",   False],
             "^^":  ["sup", False],
-            ",,":  ["sub", False]
+            ",,":  ["sub", False],
+            "''":  ["em",  False], # LEGACY
+            "'''": ["b",   False], # LEGACY
+            "``":  ["tt",  False], # LEGACY
         }
 
     def _b_repl(self, word):
@@ -379,12 +386,6 @@ class WikiFormatter:
         m = link_re.match(word)
         return link_tag(m.group(1), m.group(2))
 
-    def _url_repl(self, word):
-        return link_tag(word)
-
-    def _word_repl(self, word):
-        return link_tag(word)
-
     def _inl_repl(self, word):
         m = link_re.match(word)
         name = relative_url(m.group(1))
@@ -398,18 +399,11 @@ class WikiFormatter:
                 args = '?' + '&amp;'.join(argv)
 
             # The "extthumb" nonsense works around a limitation of the HTML block model
-            return '<div class="extthumb"><div class="thumb"><a href="%s"><img border="0" src="%s" alt="%s" /></a><div class="caption">%s</div></div></div>' \
-                    % (name, name + args, descr, descr)
-        elif video_re.match(name):
-            return '<video src="%s">Your browser does not support the HTML5 video tag</video>' % name
+            return '<div class="extthumb"><div class="thumb">' \
+                + link_inline(name, descr, args) \
+                + '<div class="caption">' + descr + '</div></div></div>'
         else:
-            return '<a href="%s"><img border="0" src="%s" /></a>' % (name, name)
-
-    def _img_repl(self, word):
-        return self._inl_repl('{{' + word + '}}')
-
-    def _email_repl(self, word):
-        return '<a href="mailto:%s">%s</a>' % (word, word)
+            return link_inline(name, name)
 
     def _html_repl(self, word):
         self.in_html += 1
@@ -426,6 +420,21 @@ class WikiFormatter:
                 '<': '&lt;',
                 '>': '&gt;'}[s]
 
+    def _img_repl(self, word): # LEGACY
+        return self._inl_repl('{{' + word + '}}')
+
+    def _word_repl(self, word): # LEGACY
+        if self.in_html: return word # pass through
+        return link_tag(word)
+
+    def _url_repl(self, word): # LEGACY
+        if self.in_html: return word # pass through
+        return link_tag(word)
+
+    def _email_repl(self, word): # LEGACY
+        if self.in_html: return word # pass through
+        return '<a href="mailto:%s">%s</a>' % (word, word)
+
     def _li_repl(self, match):
         if self.in_li:
             return '</li><li>'