X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=geekigeeki.py;h=1891fdd8c5842cea4357d5339009ad40f90134d6;hb=ba86d6242b2d2ff713f3db4725adcabbfb9f1cce;hp=d63850fb57b8e55494930871cc8f4f23271b3b5c;hpb=5a2e445da1711b54343334087b760b86935fb876;p=geekigeeki.git diff --git a/geekigeeki.py b/geekigeeki.py index d63850f..1891fdd 100755 --- a/geekigeeki.py +++ b/geekigeeki.py @@ -21,7 +21,7 @@ title_done = False import cgi, sys, os, re, errno, stat, glob image_ext = 'png|gif|jpg|jpeg|bmp|ico' -video_ext = "ogg|ogv|oga" # Not supported by Firefox 3.5: mkv|mpg|mpeg|mp4|avi|asf|flv|wmv|qt +video_ext = "ogg|ogv|oga|webm" # Not supported by Firefox 3.6: mkv|mpg|mpeg|mp4|avi|asf|flv|wmv|qt 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 @@ -107,6 +107,8 @@ def url_args(kvargs): def emit_header(mtime=None, mime_type="text/html"): if mtime: + # Prevent caching when the wiki engine gets updated + mtime = max(mtime, os.stat(__file__).st_mtime) print("Last-Modified: " + strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime(mtime))) if mime_type: print("Content-type: " + mime_type + "; charset=utf-8") @@ -173,7 +175,7 @@ def link_inline(name, descr=None, kvargs={}): def link_inline_glob(pattern, descr=None, kvargs={}): if not url_re.match(pattern) and bool(set(pattern) & set('?*[')): s = '' - for name in glob.glob(pattern): + for name in sorted(glob.glob(pattern), reverse=bool(int(kvargs.get('reverse', '0'))) ): s += link_inline(name, descr, kvargs) return s else: @@ -320,14 +322,19 @@ class WikiFormatter: def _macro_repl(self, word): try: - args, kvargs = parse_args(word) + args, macro_kvargs = parse_args(word) + # Is this a parameter given to the current page? if args[0] in self.kvargs: return self.kvargs[args[0]] + # Is this an internal macro? macro = globals().get('_macro_' + args[0]) if not macro: + # Can we load (and cache) an external macro? exec(open("sys/macros/" + args[0] + ".py").read(), globals()) macro = globals().get('_macro_' + args[0]) - return macro(*args, **kvargs) + # Invoke macro passing both macro args augmented by page args + macro_kvargs.update(self.kvargs) + return macro(*args, **macro_kvargs) except Exception, e: msg = cgi.escape(word) + ": " + cgi.escape(str(e)) if not self.in_html: @@ -642,7 +649,7 @@ class Page: emit_header(self._mtime()) print('\n') print("%s: %s" % (config_get('site_name', "Unconfigured Wiki"), text)) - print(' ') + print(' ') if not name: print(' ') @@ -658,10 +665,8 @@ class Page: print(' ' \ % relative_url('?a=edit&q=' + name, privileged=True)) - history = config_get('history_url') - if history is not None: - print(' ' \ - % relative_url(history + '?a=rss')) + print(' ' \ + % relative_url(name + '?a=atom')) print('') @@ -685,6 +690,7 @@ class Page: else: print(' ' + text + ' ') print(' | ' + link_tag('FindPage', 'Find Page', cssclass='navlink')) + history = config_get('history_url') if history: print(' | Recent Changes') if name: @@ -774,7 +780,8 @@ class Page: if 'maxwidth' in args: import subprocess sys.stdout.flush() - subprocess.check_call(['gm', 'convert', self._filename(), + subprocess.check_call(['convert', self._filename(), + '-auto-orient', '-orient', 'TopLeft', '-scale', args['maxwidth'].value + ' >', '-']) else: body = self.get_raw_body()