# HG changeset patch # User dwinter # Date 1134909302 -3600 # Node ID 96f74b2bab24a930eff6f7ace31af1bc75f0de38 fist diff -r 000000000000 -r 96f74b2bab24 __init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/__init__.py Sun Dec 18 13:35:02 2005 +0100 @@ -0,0 +1,12 @@ +import documentViewer + + +def initialize(context): + """initialize ImageCollection""" + context.registerClass( + documentViewer.documentViewer, + constructors = ( + documentViewer.manage_AddDocumentViewerForm, + documentViewer.manage_AddDocumentViewer + ) + ) diff -r 000000000000 -r 96f74b2bab24 documentViewer.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/documentViewer.py Sun Dec 18 13:35:02 2005 +0100 @@ -0,0 +1,293 @@ + +genericDigilib="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/" + +from OFS.Folder import Folder +from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate +from Products.PageTemplates.PageTemplateFile import PageTemplateFile +from AccessControl import ClassSecurityInfo +from Globals import package_home + +from Ft.Xml.Domlette import NonvalidatingReader +from Ft.Xml.Domlette import PrettyPrint, Print +from Ft.Xml import EMPTY_NAMESPACE + +import Ft.Xml.XPath + +import os.path +import cgi +import urllib + +def getTextFromNode(nodename): + nodelist=nodename.childNodes + rc = "" + for node in nodelist: + if node.nodeType == node.TEXT_NODE: + rc = rc + node.data + return rc + +import socket + +def urlopen(url): + """urlopen mit timeout""" + socket.setdefaulttimeout(2) + ret=urllib.urlopen(url) + socket.setdefaulttimeout(5) + return ret + +def getParamFromDigilib(path,param): + """gibt param von dlInfo aus""" + imageUrl=genericDigilib+"/dlInfo-xml.jsp?fn="+path + + try: + dom = NonvalidatingReader.parseUri(imageUrl) + except: + return None + + + params=dom.xpath("//document-parameters/parameter[@name='%s']/@value"%param) + + if params: + return params[0].value + +def parseUrlTextTool(url): + """parse index meta""" + + try: + dom = NonvalidatingReader.parseUri(url) + except: + zLOG.LOG("documentViewer (parseUrlTexttool)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + return (None,None,None) + + archivePaths=dom.xpath("//resource/archive-path") + + if archivePaths and (len(archivePaths)>0): + archivePath=getTextFromNode(archivePaths[0]) + else: + archivePath=None + + + images=dom.xpath("//texttool/image") + + if images and (len(images)>0): + image=getTextFromNode(images[0]) + else: + image=None + + if image and archivePath: + image=os.path.join(archivePath,image) + image=image.replace("/mpiwg/online",'') + pt=getParamFromDigilib(image,'pt') + + else: + image=None + + viewerUrls=dom.xpath("//texttool/digiliburlprefix") + + if viewerUrls and (len(viewerUrls)>0): + viewerUrl=getTextFromNode(viewerUrls[0]) + else: + viewerUrl=None + + + textUrls=dom.xpath("//texttool/text") + + if textUrls and (len(textUrls)>0): + textUrl=getTextFromNode(textUrls[0]) + else: + textUrl=None + return viewerUrl,(image,pt),textUrl + + +class documentViewer(ZopePageTemplate): + """document viewer""" + + meta_type="Document viewer" + + security=ClassSecurityInfo() + manage_options=ZopePageTemplate.manage_options+( + {'label':'main config','action':'changeDocumentViewerForm'}, + ) + + _default_content_fn = os.path.join(package_home(globals()),'zpt','documentViewer_template.zpt') + + def __init__(self,id,imageViewerUrl,title=""): + """init document viewer""" + self.id=id + self.title=title + self.imageViewerUrl=imageViewerUrl + + security.declareProtected('View management screens','changeDocumentViewerForm') + def changeDocumentViewerForm(self): + """change it""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeDocumentViewer.zpt')).__of__(self) + return pt() + + + def changeDocumentViewer(self,imageViewerUrl,title="",RESPONSE=None): + """init document viewer""" + self.title=title + self.imageViewerUrl=imageViewerUrl + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + def imageLink(self,nr): + """link hinter den images""" + paramsTmp=cgi.parse_qs(self.REQUEST['QUERY_STRING']) + params={} + for x in paramsTmp.iteritems(): + params[x[0]]=x[1][0] + + params['pn']=nr + newUrl=self.REQUEST['URL']+"?"+urllib.urlencode(params) + return newUrl + + + def thumbruler(self,cols,rows,start,maximum): + """ruler for thumbs""" + ret="" + paramsTmp=cgi.parse_qs(self.REQUEST['QUERY_STRING']) + params={} + for x in paramsTmp.iteritems(): + + if not x[0]=="start": + params[x[0]]=x[1][0] + + newUrlSelect=self.REQUEST['URL']+"?"+urllib.urlencode(params) + if start>0: + newStart=max(start-cols*rows,0) + params['start']=newStart + newUrl=self.REQUEST['URL']+"?"+urllib.urlencode(params) + ret+="""prev"""%newUrl + + + ret+="""" + + if startnext"""%newUrl + + return ret + + def textToolThumb(self,url,start=0): + """understands the texttool format + @param url: url to index.meta with texttool tag + """ + (viewerUrl,imagepath,textpath)=parseUrlTextTool(url) + + imageUrl=genericDigilib+"/servlet/Scaler?fn=%s"%imagepath[0] + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbs.zpt')).__of__(self) + return pt(imageUrl=imageUrl,pt=imagepath[1],start=start) + + def text(self,mode,url,pn): + """give text""" + if mode=="texttool": #index.meta with texttool information + (viewerUrl,imagepath,textpath)=parseUrlTextTool(url) + + print textpath + try: + dom = NonvalidatingReader.parseUri(textpath) + except: + return None + + list=[] + nodes=dom.xpath("//pb") + + node=nodes[int(pn)-1] + + p=node + + while p.tagName!="p": + p=p.parentNode + + + endNode=nodes[int(pn)] + + + e=endNode + + while e.tagName!="p": + e=e.parentNode + + + next=node.parentNode + + #sammle s + while next and (next!=endNode.parentNode): + list.append(next) + next=next.nextSibling + list.append(endNode.parentNode) + + if p==e:# beide im selben paragraphen + + else: + next=p + while next!=e: + print next,e + list.append(next) + next=next.nextSibling + + for x in list: + PrettyPrint(x) + + return list + + def image(self,mode,url,pn): + """give image out""" + if mode=="texttool": #index.meta with texttool information + (viewerUrl,imagepath,textpath)=parseUrlTextTool(url) + url=viewerUrl+"pn=%s&fn=%s"%(pn,imagepath[0]) + ret="""