Mercurial > hg > documentViewer
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""" |