Changeset 90:6a4a72033d58 in documentViewer
- Timestamp:
- Apr 8, 2010, 11:04:51 AM (14 years ago)
- Branch:
- default
- Files:
-
- 1 added
- 1 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
documentViewer.py
r84 r90 88 88 # templates and forms 89 89 viewer_main = PageTemplateFile('zpt/viewer_main', globals()) 90 thumbs_main = PageTemplateFile('zpt/thumbs_main', globals()) 91 image_main = PageTemplateFile('zpt/image_main', globals()) # obsolete! 90 toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals()) 91 toc_text = PageTemplateFile('zpt/toc_text', globals()) 92 toc_figures = PageTemplateFile('zpt/toc_figures', globals()) 92 93 page_main_images = PageTemplateFile('zpt/page_main_images', globals()) 93 94 page_main_text = PageTemplateFile('zpt/page_main_text', globals()) 95 page_main_text_dict = PageTemplateFile('zpt/page_main_text_dict', globals()) 94 96 head_main = PageTemplateFile('zpt/head_main', globals()) 95 97 docuviewer_css = PageTemplateFile('css/docuviewer.css', globals()) … … 162 164 163 165 security.declareProtected('View','index_html') 164 def index_html(self,url,mode="texttool",viewMode="auto", start=None,pn=1,mk=None):166 def index_html(self,url,mode="texttool",viewMode="auto",tocMode="thumbs",start=None,pn=1,mk=None): 165 167 ''' 166 168 view it 167 169 @param mode: defines how to access the document behind url 168 170 @param url: url which contains display information 169 @param viewMode: if images display images, if text display text, default is images(text,images or auto)170 171 @param viewMode: if images display images, if text display text, default is auto (text,images or auto) 172 @param tocMode: type of 'table of contents' for navigation (thumbs, text, figures) 171 173 ''' 172 174 … … 182 184 183 185 docinfo = self.getDocinfo(mode=mode,url=url) 184 pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo) 185 pt = getattr(self.template, 'viewer_main') 186 186 pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo,viewMode=viewMode,tocMode=tocMode) 187 if tocMode != "thumbs": 188 # get table of contents 189 docinfo = self.getToc(mode=tocMode, docinfo=docinfo) 190 187 191 if viewMode=="auto": # automodus gewaehlt 188 192 if docinfo.get("textURL",''): #texturl gesetzt und textViewer konfiguriert … … 190 194 else: 191 195 viewMode="images" 192 196 197 pt = getattr(self.template, 'viewer_main') 193 198 return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode,mk=self.generateMarks(mk)) 194 199 195 200 def generateMarks(self,mk): 196 201 ret="" 197 if mk is None: 198 return "" 199 200 if type(mk) is not ListType: 201 mk=[mk] 202 if mk is None: 203 return "" 204 if type(mk) is not ListType: 205 mk=[mk] 202 206 for m in mk: 203 207 ret+="mk=%s"%m 204 208 return ret 209 205 210 206 211 def findDigilibUrl(self): … … 344 349 break 345 350 except: 346 logger("ERROR documentViewer (getIndexM ata)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])351 logger("ERROR documentViewer (getIndexMeta)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) 347 352 348 353 if dom is None: … … 363 368 server=self.digilibBaseUrl+"/servlet/Texter?fn=" 364 369 metaUrl=server+url.replace("/mpiwg/online","") 365 366 370 367 371 for cnt in range(num_retries): … … 462 466 if docinfo is None: 463 467 docinfo = {} 464 465 468 if docinfo.get('lang', None) is None: 466 469 docinfo['lang'] = '' # default keine Sprache gesetzt … … 554 557 555 558 return docinfo 556 557 558 559 559 560 560 … … 619 619 else: 620 620 logger("documentViewer (getdocinfo)", logging.ERROR,"unknown mode!") 621 raise ValueError("Unknown mode %s "%(mode))621 raise ValueError("Unknown mode %s! Has to be one of 'texttool','imagepath','filepath'."%(mode)) 622 622 623 623 logger("documentViewer (getdocinfo)", logging.INFO,"docinfo: %s"%docinfo) … … 626 626 627 627 628 def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None ):628 def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, tocMode=None): 629 629 """returns pageinfo with the given parameters""" 630 630 pageinfo = {} … … 641 641 pageinfo['start'] = start 642 642 pageinfo['end'] = start + grpsize 643 if docinfo is not None:643 if (docinfo is not None) and ('numPages' in docinfo): 644 644 np = int(docinfo['numPages']) 645 645 pageinfo['end'] = min(pageinfo['end'], np) … … 647 647 if np % grpsize > 0: 648 648 pageinfo['numgroups'] += 1 649 650 pageinfo['viewMode'] = viewMode 651 pageinfo['tocMode'] = tocMode 652 pageinfo['tocPageSize'] = self.REQUEST.get('tocPageSize', '10') 653 pageinfo['tocPN'] = self.REQUEST.get('tocPN', '1') 649 654 650 655 return pageinfo … … 662 667 def getTextPage(self, mode="text", pn=1, docinfo=None): 663 668 """returns single page from fulltext""" 664 pagexml=self.template.fulltextclient.eval("/mpdl/interface/page-fragment.xql", "document=%s&mode=%s&pn=%s"%(docinfo['textURLPath'],mode,pn), outputUnicode=False) 669 docpath = docinfo['textURLPath'] 670 if mode == "text_dict": 671 textmode = "textPollux" 672 else: 673 textmode = mode 674 675 pagexml=self.template.fulltextclient.eval("/mpdl/interface/page-fragment.xql", "document=%s&mode=%s&pn=%s"%(docpath,textmode,pn), outputUnicode=False) 665 676 # post-processing downloaded xml 666 677 pagedom = Parse(pagexml) … … 674 685 675 686 # text-with-links mode 676 if mode == "text Pollux":687 if mode == "text_dict": 677 688 # first div contains text 678 689 pagedivs = pagedom.xpath("/div") … … 697 708 return "no text here" 698 709 710 def getToc(self, mode="text", docinfo=None): 711 """loads table of contents and stores in docinfo""" 712 logging.debug("documentViewer (gettoc) mode: %s"%(mode)) 713 if 'tocSize_%s'%mode in docinfo: 714 # cached toc 715 return docinfo 716 717 docpath = docinfo['textURLPath'] 718 # we need to set a result set size 719 pagesize = 1000 720 pn = 1 721 if mode == "text": 722 queryType = "toc" 723 else: 724 queryType = mode 725 # number of entries in toc 726 tocSize = 0 727 tocDiv = None 728 pagexml=self.template.fulltextclient.eval("/mpdl/interface/doc-query.xql", "document=%s&queryType=%s&queryResultPageSize=%s&queryResultPN=%s"%(docpath,queryType,pagesize,pn), outputUnicode=False) 729 # post-processing downloaded xml 730 pagedom = Parse(pagexml) 731 # get number of entries 732 numdivs = pagedom.xpath("//div[@class='queryResultHits']") 733 if len(numdivs) > 0: 734 tocSize = int(getTextFromNode(numdivs[0])) 735 # div contains text 736 #pagedivs = pagedom.xpath("//div[@class='queryResultPage']") 737 #if len(pagedivs) > 0: 738 # tocDiv = pagedivs[0] 739 740 docinfo['tocSize_%s'%mode] = tocSize 741 #docinfo['tocDiv_%s'%mode] = tocDiv 742 return docinfo 743 744 def getTocPage(self, mode="toc", pn=1, pageinfo=None, docinfo=None): 745 """returns single page from the table of contents""" 746 # TODO: this should use the cached TOC 747 if mode == "text": 748 queryType = "toc" 749 else: 750 queryType = mode 751 docpath = docinfo['textURLPath'] 752 pagesize = pageinfo['tocPageSize'] 753 pn = pageinfo['tocPN'] 754 pagexml=self.template.fulltextclient.eval("/mpdl/interface/doc-query.xql", "document=%s&queryType=%s&queryResultPageSize=%s&queryResultPN=%s"%(docpath,queryType,pagesize,pn), outputUnicode=False) 755 # post-processing downloaded xml 756 pagedom = Parse(pagexml) 757 # div contains text 758 pagedivs = pagedom.xpath("//div[@class='queryResultPage']") 759 if len(pagedivs) > 0: 760 pagenode = pagedivs[0] 761 return serializeNode(pagenode) 762 else: 763 return "No TOC!" 764 699 765 700 766 def changeDocumentViewer(self,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=10,authgroups='mpiwg',RESPONSE=None): -
zpt/page_main_text.zpt
r89 r90 1 <tal:block tal:define=" mode python:options.get('viewMode','text'); pageinfo python:options.get('pageinfo',''); docinfo python:options.get('docinfo','')">2 <div tal:content="structure python:here.getTextPage(mode= mode,pn=pageinfo['current'],docinfo=docinfo)"></div>1 <tal:block tal:define="pageinfo python:options.get('pageinfo',None); docinfo python:options.get('docinfo',None)"> 2 <div tal:content="structure python:here.getTextPage(mode='text',pn=pageinfo['current'],docinfo=docinfo)"></div> 3 3 </tal:block>
Note: See TracChangeset
for help on using the changeset viewer.