--- documentViewer/MpdlXmlTextServer.py 2011/08/09 18:27:41 1.238.2.11 +++ documentViewer/MpdlXmlTextServer.py 2011/08/16 16:27:08 1.238.2.14 @@ -89,7 +89,7 @@ class MpdlXmlTextServer(SimpleItem): url = docinfo['url'] pagesize = pageinfo['queryPageSize'] pn = pageinfo.get('searchPN',1) - sn = pageinfo['sn'] + sn = pageinfo.get('sn',None) #TODO: is this s now? highlightQuery = pageinfo['highlightQuery'] query =pageinfo['query'] queryType =pageinfo['queryType'] @@ -257,7 +257,7 @@ class MpdlXmlTextServer(SimpleItem): if docinfo.get('numPages', 0) == 0: # seems to be text-only - update page count docinfo['numPages'] = np - pageinfo['end'] = min(pageinfo['end'], np) + #pageinfo['end'] = min(pageinfo['end'], np) pageinfo['numgroups'] = int(np / pageinfo['groupsize']) if np % pageinfo['groupsize'] > 0: pageinfo['numgroups'] += 1 @@ -269,7 +269,7 @@ class MpdlXmlTextServer(SimpleItem): def getTextPage(self, mode="text", pn=1, docinfo=None, pageinfo=None): """returns single page from fulltext""" logging.debug("getTextPage mode=%s, pn=%s"%(mode,pn)) - # check for cached text -- but this shouldn't be called twice + # check for cached text -- but ideally this shouldn't be called twice if pageinfo.has_key('textPage'): logging.debug("getTextPage: using cached text") return pageinfo['textPage'] @@ -287,7 +287,8 @@ class MpdlXmlTextServer(SimpleItem): tocMode = pageinfo.get('tocMode', None) tocPN = pageinfo.get('tocPN',None) characterNormalization = pageinfo.get('characterNormalization', None) - selfurl = docinfo['viewerUrl'] + + selfurl = docinfo['viewerUrl'] if mode == "dict" or mode == "text_dict": # dict is called textPollux in the backend @@ -322,12 +323,14 @@ class MpdlXmlTextServer(SimpleItem): # plain text mode if mode == "text": + # get full url assuming documentViewer is parent + selfurl = self.getLink() if pagediv is not None: links = pagediv.findall(".//a") for l in links: href = l.get('href') if href and href.startswith('#note-'): - href = href.replace('#note-',"?mode=%s&url=%s&viewMode=text&tocMode=%s&tocPN=%s&pn=%s#note-"%(urlmode,url,tocMode,tocPN,pn)) + href = href.replace('#note-',"%s#note-"%selfurl) l.set('href', href) return serialize(pagediv) @@ -335,6 +338,8 @@ class MpdlXmlTextServer(SimpleItem): # text-with-links mode elif mode == "dict": if pagediv is not None: + viewerurl = docinfo['viewerUrl'] + selfurl = self.getLink() # check all a-tags links = pagediv.findall(".//a") for l in links: @@ -343,14 +348,13 @@ class MpdlXmlTextServer(SimpleItem): if href: # is link with href if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql'): - # is pollux link - selfurl = self.absolute_url() - # change href - l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql','%s/head_main_voc'%selfurl)) - # add target + # is dictionary link - change href (keeping parameters) + l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql','%s/template/viewer_wordinfo'%viewerurl)) + # add target to open new page l.set('target', '_blank') - if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql'): + # TODO: is this needed? + if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql'): selfurl = self.absolute_url() l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql','%s/head_main_lemma'%selfurl)) l.set('target', '_blank') @@ -358,7 +362,8 @@ class MpdlXmlTextServer(SimpleItem): l.set('ondblclick', 'popupWin.focus();') if href.startswith('#note-'): - l.set('href', href.replace('#note-',"?mode=%s&url=%s&viewMode=text_dict&tocMode=%s&tocPN=%s&pn=%s#note-"%(urlmode,url,tocMode,tocPN,pn))) + # note link + l.set('href', href.replace('#note-',"%s#note-"%selfurl)) return serialize(pagediv) @@ -389,28 +394,10 @@ class MpdlXmlTextServer(SimpleItem): return "no text here" - # WTF: is this needed? - def getOrigPages(self, docinfo=None, pageinfo=None): - logging.debug("CALLED: getOrigPages!") - if not pageinfo.has_key('pageNumberOrig'): - logging.warning("getOrigPages: not in pageinfo!") - return None - - return pageinfo['pageNumberOrig'] - - # WTF: is this needed? - def getOrigPagesNorm(self, docinfo=None, pageinfo=None): - logging.debug("CALLED: getOrigPagesNorm!") - if not pageinfo.has_key('pageNumberOrigNorm'): - logging.warning("getOrigPagesNorm: not in pageinfo!") - return None - - return pageinfo['pageNumberOrigNorm'] - # TODO: should be getWordInfo - def getTranslate(self, word=None, language=None): - """translate into another languages""" - data = self.getServerData("lt/wordInfo.xql","language="+str(language)+"&word="+urllib.quote(word)+"&output=html") + def getWordInfo(self, word='', language='', display=''): + """show information (like dictionaries) about word""" + data = self.getServerData("lt/wordInfo.xql","language=%s&word=%s&display=%s&output=html"%(language,urllib.quote(word),urllib.quote(display))) return data # WTF: what does this do? @@ -492,7 +479,7 @@ class MpdlXmlTextServer(SimpleItem): return docinfo - def getTocPage(self, mode="text", pn=0, pageinfo=None, docinfo=None): + def getTocPage(self, mode="text", pn=None, start=None, size=None, pageinfo=None, docinfo=None): """returns single page from the table of contents""" logging.debug("getTocPage mode=%s, pn=%s"%(mode,pn)) if mode == "text": @@ -507,20 +494,21 @@ class MpdlXmlTextServer(SimpleItem): tocxml = docinfo.get('tocXML_%s'%mode, None) if not tocxml: logging.error("getTocPage: unable to find tocXML") - return "No ToC" + return "Error: no table of contents!" - pagesize = pageinfo['tocPageSize'] - tocPN = pageinfo['tocPN'] - if not pn: - pn = tocPN + if size is None: + size = pageinfo.get('tocPageSize', 30) + + if start is None: + start = (pn - 1) * size fulltoc = ET.fromstring(tocxml) if fulltoc: # paginate - start = (pn - 1) * pagesize * 2 - len = pagesize * 2 - del fulltoc[:start] + first = (start - 1) * 2 + len = size * 2 + del fulltoc[:first] del fulltoc[len:] tocdivs = fulltoc @@ -538,7 +526,17 @@ class MpdlXmlTextServer(SimpleItem): else: logging.warning("getTocPage: Problem with link=%s"%href) - return serialize(tocdivs) + # fix two-divs-per-row with containing div + newtoc = ET.Element('div', {'class':'queryResultPage'}) + for (d1,d2) in zip(tocdivs[::2],tocdivs[1::2]): + e = ET.Element('div',{'class':'tocline'}) + e.append(d1) + e.append(d2) + newtoc.append(e) + + return serialize(newtoc) + + return "ERROR: no table of contents!" def manage_changeMpdlXmlTextServer(self,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,RESPONSE=None):