Changeset 511:551ca1641a5e in documentViewer
- Timestamp:
- Feb 28, 2012, 5:21:59 PM (12 years ago)
- Branch:
- elementtree
- Files:
-
- 1 added
- 1 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
MpdlXmlTextServer.py
r510 r511 7 7 import logging 8 8 import urllib 9 import urlparse 9 10 import base64 10 11 … … 140 141 141 142 # stuff for constructing full urls 142 characterNormalization = pageinfo.get('characterNormalization', None)143 moreTextParam = ''144 143 selfurl = docinfo['viewerUrl'] 144 textParams = {'document': docpath, 145 'pn': pn} 146 if 'characterNormalization' in pageinfo: 147 textParams['characterNormalization'] = pageinfo['characterNormalization'] 145 148 146 149 if not mode: … … 157 160 # add highlighting 158 161 highlightQuery = pageinfo.get('highlightQuery', None) 159 sn = pageinfo.get('sn', None) 160 if highlightQuery and sn: 161 moreTextParam +="&highlightQuery=%s&sn=%s"%(urllib.quote(highlightQuery),sn) 162 163 # remove mode 162 if highlightQuery: 163 textParams['highlightQuery'] = highlightQuery 164 textParams['highlightElement'] = pageinfo.get('highlightElement', '') 165 textParams['highlightElementPos'] = pageinfo.get('highlightElementPos', '') 166 167 # ignore mode in the following 164 168 modes.remove('search') 165 169 … … 175 179 textmode = modes[0] 176 180 177 textParam = "document=%s&mode=%s&pn=%s&characterNormalization=%s"%(docpath,textmode,pn,characterNormalization) 178 textParam += moreTextParam 181 textParams['mode'] = textmode 179 182 180 183 # fetch the page 181 pagexml = self.getServerData("page-fragment.xql", textParam)184 pagexml = self.getServerData("page-fragment.xql",urllib.urlencode(textParams)) 182 185 dom = ET.fromstring(pagexml) 183 186 # extract additional info … … 221 224 if href: 222 225 # is link with href 223 if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql'): 226 linkurl = urlparse.urlparse(href) 227 #logging.debug("getTextPage: linkurl=%s"%repr(linkurl)) 228 if linkurl.path.endswith('GetDictionaryEntries'): 229 #TODO: replace wordInfo page 224 230 # is dictionary link - change href (keeping parameters) 225 l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql','%s/template/viewer_wordinfo'%viewerurl))231 #l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql','%s/template/viewer_wordinfo'%viewerurl)) 226 232 # add target to open new page 227 233 l.set('target', '_blank') 228 234 229 235 # TODO: is this needed? 230 if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql'):231 selfurl = self.absolute_url()232 l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql','%s/head_main_lemma'%selfurl))233 l.set('target', '_blank')234 l.set('onclick',"popupWin = window.open(this.href, 'InfoWindow', 'menubar=no, location,width=500,height=600,top=180, left=700, toolbar=no, scrollbars=1'); return false;")235 l.set('ondblclick', 'popupWin.focus();')236 # if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql'): 237 # selfurl = self.absolute_url() 238 # l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql','%s/head_main_lemma'%selfurl)) 239 # l.set('target', '_blank') 240 # l.set('onclick',"popupWin = window.open(this.href, 'InfoWindow', 'menubar=no, location,width=500,height=600,top=180, left=700, toolbar=no, scrollbars=1'); return false;") 241 # l.set('ondblclick', 'popupWin.focus();') 236 242 237 243 if href.startswith('#note-'): … … 273 279 def getSearchResults(self, mode, query=None, pageinfo=None, docinfo=None): 274 280 """loads list of search results and stores XML in docinfo""" 281 275 282 logging.debug("getSearchResults mode=%s query=%s"%(mode, query)) 276 283 if mode == "none": 277 284 return docinfo 278 285 279 if 'resultSize_%s_%s'%(mode,query) in docinfo: 280 # cached result 281 return docinfo 282 286 cachedQuery = docinfo.get('cachedQuery', None) 287 if cachedQuery is not None: 288 # cached search result 289 if cachedQuery == '%s_%s'%(mode,query): 290 # same query 291 return docinfo 292 293 else: 294 # different query 295 del docinfo['resultSize'] 296 del docinfo['resultXML'] 297 298 # cache query 299 docinfo['cachedQuery'] = '%s_%s'%(mode,query) 300 301 # fetch full results 283 302 docpath = docinfo['textURLPath'] 284 285 # fetch full results286 303 params = {'document': docpath, 287 304 'mode': 'text', … … 305 322 306 323 elif dc == 'queryResultHits': 307 docinfo['resultSize _%s_%s'%(mode,query)] = getInt(div.text)324 docinfo['resultSize'] = getInt(div.text) 308 325 309 326 if pagediv is not None: 310 327 # store XML in docinfo 311 docinfo['resultXML _%s_%s'%(mode,query)] = ET.tostring(pagediv, 'UTF-8')328 docinfo['resultXML'] = ET.tostring(pagediv, 'UTF-8') 312 329 313 330 return docinfo … … 317 334 """returns single page from the table of contents""" 318 335 logging.debug("getResultsPage mode=%s, pn=%s"%(mode,pn)) 319 # check for cached TOC 320 #TODO: cache only one search 321 if not docinfo.has_key('resultXML_%s_%s'%(mode,query)): 336 # check for cached result 337 if not 'resultXML' in docinfo: 322 338 self.getSearchResults(mode=mode, query=query, pageinfo=pageinfo, docinfo=docinfo) 323 339 324 resultxml = docinfo.get('resultXML _%s_%s'%(mode,query), None)340 resultxml = docinfo.get('resultXML', None) 325 341 if not resultxml: 326 342 logging.error("getResultPage: unable to find resultXML") … … 328 344 329 345 if size is None: 330 size = pageinfo.get(' searchResultPageSize', 20)346 size = pageinfo.get('resultPageSize', 10) 331 347 332 348 if start is None: … … 337 353 if fullresult is not None: 338 354 # paginate 339 first = start 355 first = start-1 340 356 len = size 341 357 del fullresult[:first] … … 348 364 href = l.get('href') 349 365 if href: 350 # take pn from href 351 m = re.match(r'page-fragment\.xql.*pn=(\d+)', href) 352 if m is not None: 353 # and create new url (assuming parent is documentViewer) 354 #TODO: add highlighting params 355 url = self.getLink('pn', m.group(1)) 356 l.set('href', url) 357 else: 358 logging.warning("getResultPage: Problem with link=%s"%href) 366 # assume all links go to pages 367 linkUrl = urlparse.urlparse(href) 368 linkParams = urlparse.parse_qs(linkUrl.query) 369 # take some parameters 370 params = {'pn': linkParams['pn'], 371 'highlightQuery': linkParams.get('highlightQuery',''), 372 'highlightElement': linkParams.get('highlightElement',''), 373 'highlightElementPos': linkParams.get('highlightElementPos','') 374 } 375 url = self.getLink(params=params) 376 l.set('href', url) 359 377 360 # fix two-divs-per-row with containing div361 # newtoc = ET.Element('div', {'class':'queryResultPage'})362 # for (d1,d2) in zip(tocdivs[::2],tocdivs[1::2]):363 # e = ET.Element('div',{'class':'tocline'})364 # e.append(d1)365 # e.append(d2)366 # newtoc.append(e)367 368 378 return serialize(tocdivs) 369 379 -
css/docuviewer.css
r510 r511 8 8 } 9 9 10 div.toc-text, div.toc-figures { 10 div.toc-text, 11 div.toc-figures { 11 12 max-width: 20em; 12 13 } 13 14 14 div.toc-text .toc, div.toc-figures .toc { 15 div.col.results { 16 max-width: 20em; 17 } 18 19 div.toc-text .toc, 20 div.toc-figures .toc { 15 21 float:left; 16 22 clear:right; 17 23 } 18 div.toc-text .toc.float.right, div.toc-figures .toc.float.right { 24 div.toc-text .toc.float.right, 25 div.toc-figures .toc.float.right { 19 26 float:right; 20 27 } … … 30 37 color: black; 31 38 } 39 40 span.hit.highlight { 41 background-color: lightgreen; 42 } -
documentViewer.py
r509 r511 124 124 toc_none = PageTemplateFile('zpt/toc_none', globals()) 125 125 common_template = PageTemplateFile('zpt/common_template', globals()) 126 search_template = PageTemplateFile('zpt/search_template', globals()) 126 127 info_xml = PageTemplateFile('zpt/info_xml', globals()) 127 128 docuviewer_css = ImageFile('css/docuviewer.css',globals()) … … 711 712 # int(current / grpsize) * grpsize +1)) 712 713 pageinfo['start'] = start 713 714 # get number of pages 714 715 np = int(docinfo.get('numPages', 0)) 715 716 if np == 0: … … 720 721 np = int(docinfo.get('numPages', 0)) 721 722 723 # cache table of contents 724 pageinfo['tocPageSize'] = getInt(self.REQUEST.get('tocPageSize', 30)) 722 725 pageinfo['numgroups'] = int(np / grpsize) 723 726 if np % grpsize > 0: … … 731 734 pageinfo['pageBatch'] = self.getPageBatch(start=start, rows=rows, cols=cols, pageFlowLtr=pageFlowLtr, pageZero=pageZero, minIdx=1, maxIdx=np) 732 735 733 # TODO: do we need this here?734 736 pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg') 735 pageinfo['tocPageSize'] = getInt(self.REQUEST.get('tocPageSize', 30)) 737 738 # cache search results 736 739 pageinfo['resultPageSize'] = getInt(self.REQUEST.get('resultPageSize', 10)) 737 pageinfo['tocPN'] = getInt(self.REQUEST.get('tocPN', '1'))738 pageinfo[' resultPN'] = getInt(self.REQUEST.get('resultPN','1'))739 740 # limit tocPN TODO: do we need this?741 if 'tocSize_%s'%tocMode in docinfo:742 tocSize = docinfo['tocSize_%s'%tocMode]743 tocPageSize = pageinfo['tocPageSize']744 # cached toc745 if tocSize%tocPageSize>0:746 tocPages=tocSize/tocPageSize+1747 else:748 tocPages=tocSize/tocPageSize749 750 pageinfo['tocPN'] = min(tocPages,pageinfo['tocPN'])740 query = self.REQUEST.get('query',None) 741 pageinfo['query'] = query 742 if query: 743 queryType = self.REQUEST.get('queryType', 'fulltextMorph') 744 pageinfo['queryType'] = queryType 745 pageinfo['resultStart'] = getInt(self.REQUEST.get('resultStart', '1')) 746 self.getSearchResults(mode=queryType, query=query, pageinfo=pageinfo, docinfo=docinfo) 747 748 # highlighting 749 highlightQuery = self.REQUEST.get('highlightQuery', None) 750 if highlightQuery: 751 pageinfo['highlightQuery'] = highlightQuery 752 pageinfo['highlightElement'] = self.REQUEST.get('highlightElement', '') 753 pageinfo['highlightElementPos'] = self.REQUEST.get('highlightElementPos', '') 751 754 752 755 return pageinfo -
zpt/common_template.zpt
r505 r511 55 55 <!-- toc ruler with previous/next toc page buttons --> 56 56 <metal:block metal:define-macro="toc_ruler"> 57 <form class="autosubmit" tal:attributes="action viewerUrl" >58 <input type="hidden" tal:define="params python:here.getParams( 'start', None)" tal:repeat="param params"57 <form class="autosubmit" tal:attributes="action viewerUrl" tal:define="startParam startParam | string:start"> 58 <input type="hidden" tal:define="params python:here.getParams(startParam, None)" tal:repeat="param params" 59 59 tal:attributes="name param; value python:params[param]" /> <a tal:condition="batch/prevStart" 60 tal:attributes="href python:here.getLink( 'start',batch['prevStart'])"><</a> <span tal:condition="not:batch/prevStart"><</span>61 <select class="autosubmit" name="start">60 tal:attributes="href python:here.getLink(startParam,batch['prevStart'])"><</a> <span tal:condition="not:batch/prevStart"><</span> 61 <select class="autosubmit" tal:attributes="name startParam"> 62 62 <option tal:repeat="grp batch/batches" tal:attributes="selected python:(start==grp['start']); value grp/start" 63 63 tal:content="string:${grp/start} - ${grp/end}" /> 64 64 </select> <input type="submit" value="Go" /> <a tal:condition="batch/nextStart" 65 tal:attributes="href python:here.getLink( 'start',batch['nextStart'])">></a> <span tal:condition="not:batch/nextStart">></span>65 tal:attributes="href python:here.getLink(startParam,batch['nextStart'])">></a> <span tal:condition="not:batch/nextStart">></span> 66 66 </form> 67 67 </metal:block> -
zpt/viewer_text.zpt
r510 r511 64 64 65 65 <!-- right-side search results --> 66 <div class="col search" tal:condition="query">66 <div class="col results" tal:condition="query"> 67 67 <!--"BEGIN SEARCH RESULTS" --> 68 68 <div class="options"> 69 69 <h4>Search results</h4> 70 <div tal:content="structure python:here.getResultsPage(mode=queryType,query=query,pn=1,pageinfo=pageinfo,docinfo=docinfo)"/>70 <div metal:use-macro="here/template/search_template/macros/results_div"/> 71 71 </div> 72 72 </div> … … 92 92 Dictionary 93 93 </li> 94 <li tal:condition=" query">94 <li tal:condition="python:query"> 95 95 <input type="checkbox" class="autosubmit" name="viewLayer" 96 96 value="search" … … 129 129 <input type="text" name="query" tal:attributes="value query"/> 130 130 <input type="submit" value="Search"/> 131 <a tal:attributes="href python:here.getLink('query',None)">Clear</a> 131 132 <ul> 132 133 <li> -
zpt/viewer_xml.zpt
r504 r511 36 36 <div class="page-body" tal:condition="python:here.isAccessible(docinfo)"> 37 37 <!--table of contents--> 38 <div class="col -left">38 <div class="col toc"> 39 39 <metal:block 40 40 metal:use-macro="python:path('here/template/toc_%s/macros/main'%tocMode)" /> … … 42 42 43 43 <!-- text page --> 44 <div class="col -main">44 <div class="col main"> 45 45 <div class="ruler"> 46 46 <metal:block metal:use-macro="here/template/common_template/macros/page_ruler" /> … … 61 61 62 62 <!-- right-side options --> 63 <div class="col -right">63 <div class="col buttons"> 64 64 <!--"BEGIN TEXT DISPLAY" --> 65 65 <div class="options"> … … 69 69 tal:define="params python:here.getParams(params={'viewMode':None})" 70 70 tal:repeat="param params" 71 tal:attributes="name param; value python:params[param]" /> 72 <input class="autosubmit" type="radio" name="viewMode" value="text" 73 tal:attributes="checked python:viewMode=='text'" /> Text<br /> 74 <input type="radio" class="autosubmit" name="viewMode" value="text" 75 tal:attributes="checked python:viewMode=='xml'" /> XML<br /> 71 tal:attributes="name param; value python:params[param]" /> 72 <ul> 73 <li> 74 <input class="autosubmit" type="radio" name="viewMode" value="text" 75 tal:attributes="checked python:viewMode=='text'" /> Text 76 </li> 77 <li> 78 <input type="radio" class="autosubmit" name="viewMode" value="text" 79 tal:attributes="checked python:viewMode=='xml'" /> XML 80 </li> 81 </ul> 76 82 <input type="submit" value="Go!" /> 77 83 </form> … … 82 88 <div class="options"> 83 89 <h4>Text size</h4> 84 <div class="fsizer"> 85 <a href="javascript:fontSize(12);" class="fs_sml">S</a> <a 86 href="javascript:fontSize(14);" class="fs_med">M</a> <a 87 href="javascript:fontSize(16);" class="fs_lrg">L</a> 88 </div> 90 <ul class="fsizer"> 91 <li> 92 <a href="javascript:fontSize(12);" class="fs_sml">S</a> 93 </li> 94 <li> 95 <a href="javascript:fontSize(14);" class="fs_med">M</a> 96 </li> 97 <li> 98 <a href="javascript:fontSize(16);" class="fs_lrg">L</a> 99 </li> 100 </ul> 89 101 </div> 90 102 <!--"END TEXT SIZE"--> 91 92 <!--"BEGIN TEXT NORMALIZATION"-->93 <div class="options" tal:condition="python:viewMode!='xml'">94 <h4>Text normalization</h4>95 <form tal:attributes="action viewerUrl" class="autosubmit"96 tal:define="norm python:pageinfo.get('characterNormalization','regPlusNorm');">97 <input type="hidden"98 tal:define="params python:here.getParams('characterNormalization',None)"99 tal:repeat="param params"100 tal:attributes="name param; value python:params[param]" /> <input101 type="radio" class="autosubmit" name="characterNormalization" value="orig"102 tal:attributes="checked python:norm=='orig'" /> Original<br /> <input103 type="radio" class="autosubmit" name="characterNormalization" value="reg"104 tal:attributes="checked python:norm=='reg'" /> Regularized<br /> <input105 type="radio" class="autosubmit" name="characterNormalization"106 value="regPlusNorm" tal:attributes="checked python:norm=='regPlusNorm'" />107 Normalized<br /> <input type="submit" value="Go!" />108 </form>109 </div>110 <!--"END TEXT NORMALIZATION"-->111 103 112 104 </div>
Note: See TracChangeset
for help on using the changeset viewer.