Changeset 130:5c779d7b5f71 in documentViewer
- Timestamp:
- Jun 17, 2010, 4:48:14 PM (15 years ago)
- Branch:
- default
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
__init__.py
r21 r130 1 1 import documentViewer 2 2 import MpdlXmlTextServer 3 3 4 4 def initialize(context): … … 19 19 ) 20 20 ) 21 22 context.registerClass( 23 MpdlXmlTextServer.MpdlXmlTextServer, 24 constructors = ( 25 MpdlXmlTextServer.manage_addMpdlXmlTextServerForm, 26 MpdlXmlTextServer.manage_addMpdlXmlTextServer 27 ) 28 ) 21 29 -
documentViewer.py
r128 r130 3 3 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate 4 4 from Products.PageTemplates.PageTemplateFile import PageTemplateFile 5 from Products.PythonScripts.standard import url_quote6 5 from AccessControl import ClassSecurityInfo 7 6 from AccessControl import getSecurityManager 8 7 from Globals import package_home 9 8 10 from Ft.Xml .Domlette import NonvalidatingReader9 from Ft.Xml import EMPTY_NAMESPACE, Parse 11 10 from Ft.Xml.Domlette import PrettyPrint, Print 12 from Ft.Xml import EMPTY_NAMESPACE, Parse13 14 from xml.dom.minidom import parse, parseString15 16 17 18 import Ft.Xml.XPath19 import cStringIO20 import xmlrpclib21 11 import os.path 22 12 import sys 23 import cgi24 13 import urllib 14 import urllib2 25 15 import logging 26 16 import math 27 28 17 import urlparse 29 from types import * 18 import cStringIO 30 19 31 20 def logger(txt,method,txt2): … … 66 55 67 56 68 import socket 69 70 def urlopen(url,timeout=2): 71 """urlopen mit timeout""" 72 socket.setdefaulttimeout(timeout) 73 ret=urllib.urlopen(url) 74 socket.setdefaulttimeout(5) 75 return ret 57 def getHttpData(url, data=None, num_tries=3, timeout=10): 58 """returns result from url+data HTTP request""" 59 # we do GET (by appending data to url) 60 if isinstance(data, str) or isinstance(data, unicode): 61 # if data is string then append 62 url = "%s?%s"%(url,data) 63 elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple): 64 # urlencode 65 url = "%s?%s"%(url,urllib.urlencode(data)) 66 67 response = None 68 errmsg = None 69 for cnt in range(num_tries): 70 try: 71 logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url)) 72 if sys.version_info < (2, 6): 73 # set timeout on socket -- ugly :-( 74 import socket 75 socket.setdefaulttimeout(float(timeout)) 76 response = urllib2.urlopen(url) 77 else: 78 response = urllib2.urlopen(url,timeout=float(timeout)) 79 # check result? 80 break 81 except urllib2.HTTPError, e: 82 logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e)) 83 errmsg = str(e) 84 # stop trying 85 break 86 except urllib2.URLError, e: 87 logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e)) 88 errmsg = str(e) 89 # stop trying 90 #break 91 92 if response is not None: 93 data = response.read() 94 response.close() 95 return data 96 97 raise IOError("ERROR fetching HTTP data from %s: %s"%(url,errmsg)) 98 #return None 99 76 100 77 101 … … 81 105 class documentViewer(Folder): 82 106 """document viewer""" 83 #textViewerUrl="http://127.0.0.1:8080/HFQP/testXSLT/getPage?"84 85 107 meta_type="Document viewer" 86 108 … … 102 124 docuviewer_css = PageTemplateFile('css/docuviewer.css', globals()) 103 125 info_xml = PageTemplateFile('zpt/info_xml', globals()) 104 126 127 105 128 thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals()) 106 129 security.declareProtected('View management screens','changeDocumentViewerForm') … … 122 145 self._setObject('template',templateFolder) # old style 123 146 try: 124 from Products.XMLRpcTools.XMLRpcTools import XMLRpcServerProxy125 xmlRpcClient = XMLRpcServerProxy(id='fulltextclient', serverUrl=textServerName, use_xmlrpc=False)147 import MpdlXmlTextServer 148 textServer = MpdlXmlTextServer(id='fulltextclient') 126 149 #templateFolder['fulltextclient'] = xmlRpcClient 127 templateFolder._setObject('fulltextclient', xmlRpcClient)150 templateFolder._setObject('fulltextclient',textServer) 128 151 except Exception, e: 129 logging.error("Unable to create XMLRpcToolsfor fulltextclient: "+str(e))152 logging.error("Unable to create MpdlXmlTextServer for fulltextclient: "+str(e)) 130 153 try: 131 154 from Products.zogiLib.zogiLib import zogiLib … … 136 159 logging.error("Unable to create zogiLib for zogilib: "+str(e)) 137 160 138 161 162 # proxy text server methods to fulltextclient 163 def getTextPage(self, **args): 164 """get page""" 165 return self.template.fulltextclient.getTextPage(**args) 166 167 def getQuery(self, **args): 168 """get query""" 169 return self.template.fulltextclient.getQuery(**args) 170 171 def getSearch(self, **args): 172 """get search""" 173 return self.template.fulltextclient.getSearch(**args) 174 175 def getNumPages(self, **args): 176 """get numpages""" 177 return self.template.fulltextclient.getNumPages(**args) 178 179 def getTranslate(self, **args): 180 """get translate""" 181 return self.template.fulltextclient.getTranslate(**args) 182 183 def getLemma(self, **args): 184 """get lemma""" 185 return self.template.fulltextclient.getLemma(**args) 186 187 def getToc(self, **args): 188 """get toc""" 189 return self.template.fulltextclient.getToc(**args) 190 191 def getTocPage(self, **args): 192 """get tocpage""" 193 return self.template.fulltextclient.getTocPage(**args) 194 195 139 196 security.declareProtected('View','thumbs_rss') 140 197 def thumbs_rss(self,mode,url,viewMode="auto",start=None,pn=1): … … 161 218 162 219 if viewMode=="auto": # automodus gewaehlt 163 if docinfo. get("textURL",'') and self.textViewerUrl: #texturl gesetzt und textViewer konfiguriert220 if docinfo.has_key("textURL") or docinfo.has_key('textURLPath'): #texturl gesetzt und textViewer konfiguriert 164 221 viewMode="text" 165 222 else: … … 197 254 198 255 if viewMode=="auto": # automodus gewaehlt 199 if docinfo. get("textURL",''): #texturl gesetzt und textViewer konfiguriert256 if docinfo.has_key("textURL") or docinfo.has_key('textURLPath'): #texturl gesetzt und textViewer konfiguriert 200 257 viewMode="text_dict" 201 258 else: … … 265 322 266 323 # quote values and assemble into query string 267 logging. info("XYXXXXX: %s"%repr(params.items()))324 logging.debug("XYXXXXX: %s"%repr(params.items())) 268 325 ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()]) 269 326 url=self.REQUEST['URL1']+"?"+ps … … 284 341 """returns if access to the resource is granted""" 285 342 access = docinfo.get('accessType', None) 286 logg er("documentViewer (accessOK)", logging.INFO, "access type %s"%access)343 logging.debug("documentViewer (accessOK) access type %s"%access) 287 344 if access is not None and access == 'free': 288 logg er("documentViewer (accessOK)", logging.INFO, "access is free")345 logging.debug("documentViewer (accessOK) access is free") 289 346 return True 290 347 elif access is None or access in self.authgroups: … … 297 354 return False 298 355 299 logg er("documentViewer (accessOK)", logging.INFO, "unknown access type %s"%access)356 logging.debug("documentViewer (accessOK) unknown access type %s"%access) 300 357 return False 301 358 … … 303 360 def getDirinfoFromDigilib(self,path,docinfo=None,cut=0): 304 361 """gibt param von dlInfo aus""" 305 num_retries = 3306 362 if docinfo is None: 307 363 docinfo = {} … … 313 369 infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path 314 370 315 logger("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo from %s"%(infoUrl)) 316 317 for cnt in range(num_retries): 318 try: 319 # dom = NonvalidatingReader.parseUri(imageUrl) 320 txt=urllib.urlopen(infoUrl).read() 321 dom = Parse(txt) 322 break 323 except: 324 logger("documentViewer (getdirinfofromdigilib)", logging.ERROR, "error reading %s (try %d)"%(infoUrl,cnt)) 325 else: 371 logging.debug("documentViewer (getparamfromdigilib) dirInfo from %s"%(infoUrl)) 372 373 txt = getHttpData(infoUrl) 374 if txt is None: 326 375 raise IOError("Unable to get dir-info from %s"%(infoUrl)) 327 376 377 dom = Parse(txt) 328 378 sizes=dom.xpath("//dir/size") 329 logg er("documentViewer (getparamfromdigilib)", logging.INFO, "dirInfo:size"%sizes)379 logging.debug("documentViewer (getparamfromdigilib) dirInfo:size"%sizes) 330 380 331 381 if sizes: … … 341 391 def getIndexMeta(self, url): 342 392 """returns dom of index.meta document at url""" 343 num_retries = 3344 393 dom = None 345 394 metaUrl = None … … 353 402 if not metaUrl.endswith("index.meta"): 354 403 metaUrl += "/index.meta" 355 logging.debug("METAURL: %s"%metaUrl)356 for cnt in range(num_retries):357 try:358 # patch dirk encoding fehler treten dann nicht mehr auf359 # dom = NonvalidatingReader.parseUri(metaUrl)360 txt=urllib.urlopen(metaUrl).read()361 dom = Parse(txt)362 break363 except:364 logger("ERROR documentViewer (getIndexMeta)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])365 404 366 if dom is None: 405 logging.debug("(getIndexMeta): METAURL: %s"%metaUrl) 406 txt=getHttpData(metaUrl) 407 if txt is None: 367 408 raise IOError("Unable to read index meta from %s"%(url)) 368 409 410 dom = Parse(txt) 369 411 return dom 370 412 371 413 def getPresentationInfoXML(self, url): 372 414 """returns dom of info.xml document at url""" 373 num_retries = 3374 415 dom = None 375 416 metaUrl = None … … 382 423 metaUrl=server+url.replace("/mpiwg/online","") 383 424 384 for cnt in range(num_retries): 385 try: 386 # patch dirk encoding fehler treten dann nicht mehr auf 387 # dom = NonvalidatingReader.parseUri(metaUrl) 388 txt=urllib.urlopen(metaUrl).read() 389 dom = Parse(txt) 390 break 391 except: 392 logger("ERROR documentViewer (getPresentationInfoXML)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) 393 394 if dom is None: 425 txt=getHttpData(metaUrl) 426 if txt is None: 395 427 raise IOError("Unable to read infoXMLfrom %s"%(url)) 396 428 429 dom = Parse(txt) 397 430 return dom 398 431 … … 400 433 def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None,cut=0): 401 434 """gets authorization info from the index.meta file at path or given by dom""" 402 logg er("documentViewer (getauthinfofromindexmeta)", logging.INFO,"path: %s"%(path))435 logging.debug("documentViewer (getauthinfofromindexmeta) path: %s"%(path)) 403 436 404 437 access = None … … 476 509 def getDocinfoFromTextTool(self, url, dom=None, docinfo=None): 477 510 """parse texttool tag in index meta""" 478 logg er("documentViewer (getdocinfofromtexttool)", logging.INFO, "url: %s" % (url))511 logging.debug("documentViewer (getdocinfofromtexttool) url: %s" % (url)) 479 512 if docinfo is None: 480 513 docinfo = {} … … 491 524 archiveName = getTextFromNode(archiveNames[0]) 492 525 else: 493 logg er("documentViewer (getdocinfofromtexttool)", logging.WARNING, "resource/name missing in: %s" % (url))526 logging.warning("documentViewer (getdocinfofromtexttool) resource/name missing in: %s" % (url)) 494 527 495 528 archivePaths = dom.xpath("//resource/archive-path") … … 503 536 else: 504 537 # try to get archive-path from url 505 logg er("documentViewer (getdocinfofromtexttool)", logging.WARNING, "resource/archive-path missing in: %s" % (url))538 logging.warning("documentViewer (getdocinfofromtexttool) resource/archive-path missing in: %s" % (url)) 506 539 if (not url.startswith('http')): 507 540 archivePath = url.replace('index.meta', '') … … 536 569 viewerUrl = getTextFromNode(viewerUrls[0]) 537 570 docinfo['viewerURL'] = viewerUrl 538 571 572 # old style text URL 539 573 textUrls = dom.xpath("//texttool/text") 540 574 if textUrls and (len(textUrls) > 0): … … 548 582 docinfo['textURL'] = textUrl 549 583 584 # new style text-url-path 550 585 textUrls = dom.xpath("//texttool/text-url-path") 551 586 if textUrls and (len(textUrls) > 0): … … 595 630 def getDocinfoFromImagePath(self,path,docinfo=None,cut=0): 596 631 """path ist the path to the images it assumes that the index.meta file is one level higher.""" 597 logg er("documentViewer (getdocinfofromimagepath)", logging.INFO,"path: %s"%(path))632 logging.debug("documentViewer (getdocinfofromimagepath) path: %s"%(path)) 598 633 if docinfo is None: 599 634 docinfo = {} … … 605 640 for x in range(cut): 606 641 path=getParentDir(path) 607 logging. error("PATH:"+path)642 logging.debug("documentViewer (getdocinfofromimagepath) PATH:"+path) 608 643 imageUrl=self.digilibBaseUrl+"/servlet/Scaler?fn="+path 609 644 docinfo['imageURL'] = imageUrl … … 617 652 def getDocinfo(self, mode, url): 618 653 """returns docinfo depending on mode""" 619 logg er("documentViewer (getdocinfo)", logging.INFO,"mode: %s, url: %s"%(mode,url))654 logging.debug("documentViewer (getdocinfo) mode: %s, url: %s"%(mode,url)) 620 655 # look for cached docinfo in session 621 656 if self.REQUEST.SESSION.has_key('docinfo'): … … 623 658 # check if its still current 624 659 if docinfo is not None and docinfo.get('mode') == mode and docinfo.get('url') == url: 625 logg er("documentViewer (getdocinfo)", logging.INFO,"docinfo in session: %s"%docinfo)660 logging.debug("documentViewer (getdocinfo) docinfo in session: %s"%docinfo) 626 661 return docinfo 627 662 # new docinfo … … 634 669 docinfo = self.getDocinfoFromImagePath(url, docinfo=docinfo,cut=1) 635 670 else: 636 logg er("documentViewer (getdocinfo)", logging.ERROR,"unknown mode!")671 logging.error("documentViewer (getdocinfo) unknown mode: %s!"%mode) 637 672 raise ValueError("Unknown mode %s! Has to be one of 'texttool','imagepath','filepath'."%(mode)) 638 673 639 logg er("documentViewer (getdocinfo)", logging.INFO,"docinfo: %s"%docinfo)674 logging.debug("documentViewer (getdocinfo) docinfo: %s"%docinfo) 640 675 self.REQUEST.SESSION['docinfo'] = docinfo 641 676 return docinfo … … 687 722 pageinfo['sn'] =self.REQUEST.get('sn','') 688 723 return pageinfo 689 690 def getSearch(self, pn=1, pageinfo=None, docinfo=None, query=None, queryType=None, lemma=None):691 """get search list"""692 docpath = docinfo['textURLPath']693 url = docinfo['url']694 logging.debug("documentViewer (gettoc) docpath: %s"%(docpath))695 logging.debug("documentViewer (gettoc) url: %s"%(url))696 pagesize = pageinfo['queryPageSize']697 pn = pageinfo['searchPN']698 sn = pageinfo['sn']699 highlightQuery = pageinfo['highlightQuery']700 query =pageinfo['query']701 queryType =pageinfo['queryType']702 viewMode= pageinfo['viewMode']703 tocMode = pageinfo['tocMode']704 tocPN = pageinfo['tocPN']705 selfurl = self.absolute_url()706 page=self.template.fulltextclient.eval("/mpdl/interface/doc-query.xql","document=%s&mode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&sn=%s&viewMode=%s&highlightQuery=%s"%(docpath, 'text', queryType, query, pagesize, pn, sn, viewMode,highlightQuery) ,outputUnicode=False)707 pagexml = page.replace('?document=%s'%str(docpath),'?url=%s'%url)708 pagedom = Parse(pagexml)709 if (queryType=="fulltext")or(queryType=="xpath")or(queryType=="xquery")or(queryType=="fulltextMorphLemma"):710 pagedivs = pagedom.xpath("//div[@class='queryResultPage']")711 if len(pagedivs)>0:712 pagenode=pagedivs[0]713 links=pagenode.xpath("//a")714 for l in links:715 hrefNode = l.getAttributeNodeNS(None, u"href")716 if hrefNode:717 href = hrefNode.nodeValue718 if href.startswith('page-fragment.xql'):719 selfurl = self.absolute_url()720 pagexml=href.replace('mode=text','mode=texttool&viewMode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&tocMode=%s&searchPN=%s&tocPN=%s'%(viewMode,queryType,query,pagesize,pn,tocMode,pn,tocPN))721 hrefNode.nodeValue = pagexml.replace('page-fragment.xql','%s'%selfurl)722 return serializeNode(pagenode)723 if (queryType=="fulltextMorph"):724 pagedivs = pagedom.xpath("//div[@class='queryResult']")725 if len(pagedivs)>0:726 pagenode=pagedivs[0]727 links=pagenode.xpath("//a")728 for l in links:729 hrefNode = l.getAttributeNodeNS(None, u"href")730 if hrefNode:731 href = hrefNode.nodeValue732 if href.startswith('page-fragment.xql'):733 selfurl = self.absolute_url()734 pagexml=href.replace('mode=text','mode=texttool&viewMode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&tocMode=%s&searchPN=%s&tocPN=%s'%(viewMode,queryType,query,pagesize,pn,tocMode,pn,tocPN))735 hrefNode.nodeValue = pagexml.replace('page-fragment.xql','%s'%selfurl)736 if href.startswith('../lt/lemma.xql'):737 hrefNode.nodeValue = href.replace('../lt/lemma.xql','%s/template/head_main_lemma_New'%(selfurl))738 l.setAttributeNS(None, 'target', '_blank')739 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=400, scrollbars=1'); return false;")740 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')741 pagedivs = pagedom.xpath("//div[@class='queryResultMorphExpansion']")742 return serializeNode(pagenode)743 if (queryType=="ftIndex")or(queryType=="ftIndexMorph"):744 pagedivs= pagedom.xpath("//div[@class='queryResultPage']")745 if len(pagedivs)>0:746 pagenode=pagedivs[0]747 links=pagenode.xpath("//a")748 for l in links:749 hrefNode = l.getAttributeNodeNS(None, u"href")750 if hrefNode:751 href = hrefNode.nodeValue752 hrefNode.nodeValue=href.replace('mode=text','mode=texttool&viewMode=%s&tocMode=%s&tocPN=%s&pn=%s'%(viewMode,tocMode,tocPN,pn))753 if href.startswith('../lt/lex.xql'):754 hrefNode.nodeValue = href.replace('../lt/lex.xql','%s/template/head_main_voc'%selfurl)755 l.setAttributeNS(None, 'target', '_blank')756 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=400, scrollbars=1'); return false;")757 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')758 if href.startswith('../lt/lemma.xql'):759 hrefNode.nodeValue = href.replace('../lt/lemma.xql','%s/template/head_main_lemma'%selfurl)760 l.setAttributeNS(None, 'target', '_blank')761 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=400, scrollbars=1'); return false;")762 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')763 return serializeNode(pagenode)764 return "no text here"765 766 def getNumPages(self,docinfo=None):767 """get list of pages from fulltext and put in docinfo"""768 xquery = '//pb'769 text = self.template.fulltextclient.eval("/mpdl/interface/xquery.xql", "document=%s&xquery=%s"%(docinfo['textURLPath'],xquery))770 # TODO: better processing of the page list. do we need the info somewhere else also?771 docinfo['numPages'] = text.count("<pb ")772 return docinfo773 774 def getTextPage(self, mode="text", pn=1, docinfo=None, pageinfo=None, highlightQuery=None,sn=None, viewMode=None, tocMode=None, tocPN=None):775 """returns single page from fulltext"""776 docpath = docinfo['textURLPath']777 path = docinfo['textURLPath']778 url = docinfo['url']779 viewMode= pageinfo['viewMode']780 tocMode = pageinfo['tocMode']781 tocPN = pageinfo['tocPN']782 selfurl = self.absolute_url()783 if mode == "text_dict":784 textmode = "textPollux"785 else:786 textmode = mode787 788 textParam = "document=%s&mode=%s&pn=%s"%(docpath,textmode,pn)789 if highlightQuery is not None:790 textParam +="&highlightQuery=%s&sn=%s"%(highlightQuery,sn)791 pagexml=self.template.fulltextclient.eval("/mpdl/interface/page-fragment.xql", textParam, outputUnicode=False)792 pagedom = Parse(pagexml)793 # plain text mode794 if mode == "text":795 # first div contains text796 pagedivs = pagedom.xpath("/div")797 if len(pagedivs) > 0:798 pagenode = pagedivs[0]799 links = pagenode.xpath("//a")800 for l in links:801 hrefNode = l.getAttributeNodeNS(None, u"href")802 if hrefNode:803 href= hrefNode.nodeValue804 if href.startswith('#note-'):805 hrefNode.nodeValue = href.replace('#note-',"?url=%s&viewMode=%s&tocMode=%s&tocPN=%s&pn=%s#note-"%(url,viewMode,tocMode,tocPN,pn))806 return serializeNode(pagenode)807 if mode == "xml":808 # first div contains text809 pagedivs = pagedom.xpath("/div")810 if len(pagedivs) > 0:811 pagenode = pagedivs[0]812 return serializeNode(pagenode)813 if mode == "pureXml":814 # first div contains text815 pagedivs = pagedom.xpath("/div")816 if len(pagedivs) > 0:817 pagenode = pagedivs[0]818 return serializeNode(pagenode)819 # text-with-links mode820 if mode == "text_dict":821 # first div contains text822 pagedivs = pagedom.xpath("/div")823 if len(pagedivs) > 0:824 pagenode = pagedivs[0]825 # check all a-tags826 links = pagenode.xpath("//a")827 for l in links:828 hrefNode = l.getAttributeNodeNS(None, u"href")829 if hrefNode:830 # is link with href831 href = hrefNode.nodeValue832 if href.startswith('lt/lex.xql'):833 # is pollux link834 selfurl = self.absolute_url()835 # change href836 hrefNode.nodeValue = href.replace('lt/lex.xql','%s/template/head_main_voc'%selfurl)837 # add target838 l.setAttributeNS(None, 'target', '_blank')839 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=700, scrollbars=1'); return false;")840 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')841 if href.startswith('lt/lemma.xql'):842 selfurl = self.absolute_url()843 hrefNode.nodeValue = href.replace('lt/lemma.xql','%s/template/head_main_lemma'%selfurl)844 l.setAttributeNS(None, 'target', '_blank')845 l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=700, scrollbars=1'); return false;")846 l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')847 if href.startswith('#note-'):848 hrefNode.nodeValue = href.replace('#note-',"?url=%s&viewMode=%s&tocMode=%s&tocPN=%s&pn=%s#note-"%(url,viewMode,tocMode,tocPN,pn))849 return serializeNode(pagenode)850 return "no text here"851 852 def getTranslate(self, query=None, language=None):853 """translate into another languages"""854 pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lex.xql","document=&language="+str(language)+"&query="+url_quote(str(query)))855 return pagexml856 857 def getLemma(self, lemma=None, language=None):858 """simular words lemma """859 pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lemma.xql","document=&language="+str(language)+"&lemma="+url_quote(str(lemma)))860 return pagexml861 862 def getLemmaNew(self, query=None, language=None):863 """simular words lemma """864 pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lemma.xql","document=&language="+str(language)+"&lemma="+url_quote(str(query)))865 return pagexml866 867 def getQuery (self, docinfo=None, pageinfo=None, query=None, queryType=None, pn=1):868 """number of"""869 docpath = docinfo['textURLPath']870 pagesize = pageinfo['queryPageSize']871 pn = pageinfo['searchPN']872 query =pageinfo['query']873 queryType =pageinfo['queryType']874 tocSearch = 0875 tocDiv = None876 pagexml=self.template.fulltextclient.eval("/mpdl/interface/doc-query.xql","document=%s&mode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s"%(docpath, 'text', queryType, query, pagesize, pn) ,outputUnicode=False)877 pagedom = Parse(pagexml)878 numdivs = pagedom.xpath("//div[@class='queryResultHits']")879 tocSearch = int(getTextFromNode(numdivs[0]))880 tc=int((tocSearch/10)+1)881 logging.debug("documentViewer (gettoc) tc: %s"%(tc))882 return tc883 884 def getToc(self, mode="text", docinfo=None):885 """loads table of contents and stores in docinfo"""886 logging.debug("documentViewer (gettoc) mode: %s"%(mode))887 if mode == "none":888 return docinfo889 if 'tocSize_%s'%mode in docinfo:890 # cached toc891 return docinfo892 893 docpath = docinfo['textURLPath']894 # we need to set a result set size895 pagesize = 1000896 pn = 1897 if mode == "text":898 queryType = "toc"899 else:900 queryType = mode901 # number of entries in toc902 tocSize = 0903 tocDiv = None904 pagexml=self.template.fulltextclient.eval("/mpdl/interface/doc-query.xql", "document=%s&queryType=%s&queryResultPageSize=%s&queryResultPN=%s"%(docpath,queryType,pagesize,pn), outputUnicode=False)905 # post-processing downloaded xml906 pagedom = Parse(pagexml)907 # get number of entries908 numdivs = pagedom.xpath("//div[@class='queryResultHits']")909 if len(numdivs) > 0:910 tocSize = int(getTextFromNode(numdivs[0]))911 docinfo['tocSize_%s'%mode] = tocSize912 return docinfo913 914 def getTocPage(self, mode="text", pn=1, pageinfo=None, docinfo=None):915 """returns single page from the table of contents"""916 # TODO: this should use the cached TOC917 if mode == "text":918 queryType = "toc"919 else:920 queryType = mode921 docpath = docinfo['textURLPath']922 path = docinfo['textURLPath']923 pagesize = pageinfo['tocPageSize']924 pn = pageinfo['tocPN']925 url = docinfo['url']926 selfurl = self.absolute_url()927 viewMode= pageinfo['viewMode']928 tocMode = pageinfo['tocMode']929 tocPN = pageinfo['tocPN']930 pagexml=self.template.fulltextclient.eval("/mpdl/interface/doc-query.xql", "document=%s&queryType=%s&queryResultPageSize=%s&queryResultPN=%s"%(docpath,queryType, pagesize, pn), outputUnicode=False)931 page = pagexml.replace('page-fragment.xql?document=%s'%str(path),'%s?url=%s&viewMode=%s&tocMode=%s&tocPN=%s'%(selfurl,url, viewMode, tocMode, tocPN))932 text = page.replace('mode=image','mode=texttool')933 return text934 724 935 725 def changeDocumentViewer(self,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=5,authgroups='mpiwg',RESPONSE=None): -
version.txt
r85 r130 1 DocumentViewer 0. 3.01 DocumentViewer 0.5.1
Note: See TracChangeset
for help on using the changeset viewer.