Fixup a few errors in the HTML output
[geekigeeki.git] / geekigeeki.py
index 321beccac88b0cd15a72b7e61e3901cde0fb4ba8..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())
@@ -97,7 +97,7 @@ def send_guru(msg_text, msg_type):
         print '\n           Guru Meditation #DEADBEEF.ABADC0DE'
     print '</pre>'
     print '<script language="JavaScript" type="text/javascript" src="%s" defer="defer"></script>' \
-        % relative_url('GuruMeditation.js')
+        % relative_url('sys/GuruMeditation.js')
 
 def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False):
     global title_done
@@ -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):
@@ -287,9 +287,10 @@ def handle_edit(pagename):
             text = form['savetext'].value
         pg.send_editor(text)
 
+# Used by macros/WordIndex and macros/TitleIndex
 def make_index_key():
     links = map(lambda ch: '<a href="#%s">%s</a>' % (ch, ch), 'abcdefghijklmnopqrstuvwxyz')
-    return '<p><center>'+ ' | '.join(links) + '</center></p>'
+    return '<p style="text-align: center">'+ ' | '.join(links) + '</p>'
 
 def page_list(dirname = None, re = word_re):
     return sorted(filter(re.match, os.listdir(dirname or data_dir)))
@@ -402,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):