Logo crans dans portail
darcs-hash:20070619163134-f46e9-8d59fb055a91dadcb05e38647d278245579755d3.gz
This commit is contained in:
parent
7fc6ae6c70
commit
72d767e47f
3 changed files with 121 additions and 2067 deletions
1277
wiki/parser/EXIF.py
1277
wiki/parser/EXIF.py
File diff suppressed because it is too large
Load diff
|
@ -1,890 +0,0 @@
|
|||
# -*- coding: iso-8859-1 -*-
|
||||
"""
|
||||
MoinMoin - Gallery2 parser
|
||||
|
||||
PURPOSE:
|
||||
This parser is used to visualize a couple of images as a thumbnail gallery.
|
||||
Optional a description of an image could be added including WikiName.
|
||||
On default the image name and it's creation date is shown.
|
||||
If you click on a thumbnail you get the webnails shown. By a menue you are able to toggle between the slides.
|
||||
|
||||
CALLING SEQUENCE:
|
||||
{{{
|
||||
#!Gallery2 [columns=columns],[filter=filter],[mode=mode],
|
||||
[show_text=show_text],[show_date=show_date], [show_tools=show_tools],
|
||||
[sort_by_name=sort_by_name],[sort_by_date=sort_by_date], [sort_by_alias=sort_by_alias],
|
||||
[reverse_sort=reverse_sort],
|
||||
[only_items=only_items],[template_itemlist=template_itemlist],
|
||||
[album=album],[album_name=album_name],[front_image=front_image],
|
||||
[thumbnail_width=thumbnail_width],[webnail_width=webnail_width],[text_width=text_width],
|
||||
[image_for_webnail=image_for_webnail],
|
||||
[border_thick=border_thick],[renew=renew],[help=help]
|
||||
* [image1.jpg alias]
|
||||
* [image2.jpg alias]
|
||||
}}}
|
||||
|
||||
KEYWORD PARAMETERS:
|
||||
columns: number of columns for thumbnails
|
||||
filter: regex to select images
|
||||
show_text: default is 1 description is shown
|
||||
any other means no description
|
||||
show_date: default is 1 date info from exif header if available is shown
|
||||
show_tools: default is 1 icon toolbar is show any other disables this
|
||||
sort_by_name: default is 1, the images are sorted by name, but not if only_items is 1
|
||||
sort_by_date: default is 0, if set to 1 the images are sorted to the modification time
|
||||
sort_by_alias default is 0, if set to 1 and only_items set to 1 it is used to order the images by the alias name
|
||||
reverse_sort: default is 0, if set to 1 the file list is reversed
|
||||
any other means no description
|
||||
mode: default is 1 this means description below the image
|
||||
any other number means description right of image
|
||||
only_items: default is 0 if it is set to 1 only images which are described in listitem are shown
|
||||
dependend on the order of the items
|
||||
template_itemlist: default is 0, if set to 1 an item list is shown which could be copied into the script.
|
||||
album: default is 0 if set to 1 only the first image of a series is shown but slideshow over all images
|
||||
album_name: useful for album. default is 'album' use it as short name for the album.
|
||||
front_image: Useful for album. default is ''. The first image is shown in front of the album and slideshow.
|
||||
If set to an existing image name this is shown in front of album and slideshow.
|
||||
The slide show could start by this somewhere.
|
||||
border_thick: default is 1 this is the thickness in pixeln of the outer frame
|
||||
renew: default is 0 if set to 1 then all selected thumbnails_* and webnails_* removed.
|
||||
Afterwards they are new created.
|
||||
thumbnail_width: default is 128
|
||||
webnail_width: default is 640
|
||||
text_width: default is 140
|
||||
image_for_webnail default is 0 if set to 1 then the image is shown as preview and not the webnail
|
||||
help: default is 0 if set a copy of the CALLING SEQUENCE is shown,
|
||||
(there are some new ideas around to show help to an user so this will be later replaced)
|
||||
|
||||
OPTIONAL INPUTS:
|
||||
itemlist : if it is used and only_items is 1 then only the images in this list are ahown.
|
||||
The alias text is used as description of the image instead of the file name
|
||||
|
||||
|
||||
EXAMPLE:
|
||||
= GalleryTest =
|
||||
|
||||
== all images shown, one is decribed ==
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
}}}
|
||||
|
||||
== only thumbnails and only_items ==
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2 show_text=0,show_tools=0,show_date=0,columns=2,only_items=1
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
* [100_1194.JPG Bremen]
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2 show_text=0,show_tools=0,show_date=0,columns=2,only_items=1
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
* [100_1194.JPG Bremen]
|
||||
}}}
|
||||
|
||||
== only_items by two columns and text right ==
|
||||
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2 mode=2,columns=2,only_items=1
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
* [100_1194.JPG Bremen]
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2 mode=2,columns=2,only_items=1
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
* [100_1194.JPG Bremen, behind SpaceCenter]
|
||||
}}}
|
||||
|
||||
----
|
||||
|
||||
== only_items by two columns, date supressed ==
|
||||
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2 columns=2,only_items=1,show_date=0
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
* [100_1194.JPG Bremen, behind SpaceCenter]
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2 columns=2,only_items=1,show_date=0
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
* [100_1194.JPG Bremen, behind SpaceCenter]
|
||||
}}}
|
||||
|
||||
|
||||
== filter regex used, mode 2, icons and date supressed, one column and border_thick=5 ==
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2 columns=1,filter=100_118[0-5],mode=2,show_date=0,show_tools=0,border_thick=5
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2 columns=1,filter=100_118[0-7],mode=2,show_date=0,show_tools=0,border_thick=5
|
||||
}}}
|
||||
|
||||
== other macro calls ==
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2 only_items=1,show_date=0
|
||||
* [100_1189.JPG [[MiniPage(||Bremen||SpaceCenter||\n|| ||SpaceJump||)]]]
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2 only_items=1,show_date=0
|
||||
* [100_1189.JPG [[MiniPage(||Bremen||SpaceCenter||\n|| ||SpaceJump||)]]]
|
||||
}}}
|
||||
|
||||
== renew means always new thumbnails and webnails of selection ==
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2 only_items=1,show_date=0,show_tools=0,renew=1
|
||||
* [100_1189.JPG [[MiniPage(||["Bremen"]||SpaceCenter||\n|| ||SpaceJump||)]]]
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2 only_items=1,show_date=0,renew=1
|
||||
* [100_1189.JPG [[MiniPage(||["Bremen"]||SpaceCenter||\n|| ||SpaceJump||)]]]
|
||||
}}}
|
||||
|
||||
== template_itemlist ==
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2 template_itemlist=1
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2 template_itemlist=1
|
||||
* [100_1185.JPG Bremen, SpaceCenter]
|
||||
}}}
|
||||
|
||||
== help to show Calling Sequence ==
|
||||
{{{
|
||||
{ { {
|
||||
#!Gallery2 help=1
|
||||
} } }
|
||||
}}}
|
||||
|
||||
Result: [[BR]]
|
||||
{{{
|
||||
#!Gallery2 help=1
|
||||
}}}
|
||||
|
||||
|
||||
PROCEDURE:
|
||||
Download some images to a page and start with the examples.
|
||||
Aliasing of the filenames are done by adding an itemlist, see example.
|
||||
|
||||
This routine requires the PIL (Python Imaging Library).
|
||||
And the EXIF routine from http://home.cfl.rr.com/genecash/digital_camera.html
|
||||
|
||||
|
||||
At the moment I have added the EXIF routine to the parsers dir.
|
||||
It's not the best place but during developing it is nice to have it there
|
||||
If you put it to another place you have to change the line
|
||||
from MoinMoin.parser import EXIF too.
|
||||
|
||||
This routine requires the Action macro gallery2Image which is used to rotate or delete a selected image.
|
||||
Only users which have the rights to delete are able to execute this action macro.
|
||||
The icons of these are only shown if you have enough rights.
|
||||
|
||||
The gallery2image macro does not take care on the EXIF header. This is lost by rotating.
|
||||
If a file is deleted by this macro it is moved to a bak file.
|
||||
|
||||
Please remove the Version number from the code!
|
||||
|
||||
RESTRICTIONS:
|
||||
The movie mode is not implemented at the moment. The implementation will be done in the action macro.
|
||||
|
||||
|
||||
If you rotate an image at the moment the exif is destroyed. PIL ignores the exif header.
|
||||
This is not a quite big problem normally files with an EXIF header are right rotated.
|
||||
|
||||
Required Images:
|
||||
I have put them to wiki/modern/img/ dir. The icons were created by me. License: GPL
|
||||
|
||||
attachment:to_bak.png
|
||||
attachment:to_left.png
|
||||
attachment:to_right.png
|
||||
attachment:to_slide.png
|
||||
attachment:to_full.png
|
||||
|
||||
HISTORY:
|
||||
While recognizing how to write MiniPage I got the idea to write a Gallery Parser.
|
||||
We have used in our wikis in the past the Gallery macro of SimonRyan.
|
||||
I have tried to modify it a bit to change it for 1.3 but my python skills weren't enough
|
||||
or it was easier to write it completly new.
|
||||
So this one shows now a way how a Gallery could be used by the parser and an action Macro.
|
||||
Probably it is a good example for others who like to know how to do this
|
||||
|
||||
MODIFICATION HISTORY:
|
||||
Version 1.3.3.-1
|
||||
@copyright: 2005 by Reimar Bauer (R.Bauer@fz-juelich.de)
|
||||
@license: GNU GPL, see COPYING for details.
|
||||
2005-03-26: Version 1.3.3-2 keyword renew added
|
||||
creation of thumbnails and webnails in two calls splitted
|
||||
Version 1.3.3-3 bug fixed if itemlist is given to describe only some of the images
|
||||
but only_items is not set to 1
|
||||
Example code changed
|
||||
2005-03-27: Version 1.3.3-4 Action macro added and the form to call it. User which have rights to delete
|
||||
could use the functions of gallery2Image.
|
||||
2005-08-03: Version 1.3.3-5 theme path for icons corrected and a platform independent path joining
|
||||
os.unlink removed as suggested by CraigJohnson
|
||||
sort_by_name is default if not only_items is 1
|
||||
optional sort_by_date could be used
|
||||
keyword template_itemlist added
|
||||
keyword help added
|
||||
extra frame by mode=2 removed
|
||||
2005-08-06: Version 1.3.5-6 slideshow mode added
|
||||
keyword image_for_webnail added
|
||||
2005-08-13: Version 1.3.5-7 syntax changed from GET to POST
|
||||
forms instead of links
|
||||
filenames from images submitted to gallery2image too
|
||||
new keyword sort_by_alias
|
||||
internal code clean up
|
||||
this version needs: gallery2image-1.3.5-5.py
|
||||
2005-08-14: Version 1.3.5-8 (TW) cleanup
|
||||
2005-08-14: Version 1.3.5-9 html code for tables changed
|
||||
because of the ugly extra space of form elements
|
||||
</div> tag removed so now we use the page style
|
||||
slide show action goes to right webnail now
|
||||
this version needs: gallery2image-1.3.5-5.py
|
||||
2005-08-17: Version 1.3.5-10 html code separated in functions
|
||||
structure of code changed, now you see the thumbnails after creation
|
||||
bug removed if quote is given but file does not exist
|
||||
2005-09-02: Version 1.3.5-11 keyword album, album_name and front_image added
|
||||
image urls changed to complete server url
|
||||
|
||||
|
||||
"""
|
||||
Dependencies = []
|
||||
from MoinMoin.action import AttachFile
|
||||
from MoinMoin import wikiutil, config
|
||||
from MoinMoin.Page import Page
|
||||
|
||||
import os,string,re,Image,StringIO
|
||||
|
||||
#from MoinMoin.parser import EXIF
|
||||
import EXIF
|
||||
|
||||
from MoinMoin.parser import wiki
|
||||
|
||||
def show_tools_restricted(pagename,this_target,thumbnail_width,full,alias,target,exif_date,request):
|
||||
if request.user.may.delete(pagename):
|
||||
return tools_restricted_html(pagename,this_target,thumbnail_width,full,alias,target,exif_date,request)
|
||||
else:
|
||||
return ''
|
||||
|
||||
def tools_restricted_html(pagename,this_target,thumbnail_width,full,alias,target,exif_date,request):
|
||||
text='''
|
||||
<form action="%(baseurl)s/%(pagename)s" method="POST" enctype="multipart/form-data">
|
||||
<td>
|
||||
<input type="hidden" name="action" value="gallery2image">
|
||||
<input type="hidden" name="do" value="RL">
|
||||
<input type="hidden" name="target" value="%(this_target)s">
|
||||
<input type="image" value="submit" src="%(server)s/wiki/modern/img/to_left.png" title="rotate to left">
|
||||
</td>
|
||||
</form>
|
||||
<form action="%(baseurl)s/%(pagename)s" method="POST" enctype="multipart/form-data">
|
||||
<td>
|
||||
<input type="hidden" name="action" value="gallery2image">
|
||||
<input type="hidden" name="do" value="RR">
|
||||
<input type="hidden" name="target" value="%(this_target)s">
|
||||
<input type="image" value="submit" src="%(server)s/wiki/modern/img/to_right.png" title="rotate to right" >
|
||||
</td>
|
||||
</form>
|
||||
<form action="%(baseurl)s/%(pagename)s" method="POST" enctype="multipart/form-data">
|
||||
<td>
|
||||
<input type="hidden" name="action" value="gallery2image">
|
||||
<input type="hidden" name="do" value="RM">
|
||||
<input type="hidden" name="target" value="%(this_target)s">
|
||||
<input type="image" value="submit" src="%(server)s/wiki/modern/img/to_bak.png" title="move to bak" >
|
||||
</td>
|
||||
</form>''' % {
|
||||
"server" : 'https://'+request.server_name,
|
||||
'baseurl': request.getScriptname(),
|
||||
"pagename":pagename,
|
||||
"this_target":this_target}
|
||||
return text
|
||||
|
||||
def tools_html(pagename,this_image,thumbnail_width,full,alias,target,exif_date,request):
|
||||
text='''
|
||||
<TABLE align="center" width="%(thumbnail_width)s">
|
||||
<TR>
|
||||
<form action="%(baseurl)s/%(pagename)s" method="POST" enctype="multipart/form-data">
|
||||
<td>
|
||||
<input type="hidden" name="action" value="AttachFile">
|
||||
<input type="hidden" name="do" value="get">
|
||||
<input type="hidden" name="target" value="%(this_target)s">
|
||||
<input type="image" value="submit" src="%(server)s/wiki/modern/img/to_full.png" title="load image">
|
||||
</td>
|
||||
</form>
|
||||
<form action="%(baseurl)s/%(pagename)s" method="POST" enctype="multipart/form-data">
|
||||
<td>
|
||||
<input type="hidden" name="action" value="gallery2image">
|
||||
<input type="hidden" name="do" value="VS">
|
||||
<input type="hidden" name="full" value="%(full)s">
|
||||
<input type="hidden" name="alias" value="%(alias)s">
|
||||
<input type="hidden" name="target" value="%(target)s">
|
||||
<input type="hidden" name="exif_date" value="%(exif_date)s">
|
||||
<input type="image" value="submit" src="%(server)s/wiki/modern/img/to_slide.png" title="slide_show" >
|
||||
</td>
|
||||
</form>
|
||||
%(show_tools_restricted)s
|
||||
</TR>
|
||||
</TABLE>''' % {
|
||||
"server" : 'https://'+request.server_name,
|
||||
'baseurl': request.getScriptname(),
|
||||
"pagename":pagename,
|
||||
"thumbnail_width":thumbnail_width,
|
||||
"full":full,
|
||||
"alias":alias,
|
||||
"exif_date":exif_date,
|
||||
"target":target,
|
||||
"this_target":this_image,
|
||||
"show_tools_restricted":show_tools_restricted(pagename,this_image,thumbnail_width,full,alias,target,exif_date,request)
|
||||
}
|
||||
|
||||
return text
|
||||
|
||||
def show_alias_mode2(show_alias,thumbnail_width,this_alias,text_width):
|
||||
if show_alias == '1':
|
||||
return '''
|
||||
<td valign="top" width="%(text_width)s">
|
||||
%(this_alias)s
|
||||
</td>''' % {
|
||||
"this_alias":this_alias,
|
||||
"text_width":text_width}
|
||||
else:
|
||||
return ''
|
||||
|
||||
def show_date_mode2(show_date,this_exif_date):
|
||||
if show_date == '1':
|
||||
return '''
|
||||
<td>
|
||||
<p>%(this_exif_date)s</p>
|
||||
</td>''' % {
|
||||
"this_exif_date":this_exif_date }
|
||||
else:
|
||||
return '';
|
||||
|
||||
def show_tools_mode2(show_tools,pagename,this_target,thumbnail_width,full,alias,target,exif_date,request):
|
||||
if show_tools == '1' :
|
||||
return "<td align=""center""> %s </td>" % tools_html(pagename,this_target,thumbnail_width,full,alias,target,exif_date,request)
|
||||
else:
|
||||
return ''
|
||||
|
||||
|
||||
|
||||
def mode2_html(pagename,border_thick,width,thumbnail_width,text_width,full,this_image,alias,this_alias,exif_date,this_exif_date,target,this_target,submit,show_tools,show_date,show_alias,request):
|
||||
text='''
|
||||
<tr valign="center">
|
||||
<form action="%(baseurl)s/%(pagename)s" method="POST" enctype="multipart/form-data">
|
||||
<td align="center" valign="center" width="%(thumbnail_width)s">
|
||||
<input type="hidden" name="action" value="gallery2image">
|
||||
<input type="hidden" name="do" value="VS">
|
||||
<input type="hidden" name="full" value="%(full)s">
|
||||
<input type="hidden" name="alias" value="%(alias)s">
|
||||
<input type="hidden" name="exif_date" value="%(exif_date)s">
|
||||
<input type="hidden" name="target" value="%(target)s">
|
||||
<input type="image" value="submit" src="%(server)s%(submit)s">
|
||||
</td>
|
||||
</form>
|
||||
%(alias_html)s
|
||||
</tr>
|
||||
<tr>%(tools_html)s%(date_html)s</tr>'''% {
|
||||
"server" : 'https://'+request.server_name,
|
||||
"baseurl": request.getScriptname(),
|
||||
"pagename":pagename,
|
||||
"thumbnail_width":thumbnail_width,
|
||||
"full":full,
|
||||
"alias":alias,
|
||||
"exif_date":exif_date,
|
||||
"target":target,
|
||||
"submit":submit,
|
||||
"tools_html":show_tools_mode2(show_tools,pagename,this_image,thumbnail_width,full,alias,target,exif_date,request),
|
||||
"date_html": show_date_mode2(show_date,this_exif_date),
|
||||
"alias_html": show_alias_mode2(show_alias,thumbnail_width,this_alias,text_width)
|
||||
}
|
||||
|
||||
return text
|
||||
|
||||
def show_tools_mode1(show_tools,pagename,this_image,thumbnail_width,full,alias,target,exif_date,request):
|
||||
if show_tools == '1' :
|
||||
text="<tr><td align=""center"">%s </td></tr>" % tools_html(pagename,this_image,thumbnail_width,full,alias,target,exif_date,request)
|
||||
else:
|
||||
text=''
|
||||
return text
|
||||
|
||||
def show_date_mode1(show_date,this_exif_date):
|
||||
if show_date == '1':
|
||||
return '''
|
||||
<TR>
|
||||
<td>%(this_exif_date)s</td>
|
||||
</TR>''' % {
|
||||
"this_exif_date":this_exif_date}
|
||||
else:
|
||||
return ''
|
||||
|
||||
def show_alias_mode1(show_alias,thumbnail_width,this_alias,text_width):
|
||||
if show_alias == '1':
|
||||
return '''
|
||||
<TR>
|
||||
<td align="left" width="%(thumbnail_width)s"> %(this_alias)s</td>
|
||||
</TR>''' % {
|
||||
"thumbnail_width": thumbnail_width,
|
||||
"this_alias":this_alias}
|
||||
else:
|
||||
return ''
|
||||
|
||||
def mode1_html(pagename,border_thick,width,thumbnail_width,text_width,full,this_image,alias,this_alias,exif_date,this_exif_date,target,this_target,submit,
|
||||
show_tools,show_date,show_alias,request):
|
||||
text='''
|
||||
<table width="%(thumbnail_width)s" align="center" valign="center">
|
||||
<TR align="center" valign="center">
|
||||
<form action="%(baseurl)s/%(pagename)s" method="POST" enctype="multipart/form-data">
|
||||
<td align="center" valign="middle" width="%(thumbnail_width)s">
|
||||
<input type="hidden" name="action" value="gallery2image">
|
||||
<input type="hidden" name="do" value="VS">
|
||||
<input type="hidden" name="full" value="%(full)s">
|
||||
<input type="hidden" name="alias" value="%(alias)s">
|
||||
<input type="hidden" name="exif_date" value="%(exif_date)s">
|
||||
<input type="hidden" name="target" value="%(target)s">
|
||||
<input type="image" value="submit" src="%(server)s%(submit)s" >
|
||||
</td>
|
||||
</form>
|
||||
</TR>
|
||||
%(alias_html)s
|
||||
%(date_html)s
|
||||
%(tools_html)s
|
||||
</table>'''% {
|
||||
"server" : 'https://'+request.server_name,
|
||||
"baseurl": request.getScriptname() ,
|
||||
"pagename":pagename,
|
||||
"full":full,
|
||||
"alias":alias,
|
||||
"exif_date":exif_date,
|
||||
"target":target,
|
||||
"submit":submit,
|
||||
"thumbnail_width":thumbnail_width,
|
||||
"tools_html": show_tools_mode1(show_tools,pagename,this_image,thumbnail_width,full,alias,target,exif_date,request),
|
||||
"date_html":show_date_mode1(show_date,this_exif_date),
|
||||
"alias_html": show_alias_mode1(show_alias,thumbnail_width,this_alias,text_width)
|
||||
}
|
||||
|
||||
return text
|
||||
|
||||
def get_files(kw,path,files,quotes,request):
|
||||
web=[]
|
||||
full=[]
|
||||
thumb=[]
|
||||
exif_date=[]
|
||||
img_type=[]
|
||||
description=[]
|
||||
|
||||
|
||||
ddict={}
|
||||
n=len(quotes['image'])
|
||||
if n > 0 :
|
||||
i = 0
|
||||
for txt in quotes['image']:
|
||||
ddict[txt]=quotes['alias'][i]
|
||||
i += 1
|
||||
|
||||
for attfile in files:
|
||||
# only files not thumb or webnails
|
||||
if attfile.find('thumbnail_') == -1 and attfile.find('webnail_') == -1:
|
||||
# only images
|
||||
if wikiutil.isPicture(attfile):
|
||||
description.append(ddict.get(attfile, attfile))
|
||||
full.append(attfile)
|
||||
|
||||
if kw['image_for_webnail'] == '1':
|
||||
webnail = attfile
|
||||
else:
|
||||
fname, ext = os.path.splitext(attfile)
|
||||
if ext in ('.gif', '.png'):
|
||||
img_type.append('PNG')
|
||||
webnail = 'webnail_%s.png' % fname
|
||||
thumbfile = 'thumbnail_%s.png' % fname
|
||||
else:
|
||||
img_type.append("JPEG")
|
||||
webnail = 'webnail_%s.jpg' % fname
|
||||
thumbfile = 'thumbnail_%s.jpg' % fname
|
||||
|
||||
infile = os.path.join(path, attfile)
|
||||
if os.path.exists(infile):
|
||||
web.append(webnail)
|
||||
thumb.append(thumbfile)
|
||||
|
||||
f = open(infile, 'rb')
|
||||
tags = EXIF.process_file(f)
|
||||
if tags.has_key('EXIF DateTimeOriginal'):
|
||||
date = str(tags['EXIF DateTimeOriginal'])
|
||||
date = date.replace(':', '-', 2)
|
||||
else:
|
||||
date = '--'
|
||||
exif_date.append(date)
|
||||
f.close()
|
||||
|
||||
return thumb,web,full,exif_date,img_type,description
|
||||
|
||||
def to_htmltext(text):
|
||||
text = text.split(' ')
|
||||
text = ' '.join(text)
|
||||
return text
|
||||
|
||||
def to_wikiname(request,formatter,text):
|
||||
##taken from MiniPage
|
||||
out=StringIO.StringIO()
|
||||
request.redirect(out)
|
||||
wikiizer = wiki.Parser(text.strip(),request)
|
||||
wikiizer.format(formatter)
|
||||
result=out.getvalue()
|
||||
request.redirect()
|
||||
del out
|
||||
|
||||
return result.strip()
|
||||
|
||||
|
||||
def get_quotes(self,formatter):
|
||||
quotes = self.raw.split('\n')
|
||||
quotes = [quote.strip() for quote in quotes]
|
||||
quotes = [quote[2:] for quote in quotes if quote.startswith('* ')]
|
||||
|
||||
|
||||
image=[]
|
||||
text=[]
|
||||
|
||||
for line in quotes:
|
||||
im, na=line[1:-1].split(' ',1)
|
||||
text.append(na.strip())
|
||||
image.append(im.strip())
|
||||
|
||||
return {
|
||||
'alias': text,
|
||||
'image': image,
|
||||
}
|
||||
|
||||
|
||||
|
||||
class Parser:
|
||||
|
||||
def __init__(self, raw, request, **kw):
|
||||
self.raw = raw
|
||||
self.request = request
|
||||
self.form = request.form
|
||||
self._ = request.getText
|
||||
self.kw = {
|
||||
'sort_by_date': '0',
|
||||
'sort_by_name': '1',
|
||||
'sort_by_alias': '0',
|
||||
'album': '0',
|
||||
'album_name': 'album',
|
||||
'front_image':'',
|
||||
'template_itemlist': '0',
|
||||
'reverse_sort': '0',
|
||||
'border_thick': '1',
|
||||
'columns': '4',
|
||||
'filter': '.',
|
||||
'mode': '1',
|
||||
'help': '0',
|
||||
'show_text': '1',
|
||||
'show_date': '1',
|
||||
'show_tools': '1',
|
||||
'only_items': '0',
|
||||
'image_for_webnail': '0',
|
||||
'renew': '0',
|
||||
'thumbnail_width': '128',
|
||||
'webnail_width': '640',
|
||||
'text_width': '140',
|
||||
}
|
||||
|
||||
|
||||
for arg in kw.get('format_args','').split(','):
|
||||
|
||||
if arg.find('=') > -1:
|
||||
key, value=arg.split('=')
|
||||
self.kw[key]=wikiutil.escape(value, quote=1)
|
||||
|
||||
|
||||
self.kw['width']=str((int(self.kw['thumbnail_width'])+int(self.kw['text_width'])))
|
||||
|
||||
|
||||
def format(self, formatter):
|
||||
kw=self.kw
|
||||
Dict = {}
|
||||
quotes=get_quotes(self,formatter)
|
||||
current_pagename=formatter.page.page_name
|
||||
attachment_path = AttachFile.getAttachDir(self.request, current_pagename, create=1)
|
||||
|
||||
if kw['help'] == '1':
|
||||
self.request.write('''
|
||||
<br>
|
||||
{{{<br>
|
||||
#!Gallery2 [columns=columns],[filter=filter],[mode=mode],<br>
|
||||
[show_text=show_text],[show_date=show_date], [show_tools=show_tools],<br>
|
||||
[sort_by_name=sort_by_name],[sort_by_date=sort_by_date],[sort_by_alias=sort_by_alias]<br>
|
||||
[reverse_sort=reverse_sort],<br>
|
||||
[only_items=only_items],[template_itemlist=template_itemlist],<br>
|
||||
[album=album],[album_name=album_name],[front_image=front_image],<br>
|
||||
[thumbnail_width=thumbnail_width],[webnail_width=webnail_width],[text_width=text_width],<br>
|
||||
[image_for_webnail=image_for_webnail],<br>
|
||||
[border_thick=border_thick],[renew=renew],[help=help]<br>
|
||||
* [image1.jpg alias]<br>
|
||||
* [image2.jpg alias]<br>
|
||||
}}}<br>''')
|
||||
return
|
||||
|
||||
|
||||
if kw['only_items'] == '1':
|
||||
all_files=quotes['image']
|
||||
result=[]
|
||||
for attfile in all_files:
|
||||
infile=os.path.join(attachment_path,attfile)
|
||||
if os.path.exists(infile):
|
||||
result.append(attfile)
|
||||
all_files = result
|
||||
|
||||
if kw['sort_by_alias'] == '1':
|
||||
new_ordered_files=[]
|
||||
alias_text=quotes['alias']
|
||||
|
||||
i=0
|
||||
for attfile in all_files:
|
||||
infile=os.path.join(attachment_path,attfile)
|
||||
ft_file=str(os.path.getmtime(infile))+os.tmpnam()
|
||||
Dict[alias_text[i]]=attfile
|
||||
i += 1
|
||||
|
||||
keys = Dict.keys()
|
||||
keys.sort()
|
||||
for txt in keys:
|
||||
new_ordered_files.append(Dict[txt])
|
||||
|
||||
|
||||
all_files=new_ordered_files
|
||||
Dict.clear()
|
||||
|
||||
else:
|
||||
all_files=os.listdir(attachment_path)
|
||||
|
||||
result = []
|
||||
|
||||
for test in all_files:
|
||||
if re.match(kw['filter'], test):
|
||||
result.append(test)
|
||||
all_files=result
|
||||
|
||||
if not all_files:
|
||||
self.request.write("<br><br><h1>No matching image file found!</h1>")
|
||||
return
|
||||
|
||||
|
||||
|
||||
if kw['sort_by_name'] == '1' and kw['only_items'] == '0':
|
||||
all_files.sort()
|
||||
|
||||
if kw['sort_by_date']=='1':
|
||||
for attfile in all_files:
|
||||
infile=os.path.join(attachment_path,attfile)
|
||||
ft_file=str(os.path.getmtime(infile))+os.tmpnam()
|
||||
Dict[ft_file]=attfile
|
||||
|
||||
keys = Dict.keys()
|
||||
keys.sort()
|
||||
file_mdate=[]
|
||||
for txt in keys:
|
||||
file_mdate.append(Dict[txt])
|
||||
all_files=file_mdate
|
||||
Dict.clear()
|
||||
|
||||
if kw['reverse_sort']=='1':
|
||||
all_files.reverse()
|
||||
|
||||
|
||||
cells=[]
|
||||
cell_name=[]
|
||||
img=[]
|
||||
|
||||
thumb, web, full, exif_date, imgtype, description = get_files(kw, attachment_path, all_files, quotes, self.request)
|
||||
|
||||
if kw['template_itemlist'] == '1':
|
||||
self.request.write('Copy the following listitems into the script. Replace alias with the label you want. Afterwards disable template_itemlist by setting it to 0:<BR>')
|
||||
for attfile in full :
|
||||
self.request.write(' * [%(attfile)s %(date)s]<br>' % {
|
||||
'attfile' : attfile,
|
||||
'date' : 'alias'
|
||||
})
|
||||
|
||||
|
||||
i = 0
|
||||
z = 1
|
||||
cols = int(kw['columns'])
|
||||
|
||||
|
||||
n = len(full)
|
||||
if kw['album'] == '0' :
|
||||
self.request.write("<table align='center' border='%s' >" % self.kw['border_thick'])
|
||||
if kw['mode'] == '1' or cols > 1 :
|
||||
self.request.write('<TR valign="bottom">')
|
||||
self.request.write('<TD>')
|
||||
|
||||
|
||||
if kw['album'] == '1' :
|
||||
if kw['front_image'] == '' :
|
||||
front_image = full[0]
|
||||
else:
|
||||
front_image = kw['front_image']
|
||||
ii = 0
|
||||
for tst in full :
|
||||
if tst == front_image :
|
||||
break
|
||||
ii += 1
|
||||
|
||||
|
||||
for attfile in full :
|
||||
if kw['album'] == '1' :
|
||||
if tst == front_image :
|
||||
i = ii
|
||||
|
||||
|
||||
this_description=description[i]
|
||||
this_exif_date=exif_date[i]
|
||||
this_webnail=web[i]
|
||||
this_imgtype=imgtype[i]
|
||||
this_thumbfile=thumb[i]
|
||||
|
||||
|
||||
thumbf=os.path.join(attachment_path,this_thumbfile)
|
||||
webf=os.path.join(attachment_path,this_webnail)
|
||||
|
||||
|
||||
if kw['renew'] == '1':
|
||||
if os.path.exists(thumbf):
|
||||
os.unlink(thumbf)
|
||||
if os.path.exists(webf):
|
||||
os.unlink(webf)
|
||||
|
||||
if not os.path.exists(webf) or not os.path.exists(thumbf):
|
||||
infile=os.path.join(attachment_path,attfile)
|
||||
im = Image.open(infile)
|
||||
if not os.path.exists(webf):
|
||||
im.thumbnail(((int(kw['webnail_width'])),((int(kw['webnail_width'])))), Image.ANTIALIAS)
|
||||
im.save(webf, this_imgtype)
|
||||
if not os.path.exists(thumbf):
|
||||
im.thumbnail(((int(kw['thumbnail_width'])),((int(kw['thumbnail_width'])))),
|
||||
Image.ANTIALIAS)
|
||||
im.save(thumbf, this_imgtype)
|
||||
|
||||
|
||||
if kw['mode'] == '1':
|
||||
text=mode1_html(current_pagename,
|
||||
kw['border_thick'],
|
||||
kw['width'],
|
||||
kw['thumbnail_width'],
|
||||
kw['text_width'],
|
||||
attfile + "," + ','.join(full),
|
||||
attfile,
|
||||
to_htmltext(this_description + "!,!" + '!,!'.join(description)),
|
||||
to_wikiname(self.request,formatter,this_description),
|
||||
to_htmltext(this_exif_date + "," + ','.join(exif_date)),
|
||||
this_exif_date,
|
||||
this_webnail + "," + ','.join(web),
|
||||
this_webnail,
|
||||
AttachFile.getAttachUrl(current_pagename, this_thumbfile, self.request),
|
||||
kw['show_tools'],
|
||||
kw['show_date'],
|
||||
kw['show_text'],
|
||||
self.request
|
||||
)
|
||||
self.request.write(''.join(text))
|
||||
|
||||
if kw['mode'] == '2':
|
||||
text=mode2_html(current_pagename,
|
||||
kw['border_thick'],
|
||||
kw['width'],
|
||||
kw['thumbnail_width'],
|
||||
kw['text_width'],
|
||||
attfile + "," + ','.join(full),
|
||||
attfile,
|
||||
to_htmltext(this_description + "!,!" + '!,!'.join(description)),
|
||||
to_wikiname(self.request,formatter,this_description),
|
||||
to_htmltext(this_exif_date + "," + ','.join(exif_date)),
|
||||
this_exif_date,
|
||||
this_webnail + "," + ','.join(web),
|
||||
this_webnail,
|
||||
AttachFile.getAttachUrl(current_pagename, this_thumbfile, self.request),
|
||||
kw['show_tools'],
|
||||
kw['show_date'],
|
||||
kw['show_text'],
|
||||
self.request
|
||||
)
|
||||
|
||||
if cols > 1 : self.request.write('<table valign="bottom">')
|
||||
self.request.write(''.join(text))
|
||||
if cols > 1 : self.request.write('</table>')
|
||||
|
||||
if kw['mode'] == '1' or cols > 1:
|
||||
if kw['album'] == '0' :
|
||||
if z < cols:
|
||||
self.request.write('</TD>')
|
||||
if z < n :
|
||||
self.request.write('<TD>')
|
||||
else:
|
||||
self.request.write('</TD>')
|
||||
self.request.write('</TR>')
|
||||
if i < n-1 :
|
||||
self.request.write('<TR valign="bottom">')
|
||||
self.request.write('<TD>')
|
||||
|
||||
i += 1
|
||||
z += 1
|
||||
if z > cols :
|
||||
z = 1
|
||||
|
||||
if kw['album'] == '1' :
|
||||
self.request.write("%(n)s images (%(album_name)s)" % {"n": str(n), "album_name":kw['album_name']})
|
||||
break
|
||||
if kw['album'] == '0' :
|
||||
if i < n :
|
||||
self.request.write('</TD>')
|
||||
self.request.write('</TR>')
|
||||
|
||||
|
||||
self.request.write('</table>')
|
||||
|
||||
############################################
|
||||
##TODO: syntax change to formatter - later #
|
||||
############################################
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,6 +1,23 @@
|
|||
# -*- coding: iso-8859-1 -*-
|
||||
"""
|
||||
MoinMoin - Portail parser
|
||||
# -*- coding: utf-8 -*-
|
||||
..
|
||||
.... ............ ........
|
||||
. ....... . .... ..
|
||||
. ... .. .. .. .. ..... . ..
|
||||
.. .. ....@@@. .. . ........ .
|
||||
.. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. ....
|
||||
.@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... ....
|
||||
@@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. ..
|
||||
.@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. .....
|
||||
...@@@.... @@@ .@@.......... ........ ..... ..
|
||||
. ..@@@@.. . .@@@@. .. ....... . .............
|
||||
. .. .... .. .. . ... ....
|
||||
. . .... ............. .. ...
|
||||
.. .. ... ........ ... ...
|
||||
................................
|
||||
|
||||
MoinMoin - Portail parser
|
||||
|
||||
PURPOSE:
|
||||
Pour afficher un portail a la wikipedia.
|
||||
|
@ -107,7 +124,7 @@ class Parser:
|
|||
else:
|
||||
description=items.pop().strip()
|
||||
link=items.pop().strip()
|
||||
image = AttachFile.getAttachUrl(current_pagename, items.pop().strip(), self.request).escaped('& ','&')
|
||||
image = AttachFile.getAttachUrl(current_pagename, items.pop().strip(), self.request).replace('& ','&')
|
||||
|
||||
link = to_wikiname(self.request, formatter, link)
|
||||
description = to_wikiname(self.request, formatter, description)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue