Separate images from subdirs in directory listing
[geekigeeki.git] / geekigeeki.py
index e7d7f7d69e63c915c3c3526b5acdcf1307f20733..a5ba6a2d388565ae9ac3f5dff29ca48f8126fb50 100755 (executable)
@@ -120,21 +120,18 @@ def send_guru(msg_text, msg_type):
     print(cgi.escape(msg_text))
     if msg_type == 'error':
         print '\n           Guru Meditation #DEADBEEF.ABADC0DE'
-    print('</pre><script language="JavaScript" type="text/javascript" src="%s" defer="defer"></script>' \
+    print('</pre><script type="text/javascript" src="%s" defer="defer"></script>' \
         % relative_url('sys/GuruMeditation.js'))
 
 def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False, mtime=None):
     global title_done
     if title_done: return
 
-    # Head
+    # HEAD
     emit_header(mtime)
-    print('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"')
-    print('  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">')
-    print('<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">')
-
+    print('<!doctype html>\n<html lang="en">')
     print("<head><title>%s: %s</title>" % (config_get('site_name', "Unconfigured Wiki"), text))
-    print(' <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />')
+    print(' <meta charset="UTF-8">')
     if not name:
         print(' <meta name="robots" content="noindex,nofollow" />')
 
@@ -157,7 +154,7 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
 
     print('</head>')
 
-    # Body
+    # BODY
     if editable:
         print('<body ondblclick="location.href=\'' + relative_url('?a=edit&q=' + name, privileged=True) + '\'">')
     else:
@@ -166,8 +163,8 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
     title_done = True
     send_guru(msg_text, msg_type)
 
-    # Navbar
-    print('<div class="nav">')
+    # NAVBAR
+    print('<nav><div class="nav">')
     print link_tag('FrontPage', config_get('site_icon', 'Home'), cssclass='navlink')
     if name:
         print('  <b>' + link_tag('?fullsearch=' + name, text, cssclass='navlink') + '</b> ')
@@ -194,7 +191,7 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
     if user != 'AnonymousCoward':
         print(' | <span class="login"><i><b>' + link_tag('User/' + user, user) + '</b></i></span>')
 
-    print('<hr /></div>')
+    print('<hr /></div></nav>')
 
 def send_httperror(status="403 Not Found", query=""):
     print("Status: %s" % status)
@@ -205,7 +202,7 @@ def link_tag(dest, text=None, privileged=False, **kvargs):
     if text is None:
         text = humanlink(dest)
     elif image_re.match(text):
-        text = '<img border="0" src="' + relative_url(text) + '" alt="' + text + '" />'
+        text = '<img style="border: 0" src="' + relative_url(text) + '" alt="' + text + '" />'
 
     link_class = kvargs.get('class', kvargs.get('cssclass', None))
     if not link_class:
@@ -388,7 +385,6 @@ class WikiFormatter:
             ",,":  ["sub", False],
             "''":  ["em",  False], # LEGACY
             "'''": ["b",   False], # LEGACY
-            "``":  ["tt",  False], # LEGACY
         }
 
     def _b_repl(self, word):
@@ -552,7 +548,7 @@ class WikiFormatter:
 
         scan_re = re.compile(r"""(?:
             # Styles and formatting ("--" must cling to a word to disambiguate it from the dash)
-              (?P<b>     \*\* | // | \#\# | __ | --\b | \b-- | \^\^ | ,, | ''' | '' | `` )
+              (?P<b>     \*\* | // | \#\# | __ | --\b | \b-- | \^\^ | ,, | ''' | '' )
             | (?P<tit>   \={2,6})
             | (?P<br>    \\\\)
             | (?P<rule>  ^-{3,})
@@ -614,8 +610,8 @@ class WikiFormatter:
                     print('</p><p>')
                 else:
                     indent = indent_re.match(self.line)
-                    #3.0: print(self._indent_to(len(indent.group(0))), end=' ')
                     print(self._indent_to(len(indent.group(1)), indent.group(2)))
+                    # Stand back! Here we apply the monster regex that does all the parsing
                     print(re.sub(scan_re, self.replace, self.line))
 
         if self.in_pre: print('</pre>')
@@ -625,7 +621,7 @@ class WikiFormatter:
 
 class Page:
     def __init__(self, page_name):
-        self.page_name = page_name
+        self.page_name = page_name.rstrip('/');
         self.msg_text = ''
         self.msg_type = 'error'
 
@@ -668,19 +664,20 @@ class Page:
         out = '== '
         pathname = ''
         for dirname in self.page_name.strip('/').split('/'):
-            pathname = (pathname + '/' + dirname) if pathname else dirname
+            pathname = (pathname and pathname + '/' ) + dirname
             out += '[[' + pathname + '|' + dirname + ']]/'
         out += ' ==\n'
+        images_out = '\n'
  
         for filename in page_list(self._filename(), file_re):
             if image_re.match(filename):
                 maxwidth = config_get('image_maxwidth', '400')
                 if maxwidth:
                     maxwidth = ' | maxwidth=' + str(maxwidth)
-                out += '{{' + self.page_name + '/' + filename + ' | ' + humanlink(filename) + maxwidth + ' | class=thumbleft}}\n'
+                images_out += '{{' + self.page_name + '/' + filename + ' | ' + humanlink(filename) + maxwidth + ' | class=thumbleft}}\n'
             else:
                 out += ' * [[' + self.page_name + '/' + filename + ']]\n'
-        return out
+        return out + images_out
 
     def pragmas(self):
         if not '_pragmas' in self.__dict__: