Attachment 'gallery2image-1.3.5-11.py'

Download

   1 # -*- coding: iso-8859-1 -*-
   2 """
   3     MoinMoin - gallery2Image Action macro
   4 
   5     PURPOSE::
   6         This action macro is used to rotate, move to bak or to slide through the images from Gallery2
   7 
   8     CALLING SEQUENCE::
   9         called by Gallery2 POST Method
  10 
  11     PROCEDURE::
  12         see Gallery2
  13 
  14         Please remove the version number from this file
  15 
  16     RESTRICTIONS::
  17         spaces in file names are not supported. I don't know how to escape them right.	Probaly this does work in 1.3.5
  18         
  19         slide show is best used with fastcgi if you have many images
  20 
  21     MODIFICATION HISTORY::
  22         Version 1.3.3.-1
  23         @copyright: 2005 by Reimar Bauer (R.Bauer@fz-juelich.de)
  24         @license: GNU GPL, see COPYING for details.
  25         2005-06-24: 1.3.3.-2 feature reqeust of CraigJohnson added 
  26                              os.path.join used to join platform independent pathes 
  27                              os.unlink removed to get it more platform independend
  28         2005-08-06: 1.3.5-3 RB VS mode added 
  29                                by one step back or forward could be toggled through the selected slides
  30                                and the first and last one could be selected too
  31         2005-08-07 1.3.5-4 RB bug fixed for cgi-bin call. formatting of tables adjusted                    
  32         2005-08-13 1.3.5-5 RB code change from GET to POST
  33                               forms instead of link
  34                               toggle between webnail and image by click on image
  35                               alias (description) and exif_date added
  36                               this version needs Gallery2-1.3.5-7.py
  37         2005-08-31 1.3.5-6 RB html code changed into a function :-)
  38                               some html bugs fixed too
  39                               instead of button text now images used (disabled buttons are grey color coded)
  40                               back link to callers page
  41                               whole page inserted into the common wiki page    
  42                               code clean up.       
  43         2005-09-01 1.3.5-7 RB image paths changed to absoulte url
  44         2005-10-29 1.3.5-8 RB the code of VS rewritten
  45                               for the slideshow changed to a javascript player learned from Ricocheting
  46                               image preloading for webnails and fullimages because webspeed could be slow
  47                               slide show is really fast by this
  48                               default duration is 1000msec
  49                               (runs under 1.5.0 too)
  50         2005-11-01 1.3.5-9 RB output buttons changed to <SPAN id> text 
  51                               to all javascript functions added the prefix gallery2
  52                               some fixes on javascript code
  53                               controls separated.
  54        2005-11-12 1.3.5-10 RB alias text is displayed by innerHTML                       
  55                               bug fixed ' is allowed to use in alias text 
  56                               wish of grey out buttons for first or last slide button added 
  57                               span id's changed to a prefix of gallery2_
  58        2005-11-25 1.3.5-11 RB bug fixed of selecting an index of a scalar value                        
  59                               (It's a python wonder that it has worked this way)
  60                        
  61 
  62 """
  63 Dependencies = []
  64 import os,string,Image,StringIO
  65 from MoinMoin import config, wikiutil, version
  66 from MoinMoin.PageEditor import PageEditor
  67 from MoinMoin import user, util
  68 from MoinMoin.Page import Page
  69 from MoinMoin.action import AttachFile
  70 from MoinMoin.formatter.text_html import Formatter
  71 from MoinMoin.parser import wiki
  72 
  73 
  74 def option_list(this_image,pagename,text,request):
  75     txt = ''
  76    
  77     for s in text:
  78         name = AttachFile.getAttachUrl(pagename,s,request)
  79         if name == this_image:
  80             txt += '<option selected value="%(name)s">%(alias)s' % {
  81                 "name":name,
  82                 "alias":s} 
  83             
  84         else:   
  85             txt += '<option value="%(name)s">%(alias)s' % {
  86                 "name":name,
  87                 "alias":s}
  88                 
  89     return txt
  90     
  91 def to_htmltext(text):        
  92   
  93     if text.find ("'"):   
  94         text = text.split("'")
  95         text = '&#39;'.join(text)
  96        
  97     return text
  98 
  99 def html_js(this_image,counter):    
 100    html = '''
 101 <HEAD>   
 102 <SCRIPT LANGUAGE="JavaScript">
 103 <!-- Original:  Ricocheting (ricocheting@hotmail.com) -->
 104 <!-- Web Site:  http://www.ricocheting.com -->
 105 
 106 <!-- This script and many more are available free online at -->
 107 <!-- The JavaScript Source!! http://javascript.internet.com -->
 108 
 109 <!-- Modifications by Reimar Bauer <R.Bauer@fz-juelich.de> -->
 110 <!-- 2005-10-29 -->
 111 <!-- Many thanks to Ricocheting, it is much easier as my own one. I like it -->
 112 <!-- Some code added and replaced for the MoinMoin:Gallery2 parser-->
 113 
 114 
 115 <!-- Begin 
 116 
 117 var rotate_delay = 1000; // delay in milliseconds (5000 = 5 secs)
 118 var current = %(counter)s;
 119 var theImages = new Array();
 120 var thewebImages =  new Array();
 121 var thefullImages =  new Array();
 122 
 123 function gallery2preload() {
 124    var list = document.slideform.webnail_list.value;
 125    var value = list.split(","); 
 126    var n = value.length;
 127    
 128    for (i = 0; i <  n-1; i++){
 129        theImages[i] = new Image();
 130        theImages[i].src = value[i];
 131    }   
 132    thewebImages = theImages;
 133    
 134    var list = document.slideform.full_list.value;
 135    var value = list.split(","); 
 136    var n = value.length;
 137    
 138    for (i = 0; i <  n-1; i++){
 139        thefullImages[i] = new Image();
 140        thefullImages[i].src = value[i];
 141    }
 142   
 143 } 
 144 
 145 function gallery2getserver() {
 146      var value = document.URL;
 147      var text = value.split("/");
 148      return text[0]+'//'+text[2];
 149 }     
 150 
 151 function gallery2preload_finished() {
 152     var url = gallery2getserver()+'/wiki/modern/img/star_on.png';
 153     return url;
 154 }
 155 
 156 function gallery2add_comments() {
 157   var alias_text = document.slideform.alias.value;
 158   var exif_date_text = document.slideform.exif_date.value;
 159   var index = document.slideform.slide.selectedIndex;
 160   var alias = alias_text.split("!,!");
 161   var exif = exif_date_text.split(",");
 162   document.getElementById("gallery2_alias_text").innerHTML = alias[index];
 163   document.getElementById("gallery2_exif_date_text").innerHTML = exif[index];
 164 }
 165 
 166 function gallery2next_slide() {
 167    if (document.slideform.slide[current+1]) {
 168       document.images.show.src = theImages[current+1].src;
 169       document.slideform.slide.selectedIndex = ++current;
 170       gallery2add_comments();
 171    }
 172    else gallery2first_slide();
 173    document.getElementById("gallery2_first_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/first.png" onclick="gallery2first_slide();" name="fs"  title="first slide" >';
 174    document.getElementById("gallery2_last_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/last.png" onclick="gallery2last_slide();" name="fs"  title="last slide" >';
 175 }
 176 function gallery2previous_slide() {
 177    if (current-1 >= 0) {
 178       document.images.show.src = theImages[current-1].src;  
 179       document.slideform.slide.selectedIndex = --current;
 180       gallery2add_comments(); 
 181      
 182    }
 183    else gallery2last_slide();
 184    
 185    document.getElementById("gallery2_first_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/first.png" onclick="gallery2first_slide();" name="fs"  title="first slide" >';
 186    document.getElementById("gallery2_last_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/last.png" onclick="gallery2last_slide();" name="fs"  title="last slide" >';
 187 }
 188 function gallery2first_slide() {
 189    current = 0;
 190    document.images.show.src = theImages[0].src;  
 191    document.slideform.slide.selectedIndex = 0;
 192    gallery2add_comments();
 193    document.getElementById("gallery2_first_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/first_disabled.png" title="first slide" >';
 194    document.getElementById("gallery2_last_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/last.png" onclick="gallery2last_slide();" name="fs"  title="last slide" >';
 195 }
 196 function gallery2last_slide() {
 197    current = document.slideform.slide.length-1;
 198    document.images.show.src = theImages[current].src; 
 199    document.slideform.slide.selectedIndex = current;
 200    gallery2add_comments();
 201    document.getElementById("gallery2_first_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/first.png" onclick="gallery2first_slide();" name="fs"  title="first slide" >';
 202    document.getElementById("gallery2_last_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/last_disabled.png"  title="last slide" >';
 203 }
 204 
 205 function gallery2switch_images() {
 206    if (document.slideform.flag.value == "webnail") {
 207       var list = document.slideform.full_list.value;
 208       var name = document.slideform.full_name.value;
 209       document.slideform.flag.value = "fullscreen";
 210       theImages = thefullImages;
 211    } else {
 212      var list = document.slideform.webnail_list.value;
 213      var name = document.slideform.webnail_name.value;
 214      document.slideform.flag.value = "webnail";
 215      theImages = thewebImages;
 216    }
 217 
 218    var value = list.split(",");
 219    var alias = name.split(",");
 220 
 221    var n = value.length;
 222 
 223    for (i = 0; i <  n-1; i++){
 224       document.slideform.slide[i].value=value[i];
 225       document.slideform.slide[i].text=alias[i];
 226    }
 227    document.images.show.src = theImages[current].src; 
 228 }
 229 
 230 function gallery2ap(text) {
 231    document.slideform.slidebutton.value = (text == "Stop") ? "Start" : "Stop";
 232    gallery2rotate();
 233 }
 234 
 235 function gallery2change() {
 236    current = document.slideform.slide.selectedIndex;
 237    document.images.show.src = theImages[current].src; 
 238    gallery2add_comments(); 
 239    document.getElementById("gallery2_first_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/first.png" onclick="gallery2first_slide();" name="fs"  title="first slide" >';
 240    document.getElementById("gallery2_last_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/last.png" onclick="gallery2last_slide();" name="fs"  title="last slide" >';
 241 }
 242 
 243 function gallery2rotate() {
 244    if (document.slideform.slidebutton.value == "Stop") {
 245       current = (current == document.slideform.slide.length-1) ? 0 : current+1;
 246       document.images.show.src = theImages[current].src; 
 247       document.slideform.slide.selectedIndex = current;
 248       gallery2add_comments(); 
 249       document.getElementById("gallery2_first_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/first.png" onclick="gallery2first_slide();" name="fs"  title="first slide" >';
 250       document.getElementById("gallery2_last_slide").innerHTML = '<img src="'+gallery2getserver()+'/wiki/modern/img/last.png" onclick="gallery2last_slide();" name="fs"  title="last slide" >';
 251       rotate_delay = document.slideform.duration.value;
 252       window.setTimeout("gallery2rotate()", rotate_delay);
 253    }
 254 }
 255 //  End -->
 256 </script> 
 257 </HEAD>   '''% { 
 258   'counter':counter} 
 259 
 260    return html  
 261 
 262 def html_show_image(request,pagename,url_wiki_page,full,alias,exif_date,target,idx):
 263    
 264     option_webnail = option_list(AttachFile.getAttachUrl(pagename,target[idx],request),pagename,target,request)
 265     
 266     this_full_list = ''
 267     for s in full:
 268         this_full_list += AttachFile.getAttachUrl(pagename,s,request)+','
 269         
 270     this_webnail_list = ''    
 271     for s in target:
 272         this_webnail_list += AttachFile.getAttachUrl(pagename,s,request)+','
 273         
 274     html = '''
 275 <body  onLoad="gallery2preload();">   
 276 
 277 
 278 <left>
 279 <form name=slideform method="POST">
 280    <input type="hidden" name="full_list" value='%(this_full_list)s'>
 281    <input type="hidden" name="full_name" value='%(this_full_name)s'>
 282    <input type="hidden" name="flag" value="webnail">
 283    <input type="hidden" name="webnail_list" value='%(this_webnail_list)s'>
 284    <input type="hidden" name="webnail_name" value='%(this_webnail_name)s'>
 285    <input type="hidden" name="alias" value='%(this_alias_list)s'>
 286    <input type="hidden" name="exif_date" value='%(this_exif_date_list)s'>
 287    <BR>
 288    <table><tr><td bgcolor="#C0C0C0"><strong>Slide: </strong></td>
 289    <td bgcolor="#C0C0C0">
 290       <select name="slide" onChange="gallery2change();" >
 291         %(option_webnails)s
 292       </select>
 293    </td>
 294    <td bgcolor="#C0C0C0">
 295    <input type="button" name="slidebutton" onClick="gallery2ap(this.value);" value="Start" title="AutoPlay">
 296    </td>
 297    <td bgcolor="#C0C0C0">
 298    <strong>Duration: </strong>
 299    </td>
 300    <td bgcolor="#C0C0C0">
 301    <input type="input" name="duration"  value="1000" size="5" title="Duration">
 302    </td>
 303    <td bgcolor="#C0C0C0" align="left" >  
 304    <P><SPAN id="gallery2_preloadstatus"></SPAN></P>  
 305    </td>
 306 
 307    </tr>
 308    </table>
 309    <BR>  
 310    <table align="center" cellspacing=1 cellpadding=4 bgcolor="#000000">
 311    <tr>
 312       <td align="center" bgcolor="white">
 313       </td>
 314    </tr>
 315    <tr>
 316       
 317       <td align="center" bgcolor="#C0C0C0">
 318          <SPAN id="gallery2_first_slide"><img src="%(server)s/wiki/modern/img/first.png" onclick="gallery2first_slide();" name="fs"  title="first slide" ></SPAN>
 319          <img src="%(server)s/wiki/modern/img/previous.png" onclick="gallery2previous_slide();"  title="previous slide" >
 320          <img src="%(server)s/wiki/modern/img/next.png" onClick="gallery2next_slide();"  title="next slide" >
 321          <SPAN id="gallery2_last_slide"><img src="%(server)s/wiki/modern/img/last.png" onClick="gallery2last_slide();"  title="last slide" ></SPAN>
 322          <input type="image" value="submit" src="%(server)s/wiki/modern/img/back.png" title="return to %(pagename)s">
 323       </td>
 324    </tr>
 325    <tr>
 326       <td align="center" bgcolor="white"">
 327          <img src="%(this_image)s" name="show" onClick="gallery2switch_images();">
 328       </td>
 329   </tr>
 330   <tr valign="center">
 331      <td bgcolor="#C0C0C0" align="left">
 332      <P><SPAN id="gallery2_alias_text">%(this_alias_text)s</SPAN></P>
 333      </td></tr>
 334    <tr valign="center">
 335      <td bgcolor="#C0C0C0" align="left">  
 336      <P><SPAN id="gallery2_exif_date_text">%(this_exif_date_text)s</SPAN></P>
 337      </td>
 338   </tr>
 339   <tr>
 340       <td align="center" bgcolor="white">
 341       </td>
 342    </tr>
 343   </table>
 344   <BR>  
 345   <table>
 346   <tr>
 347    <td bgcolor="#C0C0C0" align="left" >  
 348    <P><SPAN id="gallery2_status">%(comment)s</SPAN></P>  
 349    </td>
 350    </tr>
 351    </table>
 352 </form>
 353 </center>
 354 ''' % {
 355 "server" : 'http://'+request.server_name+':' + str(request.server_port), 
 356 "base_url" : request.getScriptname(),
 357 
 358 "this_full_list" : this_full_list,
 359 "this_full_name" : string.join(full,','),
 360 "this_webnail_list" : this_webnail_list,
 361 "this_webnail_name" : string.join(target,','),
 362 
 363 "this_alias_text": to_htmltext(alias[idx]),
 364 "this_alias_list" :  to_htmltext(string.join(alias,'!,!')),
 365 "this_exif_date_text": exif_date[idx],
 366 "this_exif_date_list" :string.join(exif_date,','),
 367 
 368 "this_image" : AttachFile.getAttachUrl(pagename,target[idx],request),
 369 "url_wiki_page" : url_wiki_page,
 370 "comment" : "Click on the image for the next higher/lower resolution",
 371 "pagename" : pagename,
 372 "option_webnails" : option_webnail
 373 }
 374 
 375     return html
 376 
 377 def to_wikiname(request,text):
 378 
 379     #taken from test_parser_wiki
 380     page = Page(request, 'ThisPageDoesNotExistsAndWillNeverBeReally')
 381     page.formatter = Formatter(request)
 382     request.formatter = page.formatter
 383     page.formatter.setPage(page)
 384     page.hilite_re = None
 385     
 386     out=StringIO.StringIO()
 387     request.redirect(out)
 388     wikiizer = wiki.Parser(text.strip(),request)
 389     wikiizer.format(page.formatter)
 390     result = out.getvalue()
 391     request.redirect()
 392     del out
 393     
 394     if version.release < '1.5.0' :
 395        return result.strip()
 396     else:
 397        result = result.strip()
 398        result = result.replace('<a id="line-1"></a><p>','')  
 399        result = result.replace('</p>','') 
 400        return result
 401 
 402 
 403 action_name = __name__.split('.')[-1]
 404 
 405 def execute(pagename, request):
 406     """ Main dispatcher for the 'Gallery' action.
 407     """
 408     _ = request.getText
 409     
 410     request.formatter = Formatter(request)
 411     attachment_path = AttachFile.getAttachDir(request,pagename)
 412     if request.form['do'][0] == 'VS' :
 413         web = {}
 414         images = string.split(request.form['target'][0],',')
 415         target = images[0]
 416         images = (images[1:])
 417         
 418         full_image = string.split(request.form['full'][0],',')
 419         full_target = full_image[0]
 420         full_image = (full_image[1:])
 421         
 422         all_description = string.split(request.form['alias'][0],'!,!')
 423         this_description = all_description[0]
 424         all_description = (all_description[1:])
 425         
 426         
 427         #until javascript miracle of expanded childs is solved this is not used
 428         #i = 0
 429         #for txt in all_description:
 430         #    all_description[i] = to_wikiname(request,txt)
 431         #    i += 1
 432         
 433         all_exif_date = string.split(request.form['exif_date'][0],',')
 434         this_exif_date = all_exif_date[0]
 435         all_exif_date = (all_exif_date[1:])
 436         
 437         z = 0
 438         for img in images :
 439             if target == img :
 440                idx = z
 441       
 442             z += 1
 443         n = len(images)
 444 
 445         ######## url_wiki_page #############################################################
 446         text = pagename
 447         url = pagename
 448         url_wiki_page = wikiutil.link_tag(request, url, text = text,
 449                                           formatter = request.formatter)   
 450                                         
 451         ############################################################################			 
 452 
 453         attachment_path = AttachFile.getAttachDir(request,pagename)
 454 
 455         web['src'] = AttachFile.getAttachUrl(pagename,target,request)
 456         web['title'] = target
 457         #web['width']="1024"
 458 
 459         image_link=request.formatter.image(**web)
 460        
 461         request.http_headers()
 462         
 463         request.setContentLanguage(request.lang)
 464         
 465         wikiutil.send_title(request, pagename,
 466                             pagename=pagename)
 467         request.write(html_js(AttachFile.getAttachUrl(pagename,target,request),idx))               
 468         request.write(request.formatter.startContent("content"))
 469        
 470         html = html_show_image(request,pagename,url_wiki_page,full_image,all_description,all_exif_date,images,idx)
 471         
 472         request.write(html)
 473         request.write(request.formatter.endContent())
 474         wikiutil.send_footer(request, pagename)
 475         msg = None
 476        
 477         
 478     elif request.form['do'][0] == 'PS' :
 479         msg = None
 480         
 481     elif request.form['do'][0] == 'BS' :
 482         msg = "gone back" #None
 483         
 484     elif request.user.may.delete(pagename):
 485        # only users which are allowed to delete should use this tool
 486 
 487         target=request.form['target'][0]
 488         file, ext = os.path.splitext(target)
 489 
 490         if ext == '.gif'  or  ext == '.png' :
 491             img_type = 'PNG'
 492             thumbfile = "thumbnail_%(file)s.png" % {"file" : file}
 493             webnail = "webnail_%(file)s.png" % {"file" : file}
 494         else:
 495             img_type="JPEG"
 496             thumbfile="thumbnail_%(file)s.jpg"  % {"file" : file}
 497             webnail="webnail_%(file)s.jpg"  % {"file" : file}
 498  
 499         thumb = os.path.join(attachment_path,thumbfile)
 500         webf = os.path.join(attachment_path,webnail)
 501         infile = os.path.join(attachment_path,target)
 502 
 503         msg = None
 504         if version.release < '1.5.0' :
 505             if action_name in request.cfg.excluded_actions:
 506                 msg = _('File attachments are not allowed in this wiki!')
 507 
 508         elif request.form['do'][0] == 'RM' :
 509             if os.path.exists(infile + '.bak') :
 510                os.unlink("%(file)s.bak" % {"file" : infile})
 511             os.link(infile,"%(file)s.bak" % {"file" : infile})
 512             os.unlink(infile)
 513             os.unlink(webf)
 514             os.unlink(thumb)
 515             msg = _('%(target)s deleted, backup in place' % {
 516                   'target':target})
 517 
 518         elif request.form['do'][0] == 'RL' :
 519             im = Image.open(infile)
 520             #os.unlink(infile)
 521             im.rotate(90).save(infile,img_type)
 522             nim = Image.open(infile)
 523             nim.thumbnail((640,640), Image.ANTIALIAS)
 524             #os.unlink(webf)
 525             nim.save(webf, img_type)
 526             nim.thumbnail((128, 128), Image.ANTIALIAS)
 527             #os.unlink(thumb)
 528             nim.save(thumb, img_type)
 529             msg= _('%(target)s rotated to left 90 degrees' % {
 530                   'target':target})
 531 
 532         elif request.form['do'][0] == 'RR' :
 533             im = Image.open(infile)
 534             #os.unlink(infile)
 535             im.rotate(270).save(infile,img_type)
 536             
 537             nim = Image.open(infile)
 538             nim.thumbnail((640,640), Image.ANTIALIAS)
 539             #os.unlink(webf)
 540             nim.save(webf, img_type)
 541             nim.thumbnail((128, 128), Image.ANTIALIAS)
 542             #os.unlink(thumb)
 543             nim.save(thumb, img_type)
 544             msg= _('%(target)s rotated to right 90 degrees' % {
 545                   'target':target})
 546              
 547         else:
 548             msg = _('action not implemented: %s') % (request.form['do'][0],)
 549     else:
 550         msg = _('Your are not allowed to change images on this page: %s') % (pagename,)
 551       
 552     if msg:
 553         AttachFile.error_msg(pagename, request, msg)
 554 
 555     return()

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2011-04-14 07:28:03, 4.7 KB) [[attachment:CreateNewPage.py]]
  • [get | view] (2011-04-14 07:26:24, 4.2 KB) [[attachment:CreateNewPage1.6.py]]
  • [get | view] (2006-09-10 21:29:29, 40.4 KB) [[attachment:CreatePdfDocument2_0_3.py]]
  • [get | view] (2006-09-12 06:05:06, 40.5 KB) [[attachment:CreatePdfDocument2_0_4.py]]
  • [get | view] (2006-09-12 12:00:09, 40.6 KB) [[attachment:CreatePdfDocument2_0_5.py]]
  • [get | view] (2006-11-14 21:56:11, 43.5 KB) [[attachment:CreatePdfDocument2_0_6.py]]
  • [get | view] (2006-11-15 17:00:47, 43.8 KB) [[attachment:CreatePdfDocument2_0_7.py]]
  • [get | view] (2006-11-16 22:06:18, 43.8 KB) [[attachment:CreatePdfDocument2_0_8.py]]
  • [get | view] (2006-12-17 15:54:21, 43.6 KB) [[attachment:CreatePdfDocument2_0_9.py]]
  • [get | view] (2007-08-20 09:10:23, 67.2 KB) [[attachment:CreatePdfDocument2_1_0.py]]
  • [get | view] (2007-08-21 07:39:49, 67.1 KB) [[attachment:CreatePdfDocument2_1_1.py]]
  • [get | view] (2007-09-11 19:16:37, 67.3 KB) [[attachment:CreatePdfDocument2_1_2.py]]
  • [get | view] (2007-09-18 20:17:58, 68.1 KB) [[attachment:CreatePdfDocument2_1_3.py]]
  • [get | view] (2007-09-21 13:32:54, 71.1 KB) [[attachment:CreatePdfDocument2_1_4.py]]
  • [get | view] (2007-09-23 20:56:30, 73.4 KB) [[attachment:CreatePdfDocument2_1_5.py]]
  • [get | view] (2007-09-25 20:54:48, 74.5 KB) [[attachment:CreatePdfDocument2_2_0.py]]
  • [get | view] (2008-06-23 21:08:49, 77.0 KB) [[attachment:CreatePdfDocument2_3_0.py]]
  • [get | view] (2008-06-26 19:25:07, 81.0 KB) [[attachment:CreatePdfDocument2_3_1.py]]
  • [get | view] (2008-07-06 05:50:38, 83.1 KB) [[attachment:CreatePdfDocument2_3_2.py]]
  • [get | view] (2008-07-09 17:42:02, 83.3 KB) [[attachment:CreatePdfDocument2_3_3.py]]
  • [get | view] (2008-09-07 11:11:01, 83.5 KB) [[attachment:CreatePdfDocument2_3_4.py]]
  • [get | view] (2009-01-11 15:53:09, 84.3 KB) [[attachment:CreatePdfDocument2_3_5.py]]
  • [get | view] (2009-02-16 06:52:06, 84.2 KB) [[attachment:CreatePdfDocument2_3_6.py]]
  • [get | view] (2010-01-29 11:53:21, 82.8 KB) [[attachment:CreatePdfDocument2_4_0.py]]
  • [get | view] (2010-01-31 14:10:03, 84.6 KB) [[attachment:CreatePdfDocument2_4_1.py]]
  • [get | view] (2010-09-18 16:23:23, 85.6 KB) [[attachment:CreatePdfDocument2_4_2.py]]
  • [get | view] (2006-06-16 20:56:53, 4.9 KB) [[attachment:FlashManager.py-1.5.3-1]]
  • [get | view] (2003-12-07 18:15:53, 3.9 KB) [[attachment:HTML2MoinMoin.py]]
  • [get | view] (2005-10-16 08:24:35, 4.9 KB) [[attachment:HelpOn-1.3.5-4.py]]
  • [get | view] (2006-02-03 19:21:04, 4.9 KB) [[attachment:HelpOn-1.5.1-5.py]]
  • [get | view] (2006-07-04 10:45:22, 4.8 KB) [[attachment:HelpOn-1.5.4-6.py]]
  • [get | view] (2006-07-04 22:39:14, 4.8 KB) [[attachment:HelpOn-1.6.0-7.py]]
  • [get | view] (2006-07-06 13:50:17, 4.0 KB) [[attachment:HelpOn-1.6.0-8.py]]
  • [get | view] (2008-01-10 17:43:24, 4.8 KB) [[attachment:HelpOn-1.6.0-9.py]]
  • [get | view] (2008-08-19 14:44:54, 5.0 KB) [[attachment:HelpOn-1.7.1-10.py]]
  • [get | view] (2005-02-20 18:28:34, 10.8 KB) [[attachment:IRSS.py]]
  • [get | view] (2005-03-09 22:46:23, 2.9 KB) [[attachment:ImportHtml-1.2.py]]
  • [get | view] (2003-12-07 18:15:53, 2.8 KB) [[attachment:ImportHtml.py]]
  • [get | view] (2003-12-07 18:15:53, 1.8 KB) [[attachment:IrcChat.py]]
  • [get | view] (2008-06-09 11:27:20, 4.4 KB) [[attachment:MoinCrypt.py]]
  • [get | view] (2010-11-29 12:08:27, 7.5 KB) [[attachment:PageActions.py]]
  • [get | view] (2006-08-07 15:12:19, 0.5 KB) [[attachment:PermanentLink.py]]
  • [get | view] (2003-12-07 18:15:53, 6.3 KB) [[attachment:PhoneDial.py]]
  • [get | view] (2005-04-17 14:21:47, 3.6 KB) [[attachment:RecommendPage-1.3.4-1.py]]
  • [get | view] (2005-04-19 18:21:52, 5.5 KB) [[attachment:RecommendPage-1.3.4-2.py]]
  • [get | view] (2005-05-02 19:53:09, 5.6 KB) [[attachment:RecommendPage-1.3.4-3.py]]
  • [get | view] (2005-09-03 07:33:35, 6.3 KB) [[attachment:RecommendPage-1.3.4-4.py]]
  • [get | view] (2005-09-05 17:44:03, 6.9 KB) [[attachment:RecommendPage-1.3.5-5.py]]
  • [get | view] (2005-09-07 16:42:26, 7.5 KB) [[attachment:RecommendPage-1.3.5-6.py]]
  • [get | view] (2005-09-08 16:06:28, 7.7 KB) [[attachment:RecommendPage-1.3.5-7.py]]
  • [get | view] (2005-11-01 11:31:51, 9.0 KB) [[attachment:RecommendPage-1.3.5-8.py]]
  • [get | view] (2006-02-03 19:40:51, 8.3 KB) [[attachment:RecommendPage-1.5.1-9.py]]
  • [get | view] (2008-01-11 09:14:35, 6.8 KB) [[attachment:RecommendPage-1.6.0-10.py]]
  • [get | view] (2008-08-19 14:44:59, 6.9 KB) [[attachment:RecommendPage-1.7.1-11.py]]
  • [get | view] (2008-06-09 11:27:40, 1.7 KB) [[attachment:ShowActions.py]]
  • [get | view] (2008-06-09 10:34:02, 5.3 KB) [[attachment:ShowDecrypted.py]]
  • [get | view] (2005-03-30 21:17:28, 7.7 KB) [[attachment:Slideshow.py]]
  • [get | view] (2004-02-02 20:48:31, 2.0 KB) [[attachment:SubscribeUser.py]]
  • [get | view] (2007-01-26 17:08:30, 2.2 KB) [[attachment:Subscribers-1.6.0.py]]
  • [get | view] (2003-12-07 18:15:53, 1.8 KB) [[attachment:Subscribers.py]]
  • [get | view] (2006-03-18 23:16:51, 0.8 KB) [[attachment:UserPreferences.py]]
  • [get | view] (2004-01-05 09:56:25, 8.1 KB) [[attachment:VisualSiteMap.py]]
  • [get | view] (2015-08-30 21:04:23, 11.1 KB) [[attachment:VisualSiteMap_1.10.py]]
  • [get | view] (2004-10-08 10:59:16, 9.3 KB) [[attachment:VisualSiteMap_1.2.py]]
  • [get | view] (2005-03-16 01:30:09, 9.8 KB) [[attachment:VisualSiteMap_1.3.py]]
  • [get | view] (2014-08-19 01:34:10, 10.8 KB) [[attachment:VisualSiteMap_1.9.py]]
  • [get | view] (2007-08-18 18:52:55, 1.0 KB) [[attachment:backlink.py]]
  • [get | view] (2007-03-15 05:53:49, 23.5 KB) [[attachment:findandreplace0.1Beta.py]]
  • [get | view] (2005-03-27 20:32:10, 3.6 KB) [[attachment:gallery2image-1.3.3-1.py]]
  • [get | view] (2005-08-03 20:14:56, 4.0 KB) [[attachment:gallery2image-1.3.3-2.py]]
  • [get | view] (2005-11-13 18:10:26, 20.7 KB) [[attachment:gallery2image-1.3.5-10.py]]
  • [get | view] (2005-11-25 22:03:50, 20.8 KB) [[attachment:gallery2image-1.3.5-11.py]]
  • [get | view] (2005-08-08 17:23:43, 8.4 KB) [[attachment:gallery2image-1.3.5-4.py]]
  • [get | view] (2005-08-13 15:15:45, 13.7 KB) [[attachment:gallery2image-1.3.5-5.py]]
  • [get | view] (2005-08-31 22:05:22, 15.5 KB) [[attachment:gallery2image-1.3.5-6.py]]
  • [get | view] (2005-10-29 20:23:50, 15.9 KB) [[attachment:gallery2image-1.3.5-8.py]]
  • [get | view] (2005-11-01 11:31:24, 17.6 KB) [[attachment:gallery2image-1.3.5-9.py]]
  • [get | view] (2006-01-27 20:52:32, 20.9 KB) [[attachment:gallery2image-1.5.1-12.py]]
  • [get | view] (2006-08-06 09:01:01, 22.1 KB) [[attachment:gallery2image-1.5.4-13.py]]
  • [get | view] (2006-08-11 18:21:40, 22.2 KB) [[attachment:gallery2image-1.5.4-14.py]]
  • [get | view] (2006-11-16 20:23:27, 22.6 KB) [[attachment:gallery2image-1.5.6-16.py]]
  • [get | view] (2006-08-11 18:30:22, 22.2 KB) [[attachment:gallery2image-1.6.0-15.py]]
  • [get | view] (2008-02-06 10:13:45, 22.3 KB) [[attachment:gallery2image-1.6.0-16.py]]
  • [get | view] (2008-05-20 15:51:09, 22.4 KB) [[attachment:gallery2image-1.6.3-17.py]]
  • [get | view] (2006-09-06 06:19:48, 1.3 KB) [[attachment:getmmap.py]]
  • [get | view] (2004-07-18 09:48:00, 1.5 KB) [[attachment:localnames.py]]
  • [get | view] (2005-03-25 15:02:31, 2.6 KB) [[attachment:newpageonly.py]]
  • [get | view] (2005-03-30 09:02:00, 3.5 KB) [[attachment:newpageonly_20050330.py]]
  • [get | view] (2006-06-06 19:12:27, 9.7 KB) [[attachment:pdf.py]]
  • [get | view] (2006-08-30 10:51:51, 36.0 KB) [[attachment:pdf2_0_0.py]]
  • [get | view] (2006-08-30 13:57:36, 36.5 KB) [[attachment:pdf2_0_1.py]]
  • [get | view] (2006-02-04 04:25:29, 1.0 KB) [[attachment:sisterindex.py]]
  • [get | view] (2004-10-28 07:33:10, 0.7 KB) [[attachment:xml.py]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.