Merge commit 'giskard/master'
authorBernie Innocenti <bernie@codewiz.org>
Tue, 23 Mar 2010 00:36:07 +0000 (20:36 -0400)
committerBernie Innocenti <bernie@codewiz.org>
Tue, 23 Mar 2010 00:36:07 +0000 (20:36 -0400)
1  2 
geekigeeki.py

diff --combined geekigeeki.py
index 494118661918794e5726000858eabe9db891023d,624a8c72abd7e6b644fc8762d589334d0f357395..00d74ceddf409a7ec29a2c79e80a5f74ffdb3773
@@@ -25,7 -25,7 +25,7 @@@ video_ext = "ogg|ogv|oga" # Not support
  image_re = re.compile(r".*\.(" + image_ext + "|" +  video_ext + ")$", re.IGNORECASE)
  video_re = re.compile(r".*\.(" + video_ext + ")$", re.IGNORECASE)
  # FIXME: we accept stuff like foo/../bar and we shouldn't
 -file_re  = re.compile(r"([A-Za-z0-9_\-][A-Za-z0-9_\.\-/]*)$")
 +file_re  = re.compile(r"([A-Za-z0-9_\-][A-Za-z0-9_\.\-/ ]*)$")
  url_re   = re.compile(r"[a-z]{3,8}://[^\s'\"]+\S$")
  ext_re   = re.compile(r"\.([^\./]+)$")
  
@@@ -123,7 -123,7 +123,7 @@@ def send_guru(msg_text, msg_type)
      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):
+ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False, mtime=None, navbar="on"):
      global title_done
      if title_done: return
  
      title_done = True
      send_guru(msg_text, msg_type)
  
+     if navbar != "on":
+         return
      # NAVBAR
      print('<nav><div class="nav">')
      print link_tag('FrontPage', config_get('site_icon', 'Home'), cssclass='navlink')
  
  def send_httperror(status="403 Not Found", query=""):
      print("Status: %s" % status)
+     page = Page()
      send_title(None, msg_text=("%s: on query '%s'" % (status, query)))
-     send_footer()
+     page.send_footer()
  
  def link_tag(dest, text=None, privileged=False, **kvargs):
      if text is None:
@@@ -304,7 -308,7 +308,7 @@@ def handle_edit(pagename, form)
          send_httperror("403 Forbidden", pagename)
          return
  
-     pg = Page(form['q'].value)
+     pg  = Page(form['q'].value)
      if 'save' in form:
          if form['file'].value:
              pg.save(form['file'].file.read(), form['changelog'].value)
@@@ -344,16 -348,6 +348,6 @@@ def page_list(dirname=None, search_re=N
          search_re = re.compile(r"^\b((([A-Z][a-z0-9]+){2,}/)*([A-Z][a-z0-9]+){2,})\b$")
      return sorted(filter(search_re.match, os.listdir(dirname or '.')))
  
- def send_footer(mtime=None):
-     if config_get('debug_cgi', False):
-         cgi.print_arguments()
-         cgi.print_form(form)
-         cgi.print_environ()
-     link_inline("sys/footer", kvargs = {
-         'LAST_MODIFIED': strftime(config_get('datetime_fmt', '%a %d %b %Y %I:%M %p'), localtime(mtime))
-     })
-     print("</body></html>")
  def _macro_ELAPSED_TIME(*args, **kvargs):
      return "%03f" % (clock() - start_time)
  
@@@ -556,8 -550,8 +550,8 @@@ class WikiFormatter
              | (?P<glyph> --)
  
              # Links
 -            | (?P<macro> \<\<([^\s\|\>]+)(?:\s*\|\s*([^\>]+)|)\>\>)
 -            | (?P<hurl>  \[\[([^\s\|]+)(?:\s*\|\s*([^\]]+)|)\]\])
 +            | (?P<macro> \<\<[^\>]+\>\>)
 +            | (?P<hurl>  \[\[[^\]]+\]\])
  
              # Inline HTML
              | (?P<html>             <(br|hr|div|span|form|iframe|input|textarea|a|img|h[1-5])\b )
              # Lists, divs, spans and inline objects
              | (?P<li>    ^\s+[\*\#]\s+)
              | (?P<pre>   \{\{\{|\s*\}\}\})
 -            | (?P<inl>   \{\{([^\s\|]+)(?:\s*\|\s*([^\]]+)|)\}\})
 +            | (?P<inl>   \{\{[^\}]+\}\})
  
              # Tables
              | (?P<tr>    ^\s*\|\|(=|)\s*)
          print('</p></div>')
  
  class Page:
-     def __init__(self, page_name):
+     def __init__(self, page_name="Limbo"):
          self.page_name = page_name.rstrip('/');
          self.msg_text = ''
          self.msg_type = 'error'
      def can_read(self):
          return self.can("read", True)
  
+     def send_footer(mtime=None, footer="sys/footer"):
+         if config_get('debug_cgi', False):
+             cgi.print_arguments()
+             cgi.print_form(form)
+             cgi.print_environ()
+         if footer != "off":
+             link_inline(footer, kvargs = {
+                 'LAST_MODIFIED': strftime(config_get('datetime_fmt', '%a %d %b %Y %I:%M %p'), localtime(mtime))
+             })
+         print("</body></html>")
      def send_naked(self, kvargs=None):
          if self.can_read():
              WikiFormatter(self.get_raw_body(), kvargs).print_html()
              link_urls += [ [ "stylesheet", value ] ]
  
          send_title(self.page_name, self.split_title(),
-             msg_text=self.msg_text, msg_type=self.msg_type, writable=self.can_write(), mtime=self._mtime())
+             msg_text=self.msg_text, msg_type=self.msg_type, writable=self.can_write(), mtime=self._mtime(),
+             navbar=self.pragma("navbar", "on"))
          self.send_naked()
-         send_footer(mtime=self._mtime())
+         self.send_footer(mtime=self._mtime(), footer=self.pragma("footer", "sys/footer"))
  
      def send_editor(self, preview=None):
          send_title(None, 'Edit ' + self.split_title(), msg_text=self.msg_text, msg_type=self.msg_type)
              print("<div class='preview'>")
              WikiFormatter(preview).print_html()
              print("</div>")
-         send_footer()
+         self.send_footer()
  
      def send_raw(self, mimetype='text/plain', args=[]):
          if not self.can_read():
@@@ -833,6 -839,6 +839,6 @@@ except Exception
          send_guru(msg_text, "error")
      else:
          send_title(None, msg_text=msg_text)
-     send_footer()
+     Page().send_footer()
  
  sys.stdout.flush()