Annotation of documentViewer/documentViewer.py, revision 1.1
1.1 ! dwinter 1:
! 2: genericDigilib="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/"
! 3:
! 4: from OFS.Folder import Folder
! 5: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
! 6: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
! 7: from AccessControl import ClassSecurityInfo
! 8: from Globals import package_home
! 9:
! 10: from Ft.Xml.Domlette import NonvalidatingReader
! 11: from Ft.Xml.Domlette import PrettyPrint, Print
! 12: from Ft.Xml import EMPTY_NAMESPACE
! 13:
! 14: import Ft.Xml.XPath
! 15:
! 16: import os.path
! 17: import cgi
! 18: import urllib
! 19:
! 20: def getTextFromNode(nodename):
! 21: nodelist=nodename.childNodes
! 22: rc = ""
! 23: for node in nodelist:
! 24: if node.nodeType == node.TEXT_NODE:
! 25: rc = rc + node.data
! 26: return rc
! 27:
! 28: import socket
! 29:
! 30: def urlopen(url):
! 31: """urlopen mit timeout"""
! 32: socket.setdefaulttimeout(2)
! 33: ret=urllib.urlopen(url)
! 34: socket.setdefaulttimeout(5)
! 35: return ret
! 36:
! 37: def getParamFromDigilib(path,param):
! 38: """gibt param von dlInfo aus"""
! 39: imageUrl=genericDigilib+"/dlInfo-xml.jsp?fn="+path
! 40:
! 41: try:
! 42: dom = NonvalidatingReader.parseUri(imageUrl)
! 43: except:
! 44: return None
! 45:
! 46:
! 47: params=dom.xpath("//document-parameters/parameter[@name='%s']/@value"%param)
! 48:
! 49: if params:
! 50: return params[0].value
! 51:
! 52: def parseUrlTextTool(url):
! 53: """parse index meta"""
! 54:
! 55: try:
! 56: dom = NonvalidatingReader.parseUri(url)
! 57: except:
! 58: zLOG.LOG("documentViewer (parseUrlTexttool)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
! 59: return (None,None,None)
! 60:
! 61: archivePaths=dom.xpath("//resource/archive-path")
! 62:
! 63: if archivePaths and (len(archivePaths)>0):
! 64: archivePath=getTextFromNode(archivePaths[0])
! 65: else:
! 66: archivePath=None
! 67:
! 68:
! 69: images=dom.xpath("//texttool/image")
! 70:
! 71: if images and (len(images)>0):
! 72: image=getTextFromNode(images[0])
! 73: else:
! 74: image=None
! 75:
! 76: if image and archivePath:
! 77: image=os.path.join(archivePath,image)
! 78: image=image.replace("/mpiwg/online",'')
! 79: pt=getParamFromDigilib(image,'pt')
! 80:
! 81: else:
! 82: image=None
! 83:
! 84: viewerUrls=dom.xpath("//texttool/digiliburlprefix")
! 85:
! 86: if viewerUrls and (len(viewerUrls)>0):
! 87: viewerUrl=getTextFromNode(viewerUrls[0])
! 88: else:
! 89: viewerUrl=None
! 90:
! 91:
! 92: textUrls=dom.xpath("//texttool/text")
! 93:
! 94: if textUrls and (len(textUrls)>0):
! 95: textUrl=getTextFromNode(textUrls[0])
! 96: else:
! 97: textUrl=None
! 98: return viewerUrl,(image,pt),textUrl
! 99:
! 100:
! 101: class documentViewer(ZopePageTemplate):
! 102: """document viewer"""
! 103:
! 104: meta_type="Document viewer"
! 105:
! 106: security=ClassSecurityInfo()
! 107: manage_options=ZopePageTemplate.manage_options+(
! 108: {'label':'main config','action':'changeDocumentViewerForm'},
! 109: )
! 110:
! 111: _default_content_fn = os.path.join(package_home(globals()),'zpt','documentViewer_template.zpt')
! 112:
! 113: def __init__(self,id,imageViewerUrl,title=""):
! 114: """init document viewer"""
! 115: self.id=id
! 116: self.title=title
! 117: self.imageViewerUrl=imageViewerUrl
! 118:
! 119: security.declareProtected('View management screens','changeDocumentViewerForm')
! 120: def changeDocumentViewerForm(self):
! 121: """change it"""
! 122: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeDocumentViewer.zpt')).__of__(self)
! 123: return pt()
! 124:
! 125:
! 126: def changeDocumentViewer(self,imageViewerUrl,title="",RESPONSE=None):
! 127: """init document viewer"""
! 128: self.title=title
! 129: self.imageViewerUrl=imageViewerUrl
! 130:
! 131: if RESPONSE is not None:
! 132: RESPONSE.redirect('manage_main')
! 133:
! 134:
! 135: def imageLink(self,nr):
! 136: """link hinter den images"""
! 137: paramsTmp=cgi.parse_qs(self.REQUEST['QUERY_STRING'])
! 138: params={}
! 139: for x in paramsTmp.iteritems():
! 140: params[x[0]]=x[1][0]
! 141:
! 142: params['pn']=nr
! 143: newUrl=self.REQUEST['URL']+"?"+urllib.urlencode(params)
! 144: return newUrl
! 145:
! 146:
! 147: def thumbruler(self,cols,rows,start,maximum):
! 148: """ruler for thumbs"""
! 149: ret=""
! 150: paramsTmp=cgi.parse_qs(self.REQUEST['QUERY_STRING'])
! 151: params={}
! 152: for x in paramsTmp.iteritems():
! 153:
! 154: if not x[0]=="start":
! 155: params[x[0]]=x[1][0]
! 156:
! 157: newUrlSelect=self.REQUEST['URL']+"?"+urllib.urlencode(params)
! 158: if start>0:
! 159: newStart=max(start-cols*rows,0)
! 160: params['start']=newStart
! 161: newUrl=self.REQUEST['URL']+"?"+urllib.urlencode(params)
! 162: ret+="""<a href="%s">prev</a>"""%newUrl
! 163:
! 164:
! 165: ret+="""<select onChange="location.href='%s&start='+this.options[this.selectedIndex].value" """%newUrlSelect
! 166: nr,rest=divmod(maximum,cols*rows)
! 167: if rest > 0:
! 168: nr+=1
! 169: for i in range(nr):
! 170: nr=i*cols*rows
! 171:
! 172: if (start >= nr) and (start < nr+cols*rows):
! 173: ret+="""<option value="%s" selected>%s</option>"""%(nr,nr)
! 174: else:
! 175: ret+="""<option value="%s">%s</option>"""%(nr,nr)
! 176: ret+="</select>"
! 177:
! 178: if start<maximum:
! 179: newStart=min(start+cols*rows,maximum)
! 180: params['start']=newStart
! 181: newUrl=self.REQUEST['URL']+"?"+urllib.urlencode(params)
! 182: ret+="""<a href="%s">next</a>"""%newUrl
! 183:
! 184: return ret
! 185:
! 186: def textToolThumb(self,url,start=0):
! 187: """understands the texttool format
! 188: @param url: url to index.meta with texttool tag
! 189: """
! 190: (viewerUrl,imagepath,textpath)=parseUrlTextTool(url)
! 191:
! 192: imageUrl=genericDigilib+"/servlet/Scaler?fn=%s"%imagepath[0]
! 193:
! 194: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbs.zpt')).__of__(self)
! 195: return pt(imageUrl=imageUrl,pt=imagepath[1],start=start)
! 196:
! 197: def text(self,mode,url,pn):
! 198: """give text"""
! 199: if mode=="texttool": #index.meta with texttool information
! 200: (viewerUrl,imagepath,textpath)=parseUrlTextTool(url)
! 201:
! 202: print textpath
! 203: try:
! 204: dom = NonvalidatingReader.parseUri(textpath)
! 205: except:
! 206: return None
! 207:
! 208: list=[]
! 209: nodes=dom.xpath("//pb")
! 210:
! 211: node=nodes[int(pn)-1]
! 212:
! 213: p=node
! 214:
! 215: while p.tagName!="p":
! 216: p=p.parentNode
! 217:
! 218:
! 219: endNode=nodes[int(pn)]
! 220:
! 221:
! 222: e=endNode
! 223:
! 224: while e.tagName!="p":
! 225: e=e.parentNode
! 226:
! 227:
! 228: next=node.parentNode
! 229:
! 230: #sammle s
! 231: while next and (next!=endNode.parentNode):
! 232: list.append(next)
! 233: next=next.nextSibling
! 234: list.append(endNode.parentNode)
! 235:
! 236: if p==e:# beide im selben paragraphen
! 237:
! 238: else:
! 239: next=p
! 240: while next!=e:
! 241: print next,e
! 242: list.append(next)
! 243: next=next.nextSibling
! 244:
! 245: for x in list:
! 246: PrettyPrint(x)
! 247:
! 248: return list
! 249:
! 250: def image(self,mode,url,pn):
! 251: """give image out"""
! 252: if mode=="texttool": #index.meta with texttool information
! 253: (viewerUrl,imagepath,textpath)=parseUrlTextTool(url)
! 254: url=viewerUrl+"pn=%s&fn=%s"%(pn,imagepath[0])
! 255: ret="""<iframe height="100%%" width="100%%" src="%s"/>"""%url
! 256: return url
! 257:
! 258: def thumbs(self,mode,url,start):
! 259: """give thumbs out"""
! 260: if mode=="texttool": #index.meta with texttool information
! 261: return self.textToolThumb(url,int(start))
! 262:
! 263: security.declareProtected('View','index_html')
! 264:
! 265:
! 266: def index_html(self,mode,url,start=0,pn=0):
! 267: '''
! 268: view it
! 269: @param mode: defines which type of document is behind url
! 270: @param url: url which contains display information
! 271: '''
! 272:
! 273:
! 274: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','documentViewer_template.zpt')).__of__(self)
! 275: return pt(mode=mode,url=url,start=start,pn=pn)
! 276:
! 277:
! 278:
! 279: # security.declareProtected('View management screens','renameImageForm')
! 280:
! 281: def manage_AddDocumentViewerForm(self):
! 282: """add the viewer form"""
! 283: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addDocumentViewer.zpt')).__of__(self)
! 284: return pt()
! 285:
! 286: def manage_AddDocumentViewer(self,id,imageViewerUrl="",title="",RESPONSE=None):
! 287: """add the viewer"""
! 288: newObj=documentViewer(id,imageViewerUrl,title)
! 289: self._setObject(id,newObj)
! 290:
! 291: if RESPONSE is not None:
! 292: RESPONSE.redirect('manage_main')
! 293:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>