source: documentViewer/documentViewer.py @ 0:96f74b2bab24

Last change on this file since 0:96f74b2bab24 was 0:96f74b2bab24, checked in by dwinter, 18 years ago

fist

File size: 8.3 KB
Line 
1
2genericDigilib="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/"
3
4from OFS.Folder import Folder
5from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
6from Products.PageTemplates.PageTemplateFile import PageTemplateFile
7from AccessControl import ClassSecurityInfo
8from Globals import package_home
9
10from Ft.Xml.Domlette import NonvalidatingReader
11from Ft.Xml.Domlette import PrettyPrint, Print
12from Ft.Xml import EMPTY_NAMESPACE
13
14import Ft.Xml.XPath
15
16import os.path
17import cgi
18import urllib
19
20def 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
28import socket
29
30def urlopen(url):
31        """urlopen mit timeout"""
32        socket.setdefaulttimeout(2)
33        ret=urllib.urlopen(url)
34        socket.setdefaulttimeout(5)
35        return ret
36   
37def 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   
52def 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
101class 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
281def 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 
286def 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   
Note: See TracBrowser for help on using the repository browser.