changeset 99:4738a696d265

Search function update
author abukhman
date Fri, 30 Apr 2010 16:36:00 +0200
parents 59677e4e0840
children 137459e3b378
files documentViewer.py
diffstat 1 files changed, 67 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/documentViewer.py	Thu Apr 29 16:05:16 2010 +0200
+++ b/documentViewer.py	Fri Apr 30 16:36:00 2010 +0200
@@ -96,6 +96,7 @@
     page_main_images = PageTemplateFile('zpt/page_main_images', globals())
     page_main_text = PageTemplateFile('zpt/page_main_text', globals())
     page_main_text_dict = PageTemplateFile('zpt/page_main_text_dict', globals())
+    page_main_xml = PageTemplateFile('zpt/page_main_xml', globals())
     head_main = PageTemplateFile('zpt/head_main', globals())
     docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())
     info_xml = PageTemplateFile('zpt/info_xml', globals())
@@ -172,7 +173,7 @@
         @param mode: defines how to access the document behind url 
         @param url: url which contains display information
         @param viewMode: if images display images, if text display text, default is auto (text,images or auto)
-        @param tocMode: type of 'table of contents' for navigation (thumbs, text, figures, search)
+        @param tocMode: type of 'table of contents' for navigation (thumbs, text, figures, none)
         @param querySearch: type of different search modes (fulltext, fulltextMorph, xpath, xquery, ftIndex, ftIndexMorph)
         '''
         
@@ -653,19 +654,33 @@
             pageinfo['numgroups'] = int(np / grpsize)
             if np % grpsize > 0:
                 pageinfo['numgroups'] += 1
-                
+        
+          
         pageinfo['viewMode'] = viewMode
         pageinfo['tocMode'] = tocMode
         pageinfo['query'] = self.REQUEST.get('query',' ')
         pageinfo['queryType'] = self.REQUEST.get('queryType',' ')
         pageinfo['querySearch'] =self.REQUEST.get('querySearch', 'fulltext')
+        
+        pageinfo['textPN'] = self.REQUEST.get('textPN','1')
+        
         pageinfo['tocPageSize'] = self.REQUEST.get('tocPageSize', '30')
         pageinfo['queryPageSize'] =self.REQUEST.get('queryPageSize', '20')
         pageinfo['tocPN'] = self.REQUEST.get('tocPN', '1')
-        #if 'tocSize_%s'%tocMode in docinfo:
+        toc = int (pageinfo['tocPN'])
+        pageinfo['textPages'] =int (toc)
+        
+        if 'tocSize_%s'%tocMode in docinfo:
+            tocSize = int(docinfo['tocSize_%s'%tocMode])
+            tocPageSize = int(pageinfo['tocPageSize'])
             # cached toc
-          # pageinfo['tocPN'] = min (int (docinfo['tocSize_%s'%tocMode])/int(pageinfo['tocPageSize']),int(pageinfo['tocPN']))
-               
+           
+            if tocSize%tocPageSize>0:
+                tocPages=tocSize/tocPageSize+1
+            else:
+                tocPages=tocSize/tocPageSize
+            pageinfo['tocPN'] = min (tocPages,toc)
+                     
         pageinfo['searchPN'] =self.REQUEST.get('searchPN','1')
         pageinfo['sn'] =self.REQUEST.get('sn','1')
 
@@ -682,27 +697,47 @@
         viewMode=  pageinfo['viewMode']
         tocMode = pageinfo['tocMode']
         tocPN = pageinfo['tocPN']
-        pagexml=self.template.fulltextclient.eval("/mpdl/interface/doc-query.xql","document=%s&mode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&sn=%s"%(docpath, 'text', queryType, query, pagesize, pn, sn) ,outputUnicode=False)           
+        
+        page=self.template.fulltextclient.eval("/mpdl/interface/doc-query.xql","document=%s&mode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&sn=%s"%(docpath, 'text', queryType, query, pagesize, pn, sn) ,outputUnicode=False)                
+        pagexm = page.replace('?document=/echo/la/Benedetti_1585.xml','?url=/mpiwg/online/permanent/library/163127KK')
+        pagexml=pagexm.replace('mode=text','mode=texttool')
         pagedom = Parse(pagexml)
-        pagedivs = pagedom.xpath("//div[@class='queryResultPage']")
         
-        selfurl = self.absolute_url()
+        if (queryType=="fulltext")or(queryType=="fulltextMorph")or(queryType=="xpath")or(queryType=="xquery"):
+            pagedivs = pagedom.xpath("//div[@class='queryResultPage']")
+            selfurl = self.absolute_url()
+            page = pagexml.replace('page-fragment.xql?document=/echo/la/Benedetti_1585.xml','%s?url=/mpiwg/online/permanent/library/163127KK&viewMode=%s&tocMode=%s&tocPN=%s&query=%s&queryType=%s'%(selfurl, viewMode, tocMode, tocPN, query, queryType))
+            text =page.replace('mode=text','mode=texttool')
+            return text
         
-        page = pagexml.replace('page-fragment.xql?document=/echo/la/Benedetti_1585.xml','%s?url=/mpiwg/online/permanent/library/163127KK&viewMode=%s&tocMode=%s&tocPN=%s&query=%s&queryType=%s'%(selfurl, viewMode, tocMode, tocPN, query, queryType))
-        text =page.replace('mode=text','mode=texttool')
-        href = text.replace('lt/lex.xql','%s/template/head_main_voc'%selfurl)
-        lemma= href.replace('lt/lemma.xql','%s/template/head_main_lemma'%selfurl)
-        #logging.debug("documentViewer (gettoc) lemma: %s"%(lemma))
+        if (queryType=="ftIndex")or(queryType=="ftIndexMorph"):
+            pagedivs= pagedom.xpath("//div[@class='queryResultPage']")
+            if len(pagedivs)>0:
+                pagenode=pagedivs[0]
+                links=pagenode.xpath("//a")
+                for l in links:
+                    hrefNode = l.getAttributeNodeNS(None, u"href")
+                    if hrefNode:
+                        href = hrefNode.nodeValue
+                        if href.startswith('../lt/lex.xql'):
+                            selfurl = self.absolute_url()
+                            hrefNode.nodeValue = href.replace('lt/lex.xql','%s/template/head_main_voc'%selfurl)
+                            
+                                    
+                            
+                            l.setAttributeNS(None, 'target', '_blank')
+                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=200, scrollbars=1'); return false;")
+                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
+                        if href.startswith('../lt/lemma.xql'):
+                            selfurl = self.absolute_url()
+                            hrefNode.nodeValue = href.replace('lt/lemma.xql','%s/template/head_main_lemma'%selfurl)        
+                            l.setAttributeNS(None, 'target', '_blank')
+                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=200, scrollbars=1'); return false;")
+                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
+                return serializeNode(pagenode)
         
-        return lemma
+        return "no text here"   
                        
-    
-        #if len(pagedivs) > 0:
-        #    pagenode = pagedom[0]
-        #    return serializeNode(pagenode)
-        #else:
-        #    return "xaxa"
-
     def getNumPages(self,docinfo=None):
         """get list of pages from fulltext and put in docinfo"""
         xquery = '//pb'
@@ -725,10 +760,6 @@
         #tocPN = pageinfo['tocPN']
   
         pagexml=self.template.fulltextclient.eval("/mpdl/interface/page-fragment.xql", "document=%s&mode=%s&pn=%s"%(docpath,textmode,pn), outputUnicode=False)
-        #######
-        #page = pagexml.replace('page-fragment.xql?document=/echo/la/Benedetti_1585.xml','%s?url=/mpiwg/online/permanent/library/163127KK&viewMode=%s&tocMode=%s&tocPN=%s'%(selfurl, viewMode, tocMode, tocPN))
-        #text =page.replace('mode=text','mode=texttool')
-        #######
         # post-processing downloaded xml
         pagedom = Parse(pagexml)
         # plain text mode
@@ -739,7 +770,12 @@
             if len(pagedivs) > 0:
                 pagenode = pagedivs[0]
                 return serializeNode(pagenode)
-
+        if mode == "xml":
+              # first div contains text
+              pagedivs = pagedom.xpath("/div")
+              if len(pagedivs) > 0:
+                  pagenode = pagedivs[0]
+                  return serializeNode(pagenode)
         # text-with-links mode
         if mode == "text_dict":
             # first div contains text
@@ -760,11 +796,15 @@
                             hrefNode.nodeValue = href.replace('lt/lex.xql','%s/template/head_main_voc'%selfurl)
                             # add target
                             l.setAttributeNS(None, 'target', '_blank')
+                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=700, scrollbars=1'); return false;")
+                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
                             
                         if href.startswith('lt/lemma.xql'):    
                             selfurl = self.absolute_url()
                             hrefNode.nodeValue = href.replace('lt/lemma.xql','%s/template/head_main_lemma'%selfurl)
                             l.setAttributeNS(None, 'target', '_blank')
+                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=700, scrollbars=1'); return false;")
+                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
                 return serializeNode(pagenode)
         
         return "no text here"
@@ -775,7 +815,7 @@
         return pagexml
     
     def getLemma(self, lemma=None, language=None):
-        """lemma"""
+        """simular words lemma """
         pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lemma.xql","lemma=%s&language=%s"%(lemma,language),outputUnicode=False)
         return pagexml