Attachment 'gallery2image-1.3.5-8.py'

Download

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