# 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=""""""%url
+ return url
+
+ def thumbs(self,mode,url,start):
+ """give thumbs out"""
+ if mode=="texttool": #index.meta with texttool information
+ return self.textToolThumb(url,int(start))
+
+ security.declareProtected('View','index_html')
+
+
+ def index_html(self,mode,url,start=0,pn=0):
+ '''
+ view it
+ @param mode: defines which type of document is behind url
+ @param url: url which contains display information
+ '''
+
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','documentViewer_template.zpt')).__of__(self)
+ return pt(mode=mode,url=url,start=start,pn=pn)
+
+
+
+# security.declareProtected('View management screens','renameImageForm')
+
+def manage_AddDocumentViewerForm(self):
+ """add the viewer form"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addDocumentViewer.zpt')).__of__(self)
+ return pt()
+
+def manage_AddDocumentViewer(self,id,imageViewerUrl="",title="",RESPONSE=None):
+ """add the viewer"""
+ newObj=documentViewer(id,imageViewerUrl,title)
+ self._setObject(id,newObj)
+
+ if RESPONSE is not None:
+ RESPONSE.redirect('manage_main')
+
\ No newline at end of file