Changeset 90:6a4a72033d58 in documentViewer


Ignore:
Timestamp:
Apr 8, 2010, 11:04:51 AM (14 years ago)
Author:
casties
Branch:
default
Message:

new version with new full-text infrastructure and some more changed templates

Files:
1 added
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • documentViewer.py

    r84 r90  
    8888    # templates and forms
    8989    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())
    9293    page_main_images = PageTemplateFile('zpt/page_main_images', globals())
    9394    page_main_text = PageTemplateFile('zpt/page_main_text', globals())
     95    page_main_text_dict = PageTemplateFile('zpt/page_main_text_dict', globals())
    9496    head_main = PageTemplateFile('zpt/head_main', globals())
    9597    docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())
     
    162164 
    163165    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):
    165167        '''
    166168        view it
    167169        @param mode: defines how to access the document behind url
    168170        @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)
    171173        '''
    172174       
     
    182184           
    183185        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
    187191        if viewMode=="auto": # automodus gewaehlt
    188192            if docinfo.get("textURL",''): #texturl gesetzt und textViewer konfiguriert
     
    190194            else:
    191195                viewMode="images"
    192                
     196               
     197        pt = getattr(self.template, 'viewer_main')               
    193198        return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode,mk=self.generateMarks(mk))
    194199 
    195200    def generateMarks(self,mk):
    196201        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]
    202206        for m in mk:
    203207            ret+="mk=%s"%m
    204208        return ret
     209
    205210
    206211    def findDigilibUrl(self):
     
    344349                break
    345350            except:
    346                 logger("ERROR documentViewer (getIndexMata)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])
     351                logger("ERROR documentViewer (getIndexMeta)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])
    347352               
    348353        if dom is None:
     
    363368            server=self.digilibBaseUrl+"/servlet/Texter?fn="
    364369            metaUrl=server+url.replace("/mpiwg/online","")
    365            
    366370       
    367371        for cnt in range(num_retries):
     
    462466        if docinfo is None:
    463467           docinfo = {}
    464            
    465468        if docinfo.get('lang', None) is None:
    466469            docinfo['lang'] = '' # default keine Sprache gesetzt
     
    554557       
    555558        return docinfo
    556 
    557 
    558 
    559559   
    560560   
     
    619619        else:
    620620            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))
    622622                       
    623623        logger("documentViewer (getdocinfo)", logging.INFO,"docinfo: %s"%docinfo)
     
    626626       
    627627       
    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):
    629629        """returns pageinfo with the given parameters"""
    630630        pageinfo = {}
     
    641641        pageinfo['start'] = start
    642642        pageinfo['end'] = start + grpsize
    643         if docinfo is not None:
     643        if (docinfo is not None) and ('numPages' in docinfo):
    644644            np = int(docinfo['numPages'])
    645645            pageinfo['end'] = min(pageinfo['end'], np)
     
    647647            if np % grpsize > 0:
    648648                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')
    649654
    650655        return pageinfo
     
    662667    def getTextPage(self, mode="text", pn=1, docinfo=None):
    663668        """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)
    665676        # post-processing downloaded xml
    666677        pagedom = Parse(pagexml)
     
    674685
    675686        # text-with-links mode
    676         if mode == "textPollux":
     687        if mode == "text_dict":
    677688            # first div contains text
    678689            pagedivs = pagedom.xpath("/div")
     
    697708        return "no text here"
    698709
     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
    699765   
    700766    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>
    33</tal:block>
Note: See TracChangeset for help on using the changeset viewer.