Mercurial > hg > documentViewer
changeset 0:96f74b2bab24
fist
author | dwinter |
---|---|
date | Sun, 18 Dec 2005 13:35:02 +0100 |
parents | |
children | 312446f900da |
files | __init__.py documentViewer.py |
diffstat | 2 files changed, 305 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /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 + ) + )
--- /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+="""<a href="%s">prev</a>"""%newUrl + + + ret+="""<select onChange="location.href='%s&start='+this.options[this.selectedIndex].value" """%newUrlSelect + nr,rest=divmod(maximum,cols*rows) + if rest > 0: + nr+=1 + for i in range(nr): + nr=i*cols*rows + + if (start >= nr) and (start < nr+cols*rows): + ret+="""<option value="%s" selected>%s</option>"""%(nr,nr) + else: + ret+="""<option value="%s">%s</option>"""%(nr,nr) + ret+="</select>" + + if start<maximum: + newStart=min(start+cols*rows,maximum) + params['start']=newStart + newUrl=self.REQUEST['URL']+"?"+urllib.urlencode(params) + ret+="""<a href="%s">next</a>"""%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="""<iframe height="100%%" width="100%%" src="%s"/>"""%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