Implement image scaling
authorBernie Innocenti <bernie@codewiz.org>
Tue, 29 Jul 2008 04:48:00 +0000 (10:33 +0545)
committerBernie Innocenti <bernie@codewiz.org>
Tue, 29 Jul 2008 04:48:00 +0000 (10:33 +0545)
geekigeeki.conf.py
geekigeeki.py

index 2b00389fce980aa5decaccd92e1fbd6c18afaa15..eba3843c29478cc35545811f30576254235eb500 100644 (file)
@@ -16,4 +16,5 @@ datetime_fmt = '%a %d %b %Y %I:%M %p'
 allow_edit = True                       # Is it possible to edit pages?
 show_hosts = True                       # show hostnames?
 nonexist_pfx = ''                       # prefix before nonexistent link (usually '?')
+image_maxwidth = 800                    # maximum image width in pixels
 debug_cgi = False                       # Set to True for CGI var dump
index dba75a28afe2493b8cf42f06ac92b5614a630d85..f704da5a4293395b1c86c800c5c0887462f14913 100755 (executable)
@@ -361,11 +361,18 @@ class WikiFormatter:
         name = m.group(1)
         descr = m.group(2) or name
         name = relative_url(name)
+        argv = descr.split('|')
+        descr = argv.pop(0)
+        if argv:
+            args = '?' + '&amp;'.join(argv)
+        else:
+            args = ''
         if descr:
             # The "extthumb" nonsense works around a limitation of the HTML block model
-            return '<div class="extthumb"><div class="thumb"><a href="%s"><img border="0" src="%s" alt="%s" /></a><div class="caption">%s</div></div></div>' % (name, name, descr, descr)
+            return '<div class="extthumb"><div class="thumb"><a href="%s"><img border="0" src="%s" alt="%s" /></a><div class="caption">%s</div></div></div>' \
+                    % (name, name + args, descr, descr)
         else:
-            return '<a href="%s"><img border="0" src="%s" /></a>' % (name, name)
+            return '<a href="%s"><img border="0" src="%s" /></a>' % (name, name + args)
 
     def _email_repl(self, word):
         return '<a href="mailto:%s">%s</a>' % (word, word)
@@ -571,10 +578,18 @@ class Page:
             raise er
 
     def format_dir(self):
-        out = ''
+        out = '== '
+        path = ''
+        for dir in self.page_name.split('/'):
+            path = (path + '/' + dir) if path else dir
+            out += '[[' + path + '|' + dir + ']]/'
+        out += ' ==\n'
         for file in page_list(self._filename(), file_re):
             if img_re.match(file):
-                out += ' * {{' + self.page_name + '/' + file + '}}\n'
+                if image_maxwidth:
+                    maxwidth_arg = '|maxwidth=' + str(image_maxwidth)
+                out += '{{' + self.page_name + '/' + file + '|' + file + maxwidth_arg + '}}\n'
             else:
                 out += ' * [[' + self.page_name + '/' + file + ']]\n'
         return out
@@ -690,6 +705,16 @@ class Page:
         else:
             send_title(None, msg_text='Read access denied by ACLs', msg_type='notice')
 
+    def send_image(self, mimetype, args=[]):
+        if 'maxwidth' in args:
+            import subprocess
+            emit_header(mimetype)
+            sys.stdout.flush()
+            subprocess.check_call(['gm', 'convert', self._filename(),
+                '-scale', args['maxwidth'].value + ' >', '-'])
+        else:
+            self.send_raw(mimetype)
+
     def _write_file(self, data):
         tmp_filename = self._tmp_filename()
         open(tmp_filename, 'wb').write(data)
@@ -752,8 +777,15 @@ try:
             else:
                 from mimetypes import MimeTypes
                 type, encoding = MimeTypes().guess_type(query)
-                type = type or 'text/plain'
-                Page(query).send_raw(mimetype=type)
+                #type = type or 'text/plain'
+                #Page(query).send_raw(mimetype=type)
+                if type:
+                    if type.startswith('image/'):
+                        Page(query).send_image(mimetype=type,args=form)
+                    else:
+                        Page(query).send_raw(mimetype=type)
+                else:
+                    Page(query).format()
         else:
             print "Status: 404 Not Found"
             send_title(None, msg_text='Can\'t work out query: ' + query)