comparison documentViewer.py @ 99:4738a696d265

Search function update
author abukhman
date Fri, 30 Apr 2010 16:36:00 +0200
parents 2b8fd19432fb
children 137459e3b378
comparison
equal deleted inserted replaced
98:59677e4e0840 99:4738a696d265
94 toc_text = PageTemplateFile('zpt/toc_text', globals()) 94 toc_text = PageTemplateFile('zpt/toc_text', globals())
95 toc_figures = PageTemplateFile('zpt/toc_figures', globals()) 95 toc_figures = PageTemplateFile('zpt/toc_figures', globals())
96 page_main_images = PageTemplateFile('zpt/page_main_images', globals()) 96 page_main_images = PageTemplateFile('zpt/page_main_images', globals())
97 page_main_text = PageTemplateFile('zpt/page_main_text', globals()) 97 page_main_text = PageTemplateFile('zpt/page_main_text', globals())
98 page_main_text_dict = PageTemplateFile('zpt/page_main_text_dict', globals()) 98 page_main_text_dict = PageTemplateFile('zpt/page_main_text_dict', globals())
99 page_main_xml = PageTemplateFile('zpt/page_main_xml', globals())
99 head_main = PageTemplateFile('zpt/head_main', globals()) 100 head_main = PageTemplateFile('zpt/head_main', globals())
100 docuviewer_css = PageTemplateFile('css/docuviewer.css', globals()) 101 docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())
101 info_xml = PageTemplateFile('zpt/info_xml', globals()) 102 info_xml = PageTemplateFile('zpt/info_xml', globals())
102 103
103 thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals()) 104 thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals())
170 ''' 171 '''
171 view it 172 view it
172 @param mode: defines how to access the document behind url 173 @param mode: defines how to access the document behind url
173 @param url: url which contains display information 174 @param url: url which contains display information
174 @param viewMode: if images display images, if text display text, default is auto (text,images or auto) 175 @param viewMode: if images display images, if text display text, default is auto (text,images or auto)
175 @param tocMode: type of 'table of contents' for navigation (thumbs, text, figures, search) 176 @param tocMode: type of 'table of contents' for navigation (thumbs, text, figures, none)
176 @param querySearch: type of different search modes (fulltext, fulltextMorph, xpath, xquery, ftIndex, ftIndexMorph) 177 @param querySearch: type of different search modes (fulltext, fulltextMorph, xpath, xquery, ftIndex, ftIndexMorph)
177 ''' 178 '''
178 179
179 logging.debug("documentViewer (index) mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn)) 180 logging.debug("documentViewer (index) mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn))
180 181
651 np = int(docinfo['numPages']) 652 np = int(docinfo['numPages'])
652 pageinfo['end'] = min(pageinfo['end'], np) 653 pageinfo['end'] = min(pageinfo['end'], np)
653 pageinfo['numgroups'] = int(np / grpsize) 654 pageinfo['numgroups'] = int(np / grpsize)
654 if np % grpsize > 0: 655 if np % grpsize > 0:
655 pageinfo['numgroups'] += 1 656 pageinfo['numgroups'] += 1
656 657
658
657 pageinfo['viewMode'] = viewMode 659 pageinfo['viewMode'] = viewMode
658 pageinfo['tocMode'] = tocMode 660 pageinfo['tocMode'] = tocMode
659 pageinfo['query'] = self.REQUEST.get('query',' ') 661 pageinfo['query'] = self.REQUEST.get('query',' ')
660 pageinfo['queryType'] = self.REQUEST.get('queryType',' ') 662 pageinfo['queryType'] = self.REQUEST.get('queryType',' ')
661 pageinfo['querySearch'] =self.REQUEST.get('querySearch', 'fulltext') 663 pageinfo['querySearch'] =self.REQUEST.get('querySearch', 'fulltext')
664
665 pageinfo['textPN'] = self.REQUEST.get('textPN','1')
666
662 pageinfo['tocPageSize'] = self.REQUEST.get('tocPageSize', '30') 667 pageinfo['tocPageSize'] = self.REQUEST.get('tocPageSize', '30')
663 pageinfo['queryPageSize'] =self.REQUEST.get('queryPageSize', '20') 668 pageinfo['queryPageSize'] =self.REQUEST.get('queryPageSize', '20')
664 pageinfo['tocPN'] = self.REQUEST.get('tocPN', '1') 669 pageinfo['tocPN'] = self.REQUEST.get('tocPN', '1')
665 #if 'tocSize_%s'%tocMode in docinfo: 670 toc = int (pageinfo['tocPN'])
671 pageinfo['textPages'] =int (toc)
672
673 if 'tocSize_%s'%tocMode in docinfo:
674 tocSize = int(docinfo['tocSize_%s'%tocMode])
675 tocPageSize = int(pageinfo['tocPageSize'])
666 # cached toc 676 # cached toc
667 # pageinfo['tocPN'] = min (int (docinfo['tocSize_%s'%tocMode])/int(pageinfo['tocPageSize']),int(pageinfo['tocPN'])) 677
668 678 if tocSize%tocPageSize>0:
679 tocPages=tocSize/tocPageSize+1
680 else:
681 tocPages=tocSize/tocPageSize
682 pageinfo['tocPN'] = min (tocPages,toc)
683
669 pageinfo['searchPN'] =self.REQUEST.get('searchPN','1') 684 pageinfo['searchPN'] =self.REQUEST.get('searchPN','1')
670 pageinfo['sn'] =self.REQUEST.get('sn','1') 685 pageinfo['sn'] =self.REQUEST.get('sn','1')
671 686
672 return pageinfo 687 return pageinfo
673 688
680 query =pageinfo['query'] 695 query =pageinfo['query']
681 queryType =pageinfo['queryType'] 696 queryType =pageinfo['queryType']
682 viewMode= pageinfo['viewMode'] 697 viewMode= pageinfo['viewMode']
683 tocMode = pageinfo['tocMode'] 698 tocMode = pageinfo['tocMode']
684 tocPN = pageinfo['tocPN'] 699 tocPN = pageinfo['tocPN']
685 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) 700
701 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)
702 pagexm = page.replace('?document=/echo/la/Benedetti_1585.xml','?url=/mpiwg/online/permanent/library/163127KK')
703 pagexml=pagexm.replace('mode=text','mode=texttool')
686 pagedom = Parse(pagexml) 704 pagedom = Parse(pagexml)
687 pagedivs = pagedom.xpath("//div[@class='queryResultPage']") 705
688 706 if (queryType=="fulltext")or(queryType=="fulltextMorph")or(queryType=="xpath")or(queryType=="xquery"):
689 selfurl = self.absolute_url() 707 pagedivs = pagedom.xpath("//div[@class='queryResultPage']")
690 708 selfurl = self.absolute_url()
691 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)) 709 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))
692 text =page.replace('mode=text','mode=texttool') 710 text =page.replace('mode=text','mode=texttool')
693 href = text.replace('lt/lex.xql','%s/template/head_main_voc'%selfurl) 711 return text
694 lemma= href.replace('lt/lemma.xql','%s/template/head_main_lemma'%selfurl) 712
695 #logging.debug("documentViewer (gettoc) lemma: %s"%(lemma)) 713 if (queryType=="ftIndex")or(queryType=="ftIndexMorph"):
696 714 pagedivs= pagedom.xpath("//div[@class='queryResultPage']")
697 return lemma 715 if len(pagedivs)>0:
716 pagenode=pagedivs[0]
717 links=pagenode.xpath("//a")
718 for l in links:
719 hrefNode = l.getAttributeNodeNS(None, u"href")
720 if hrefNode:
721 href = hrefNode.nodeValue
722 if href.startswith('../lt/lex.xql'):
723 selfurl = self.absolute_url()
724 hrefNode.nodeValue = href.replace('lt/lex.xql','%s/template/head_main_voc'%selfurl)
725
726
727
728 l.setAttributeNS(None, 'target', '_blank')
729 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=200, scrollbars=1'); return false;")
730 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
731 if href.startswith('../lt/lemma.xql'):
732 selfurl = self.absolute_url()
733 hrefNode.nodeValue = href.replace('lt/lemma.xql','%s/template/head_main_lemma'%selfurl)
734 l.setAttributeNS(None, 'target', '_blank')
735 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=200, scrollbars=1'); return false;")
736 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
737 return serializeNode(pagenode)
738
739 return "no text here"
698 740
699
700 #if len(pagedivs) > 0:
701 # pagenode = pagedom[0]
702 # return serializeNode(pagenode)
703 #else:
704 # return "xaxa"
705
706 def getNumPages(self,docinfo=None): 741 def getNumPages(self,docinfo=None):
707 """get list of pages from fulltext and put in docinfo""" 742 """get list of pages from fulltext and put in docinfo"""
708 xquery = '//pb' 743 xquery = '//pb'
709 text = self.template.fulltextclient.eval("/mpdl/interface/xquery.xql", "document=%s&xquery=%s"%(docinfo['textURLPath'],xquery)) 744 text = self.template.fulltextclient.eval("/mpdl/interface/xquery.xql", "document=%s&xquery=%s"%(docinfo['textURLPath'],xquery))
710 # TODO: better processing of the page list. do we need the info somewhere else also? 745 # TODO: better processing of the page list. do we need the info somewhere else also?
723 #viewMode= pageinfo['viewMode'] 758 #viewMode= pageinfo['viewMode']
724 #tocMode = pageinfo['tocMode'] 759 #tocMode = pageinfo['tocMode']
725 #tocPN = pageinfo['tocPN'] 760 #tocPN = pageinfo['tocPN']
726 761
727 pagexml=self.template.fulltextclient.eval("/mpdl/interface/page-fragment.xql", "document=%s&mode=%s&pn=%s"%(docpath,textmode,pn), outputUnicode=False) 762 pagexml=self.template.fulltextclient.eval("/mpdl/interface/page-fragment.xql", "document=%s&mode=%s&pn=%s"%(docpath,textmode,pn), outputUnicode=False)
728 #######
729 #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))
730 #text =page.replace('mode=text','mode=texttool')
731 #######
732 # post-processing downloaded xml 763 # post-processing downloaded xml
733 pagedom = Parse(pagexml) 764 pagedom = Parse(pagexml)
734 # plain text mode 765 # plain text mode
735 if mode == "text": 766 if mode == "text":
736 # first div contains text 767 # first div contains text
737 pagedivs = pagedom.xpath("/div") 768 pagedivs = pagedom.xpath("/div")
738 #queryResultPage 769 #queryResultPage
739 if len(pagedivs) > 0: 770 if len(pagedivs) > 0:
740 pagenode = pagedivs[0] 771 pagenode = pagedivs[0]
741 return serializeNode(pagenode) 772 return serializeNode(pagenode)
742 773 if mode == "xml":
774 # first div contains text
775 pagedivs = pagedom.xpath("/div")
776 if len(pagedivs) > 0:
777 pagenode = pagedivs[0]
778 return serializeNode(pagenode)
743 # text-with-links mode 779 # text-with-links mode
744 if mode == "text_dict": 780 if mode == "text_dict":
745 # first div contains text 781 # first div contains text
746 pagedivs = pagedom.xpath("/div") 782 pagedivs = pagedom.xpath("/div")
747 if len(pagedivs) > 0: 783 if len(pagedivs) > 0:
758 selfurl = self.absolute_url() 794 selfurl = self.absolute_url()
759 # change href 795 # change href
760 hrefNode.nodeValue = href.replace('lt/lex.xql','%s/template/head_main_voc'%selfurl) 796 hrefNode.nodeValue = href.replace('lt/lex.xql','%s/template/head_main_voc'%selfurl)
761 # add target 797 # add target
762 l.setAttributeNS(None, 'target', '_blank') 798 l.setAttributeNS(None, 'target', '_blank')
799 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=700, scrollbars=1'); return false;")
800 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
763 801
764 if href.startswith('lt/lemma.xql'): 802 if href.startswith('lt/lemma.xql'):
765 selfurl = self.absolute_url() 803 selfurl = self.absolute_url()
766 hrefNode.nodeValue = href.replace('lt/lemma.xql','%s/template/head_main_lemma'%selfurl) 804 hrefNode.nodeValue = href.replace('lt/lemma.xql','%s/template/head_main_lemma'%selfurl)
767 l.setAttributeNS(None, 'target', '_blank') 805 l.setAttributeNS(None, 'target', '_blank')
806 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=700, scrollbars=1'); return false;")
807 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
768 return serializeNode(pagenode) 808 return serializeNode(pagenode)
769 809
770 return "no text here" 810 return "no text here"
771 811
772 def getTranslate(self, query=None, language=None): 812 def getTranslate(self, query=None, language=None):
773 """translate into another languages""" 813 """translate into another languages"""
774 pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lex.xql","query=%s&language=%s"%(query,language),outputUnicode=False) 814 pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lex.xql","query=%s&language=%s"%(query,language),outputUnicode=False)
775 return pagexml 815 return pagexml
776 816
777 def getLemma(self, lemma=None, language=None): 817 def getLemma(self, lemma=None, language=None):
778 """lemma""" 818 """simular words lemma """
779 pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lemma.xql","lemma=%s&language=%s"%(lemma,language),outputUnicode=False) 819 pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lemma.xql","lemma=%s&language=%s"%(lemma,language),outputUnicode=False)
780 return pagexml 820 return pagexml
781 821
782 def getQuery (self, docinfo=None, pageinfo=None, query=None, queryType=None, pn=1): 822 def getQuery (self, docinfo=None, pageinfo=None, query=None, queryType=None, pn=1):
783 """number of""" 823 """number of"""