Fixup a few errors in the HTML output
[geekigeeki.git] / geekigeeki.py
index 3eb4c1a32ee7d4de3bcc2008856bc8caeaaa89ba..f6ba26c967419f5c219d98d313bdc19932630883 100755 (executable)
@@ -78,7 +78,7 @@ def relative_url(pathname, privileged=False):
         else:
             url = script_name()
         pathname = url + '/' + pathname
-    return pathname
+    return cgi.escape(pathname, quote=True)
 
 def permalink(s):
     return re.sub(' ', '-', re.sub('[^a-z0-9_ ]', '', s.lower()).strip())
@@ -143,7 +143,7 @@ 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')
+    print link_tag('FrontPage', site_icon or 'Home', 'navlink')
     if name:
         print '  <b>' + link_tag('?fullsearch=' + name, text, 'navlink') + '</b> '
     else:
@@ -180,7 +180,7 @@ def link_tag(params, text=None, link_class=None, privileged=False):
     if text is None:
         text = params # default
     elif img_re.match(text):
-        text = '<img border="0" src="' + text + '" />'
+        text = '<img border="0" src="' + relative_url(text) + '" alt="' + text + '" />'
 
     if not link_class:
         if is_external_url(params):
@@ -403,11 +403,13 @@ class WikiFormatter:
             return link_inline(name, name)
 
     def _html_repl(self, word):
+        if not self.in_html and word.startswith('<div'): word = '</p>' + word
         self.in_html += 1
         return word; # Pass through
 
     def _htmle_repl(self, word):
         self.in_html -= 1
+        if not self.in_html and word.startswith('</div'): word += '<p>'
         return word; # Pass through
 
     def _ent_repl(self, s):