diff --git a/wiki/action/gallery2image.py b/wiki/action/gallery2image.py new file mode 100644 index 00000000..44710dad --- /dev/null +++ b/wiki/action/gallery2image.py @@ -0,0 +1,398 @@ +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - gallery2Image Actionmacro + + PURPOSE:: + This action macro is used to rotate, move to bak or to slide through the images from Gallery2 + + CALLING SEQUENCE:: + called by Gallery2 POST Method + + PROCEDURE:: + see Gallery2 + + Please remove the version number from this file + + RESTRICTIONS:: + spaces in file names are not supported. I don't know how to escape them right. Probaly this does work in 1.3.5 + + 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-06-24: 1.3.3.-2 feature reqeust of CraigJohnson added + os.path.join used to join platform independent pathes + os.unlink removed to get it more platform independend + 2005-08-06: 1.3.5-3 RB VS mode added + by one step back or forward could be toggled through the selected slides + and the first and last one could be selected too + 2005-08-07 1.3.5-4 RB bug fixed for cgi-bin call. formatting of tables adjusted + 2005-08-13 1.3.5-5 RB code change from GET to POST + forms instead of link + toggle between webnail and image by click on image + alias (description) and exif_date added + this version needs Gallery2-1.3.5-7.py + 2005-08-31 1.3.5-6 RB html code changed into a function :-) + some html bugs fixed too + instead of button text now images used (disabled buttons are grey color coded) + back link to callers page + whole page inserted into the common wiki page + code clean up. + + + + +""" +Dependencies = [] +import os,string,Image,StringIO +from MoinMoin import config, wikiutil +from MoinMoin.PageEditor import PageEditor +from MoinMoin import user, util +from MoinMoin.Page import Page +from MoinMoin.action import AttachFile +from MoinMoin.formatter.text_html import Formatter +from MoinMoin.parser import wiki + +def html_show_image(request,pagename,url_wiki_page,full,alias,exif_date,target,idx): + + n = len(target) + last_disabled = '' + last_status = '' + first_disabled = '' + first_status = '' + previous = idx - 1 + next = idx + 1 + + if idx == n-1 : + last_disabled = 'disabled' + last_status = '_disabled' + + if idx == 0 : + first_disabled = 'disabled' + first_status = '_disabled' + + + if previous < 0 : + previous = 0 + + if next > n - 1 : + next = n - 1 + + if n == 1 : + next = 0 + # previous = 0 + # first_disabled = 'disabled' + # first_status = '_disabled' + # last_disabled = 'disabled' + # last_status = '_disabled' + + html = ''' + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + + + + +
+ + + + + + + +
+ + + + + + + +
+ + + + + + + +
+
+ + + + + + + +
+

+ %(this_alias_text)s +

+
+

+ %(this_exif_date_text)s +

+
''' % { + +"base_url" : request.getScriptname(), +"first_status" : first_status, +"last_status" : last_status, +"first_full_list" : full[0] + "," + string.join(full,','), +"first_alias_list" : alias[0] + '!,!' + string.join(alias,'!,!'), +"first_exif_date_list" : exif_date[0] + ',' + string.join(exif_date,','), +"first_target_list" : target[0] + "," + string.join(target,','), + +"previous_full_list" : full[previous] + "," + string.join(full,','), +"previous_alias_list" : alias[previous] + '!,!' + string.join(alias,'!,!'), +"previous_exif_date_list" : exif_date[previous] + ',' + string.join(exif_date,','), +"previous_target_list" : target[previous] + "," + string.join(target,','), + +"next_full_list" : full[next] + "," + string.join(full,','), +"next_alias_list" : alias[next] + '!,!' + string.join(alias,'!,!'), +"next_exif_date_list" : exif_date[next] + ',' + string.join(exif_date,','), +"next_target_list" : target[next] + "," + string.join(target,','), + +"last_full_list" : full[n-1] + "," + string.join(full,','), +"last_alias_list" : alias[n-1] + '!,!' + string.join(alias,'!,!'), +"last_exif_date_list" : exif_date[n-1] + ',' + string.join(exif_date,','), +"last_target_list" : target[n-1] + "," + string.join(target,','), + +"this_full_list" : full[idx] + "," + string.join(full,','), +"this_alias_list" : alias[idx] + '!,!' + string.join(alias,'!,!'), +"this_exif_date_list" : exif_date[idx] + ',' + string.join(exif_date,','), +"this_target_list" : target[idx] + "," + string.join(target,','), + +"first_disabled" : first_disabled, +"last_disabled" : last_disabled, +"this_alias_text" : alias[idx], +"this_exif_date_text" : exif_date[idx], +"this_image" : AttachFile.getAttachUrl(pagename,target[idx],request), +"url_wiki_page" : url_wiki_page, +"pagename" : pagename +} + + + return html + +def to_wikiname(request,text): + + #taken from test_parser_wiki + page = Page(request, 'ThisPageDoesNotExistsAndWillNeverBeReally') + page.formatter = Formatter(request) + request.formatter = page.formatter + page.formatter.setPage(page) + page.hilite_re = None + + out=StringIO.StringIO() + request.redirect(out) + wikiizer = wiki.Parser(text.strip(),request) + wikiizer.format(page.formatter) + result = out.getvalue() + request.redirect() + del out + + return result.strip() + + +action_name = __name__.split('.')[-1] + +def execute(pagename, request): + """ Main dispatcher for the 'Gallery' action. + """ + _ = request.getText + + request.formatter = Formatter(request) + attachment_path = AttachFile.getAttachDir(request,pagename) + if request.form['do'][0] == 'VS' : + web = {} + images = string.split(request.form['target'][0],',') + target = images[0] + images = (images[1:]) + + full_image = string.split(request.form['full'][0],',') + full_target = full_image[0] + full_image = (full_image[1:]) + + all_description = string.split(request.form['alias'][0],'!,!') + this_description = all_description[0] + all_description = (all_description[1:]) + + all_exif_date = string.split(request.form['exif_date'][0],',') + this_exif_date = all_exif_date[0] + all_exif_date = (all_exif_date[1:]) + + z = 0 + for img in images : + if target == img : + idx = z + + z += 1 + n = len(images) + + ######## url_wiki_page ############################################################# + text = pagename + url = pagename + url_wiki_page = wikiutil.link_tag(request, url, text = text, + formatter = request.formatter) + ############################################################################ + + attachment_path = AttachFile.getAttachDir(request,pagename) + + web['src'] = AttachFile.getAttachUrl(pagename,target,request) + web['title'] = target + #web['width']="1024" + + + image_link=request.formatter.image(**web) + + + request.http_headers() + request.setContentLanguage(request.lang) + wikiutil.send_title(request, pagename, + pagename=pagename) + request.write(request.formatter.startContent("content")) + + + html = html_show_image(request,pagename,url_wiki_page,full_image,all_description,all_exif_date,images,idx) + request.write(html) + request.write(request.formatter.endContent()) + wikiutil.send_footer(request, pagename) + msg = None + #return + + elif request.form['do'][0] == 'PS' : + images=string.split(request.form['target'][0],',') + attachment_path = AttachFile.getAttachDir(request,pagename) + target=request.form['target'][0] + + msg= _('not finished by now') #+ target + + elif request.form['do'][0] == 'BS' : + + msg = "gone back" #None + + elif request.user.may.delete(pagename): + # only users which are allowed to delete should use this tool + + target=request.form['target'][0] + file, ext = os.path.splitext(target) + + if ext == '.gif' or ext == '.png' : + img_type = 'PNG' + thumbfile = "thumbnail_%(file)s.png" % {"file" : file} + webnail = "webnail_%(file)s.png" % {"file" : file} + else: + img_type="JPEG" + thumbfile="thumbnail_%(file)s.jpg" % {"file" : file} + webnail="webnail_%(file)s.jpg" % {"file" : file} + + thumb = os.path.join(attachment_path,thumbfile) + webf = os.path.join(attachment_path,webnail) + infile = os.path.join(attachment_path,target) + + msg = None + if action_name in request.cfg.excluded_actions: + msg = _('File attachments are not allowed in this wiki!') + + elif request.form['do'][0] == 'RM' : + if os.path.exists(infile + '.bak') : + os.unlink("%(file)s.bak" % {"file" : infile}) + os.link(infile,"%(file)s.bak" % {"file" : infile}) + os.unlink(infile) + os.unlink(webf) + os.unlink(thumb) + + msg = _('%(target)s deleted, backup in place' % { + 'target':target}) + + elif request.form['do'][0] == 'RL' : + im = Image.open(infile) + #os.unlink(infile) + im.rotate(90).save(infile,img_type) + nim = Image.open(infile) + nim.thumbnail((640,640), Image.ANTIALIAS) + #os.unlink(webf) + nim.save(webf, img_type) + nim.thumbnail((128, 128), Image.ANTIALIAS) + #os.unlink(thumb) + nim.save(thumb, img_type) + msg= _('%(target)s rotated to left 90 degrees' % { + 'target':target}) + + elif request.form['do'][0] == 'RR' : + im = Image.open(infile) + #os.unlink(infile) + im.rotate(270).save(infile,img_type) + + + nim = Image.open(infile) + + nim.thumbnail((640,640), Image.ANTIALIAS) + #os.unlink(webf) + nim.save(webf, img_type) + nim.thumbnail((128, 128), Image.ANTIALIAS) + #os.unlink(thumb) + nim.save(thumb, img_type) + msg= _('%(target)s rotated to right 90 degrees' % { + 'target':target}) + + + + + else: + msg = _('action not implemented: %s') % (request.form['do'][0],) + else: + msg = _('Your are not allowed to change images on this page: %s') % (pagename,) + + if msg: + AttachFile.error_msg(pagename, request, msg) + + return() diff --git a/wiki/action/opensearch.py b/wiki/action/opensearch.py new file mode 100644 index 00000000..723fb67e --- /dev/null +++ b/wiki/action/opensearch.py @@ -0,0 +1,83 @@ +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - "opensearch" action + + Generate an opensearch xml description. + + @copyright: 2006 by Grégoire Détrez + @license: GNU GPL, see COPYING for details. +""" + +from MoinMoin import config, wikiutil +from MoinMoin.util import MoinMoinNoFooter +from MoinMoin.wikixml.util import XMLGenerator +import StringIO +from xml.sax import saxutils + +def execute(pagename, request): + _ = request.getText + form = request.form + + if form.has_key('searchtype'): + searchtype = form['searchtype'][0] + else: + searchtype = "Titres" + + request.http_headers(["Content-Type: text/xml; charset=%s" % config.charset ]) + + name = request.cfg.sitename + " (%s)" % searchtype + if searchtype == "Titres": + Desc = "%s, recherche dans les titres" % request.cfg.sitename + else: + Desc = "%s, recherche dans le texte" % request.cfg.sitename + + if searchtype == "Titres": + searchtype_arg = "titlesearch=Titres" + else: + searchtype_arg = "fullsearch=Texte" + server_search_addr = "http://%s%s?action=fullsearch&context=180&value={searchTerms}&%s" % (request.http_host, request.script_name, searchtype_arg) + + # prepare output + out = StringIO.StringIO() + handler = OpenSearchGenerator(out) + + + handler.startDocument() + + handler.node('ShortName', name) + handler.node('Description', Desc) + + handler.node('Image', 'http://%s/favicon.ico' % request.http_host, { + 'height': "16", + 'width': "16", + 'type': "image/x-icon", + }) + handler.node('Url', None, { + 'template': server_search_addr, + 'method': "get", + 'type': "text/html", + }) + handler.endDocument() + request.write(out.getvalue()) + + raise MoinMoinNoFooter + +class OpenSearchGenerator(saxutils.XMLGenerator): + default_xmlns = { + 'opensearch':"http://a9.com/-/spec/opensearch/1.1/", + } + def __init__(self, out): + saxutils.XMLGenerator.__init__(self, out=out, encoding=config.charset) + #self.xmlns = self.default_xmlns + def startDocument(self): + saxutils.XMLGenerator.startDocument(self) + self.startElement('OpenSearchDescription', {'xmlns': "http://a9.com/-/spec/opensearch/1.1/"}) + def endDocument(self): + self.endElement('OpenSearchDescription') + saxutils.XMLGenerator.endDocument(self) + def node(self, tag, value, attr={}): + self.startElement(tag, attr) + if value: self.characters(value) + self.endElement(tag) + +