--- documentViewer/documentViewer.py 2011/08/02 16:29:15 1.175.2.15 +++ documentViewer/documentViewer.py 2011/08/05 13:31:27 1.175.2.20 @@ -266,12 +266,13 @@ class documentViewer(Folder): security.declareProtected('View','index_html') - def index_html(self,url,mode="texttool",viewMode="auto",tocMode="thumbs",start=None,pn=1,mk=None): + def index_html(self,url,mode="texttool",viewMode="auto",viewType=None,tocMode="thumbs",start=1,pn=1): """ - view it - @param mode: defines how to access the document behind url + view page @param url: url which contains display information - @param viewMode: if images display images, if text display text, default is auto (text,images or auto) + @param mode: defines how to access the document behind url + @param viewMode: 'images': display images, 'text': display text, default is 'auto' + @param viewType: sub-type of viewMode, e.g. 'dict' for viewMode='text' @param tocMode: type of 'table of contents' for navigation (thumbs, text, figures, none) """ @@ -291,24 +292,26 @@ class documentViewer(Folder): # get table of contents docinfo = self.getToc(mode=tocMode, docinfo=docinfo) - # auto viewMode: text_dict if text else images + # auto viewMode: text if there is a text else images if viewMode=="auto": if docinfo.get('textURL', None) or docinfo.get('textURLPath', None): - viewMode="text_dict" + viewMode = "text" + viewType = "dict" else: - viewMode="images" + viewMode = "images" - pageinfo = self.getPageinfo(start=start, current=pn, docinfo=docinfo, viewMode=viewMode, tocMode=tocMode) - - if viewMode != 'images' and docinfo.get('textURLPath', None): - # get full text page - page = self.getTextPage(mode=viewMode, pn=pn, docinfo=docinfo, pageinfo=pageinfo) - pageinfo['textPage'] = page + elif viewMode == "text_dict": + # legacy fix + viewMode = "text" + viewType = "dict" + + pageinfo = self.getPageinfo(start=start, current=pn, docinfo=docinfo, viewMode=viewMode, viewType=viewType, tocMode=tocMode) + # get template /template/viewer_main pt = getattr(self.template, 'viewer_main') # and execute with parameters - return pt(docinfo=docinfo, pageinfo=pageinfo, viewMode=viewMode, mk=self.generateMarks(mk)) + return pt(docinfo=docinfo, pageinfo=pageinfo) def generateMarks(self,mk): ret="" @@ -344,17 +347,20 @@ class documentViewer(Folder): else: return style - def getLink(self, param=None, val=None, params=None, baseUrl=None, paramSep='&'): - """returns URL to documentviewer with parameter param set to val or from dict params""" + def getParams(self, param=None, val=None, params=None): + """returns dict with URL parameters. + + Takes URL parameters and additionally param=val or dict params. + Deletes key if value is None.""" # copy existing request params - urlParams=self.REQUEST.form.copy() + newParams=self.REQUEST.form.copy() # change single param if param is not None: if val is None: - if urlParams.has_key(param): - del urlParams[param] + if newParams.has_key(param): + del newParams[param] else: - urlParams[param] = str(val) + newParams[param] = str(val) # change more params if params is not None: @@ -362,31 +368,30 @@ class documentViewer(Folder): v = params[k] if v is None: # val=None removes param - if urlParams.has_key(k): - del urlParams[k] + if newParams.has_key(k): + del newParams[k] else: - urlParams[k] = v - - # FIXME: does this belong here? - if urlParams.get("mode", None) == "filepath": #wenn beim erst Aufruf filepath gesetzt wurde aendere das nun zu imagepath - urlParams["mode"] = "imagepath" - urlParams["url"] = getParentPath(urlParams["url"]) - + newParams[k] = v + + return newParams + + def getLink(self, param=None, val=None, params=None, baseUrl=None, paramSep='&'): + """returns URL to documentviewer with parameter param set to val or from dict params""" + urlParams = self.getParams(param=param, val=val, params=params) # quote values and assemble into query string (not escaping '/') ps = paramSep.join(["%s=%s"%(k,urllib.quote_plus(v,'/')) for (k, v) in urlParams.items()]) - #ps = urllib.urlencode(urlParams) if baseUrl is None: - baseUrl = self.REQUEST['URL1'] + baseUrl = self.getDocumentViewerURL() url = "%s?%s"%(baseUrl, ps) return url - def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None): """link to documentviewer with parameter param set to val""" return self.getLink(param, val, params, baseUrl, '&') + def getInfo_xml(self,url,mode): """returns info about the document as XML""" if not self.digilibBaseUrl: @@ -462,9 +467,8 @@ class documentViewer(Folder): docinfo['documentUrl'] = docUrl # process index.meta contents - if metaDom is not None: + if metaDom is not None and metaDom.tag == 'resource': # document directory name and path - logging.debug("RESOURCE: %s"%repr(self.metadataService.resource.meta.getData(dom=metaDom, all=True, recursive=2))) resource = self.metadataService.getResourceData(dom=metaDom) if resource: docinfo = self.getDocinfoFromResource(docinfo, resource) @@ -572,7 +576,7 @@ class documentViewer(Folder): # odd pages are left docinfo['oddPage'] = texttool.get('odd-scan-orientation', 'left') - # number of title page + # number of title page (0: not defined) docinfo['titlePage'] = texttool.get('title-scan-no', 0) # old presentation stuff @@ -668,11 +672,14 @@ class documentViewer(Folder): return docinfo - def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, tocMode=None): + def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, viewType=None, tocMode=None): """returns pageinfo with the given parameters""" pageinfo = {} + pageinfo['viewMode'] = viewMode + pageinfo['viewType'] = viewType + pageinfo['tocMode'] = tocMode + current = getInt(current) - pageinfo['current'] = current rows = int(rows or self.thumbrows) pageinfo['rows'] = rows @@ -685,28 +692,32 @@ class documentViewer(Folder): # int(current / grpsize) * grpsize +1)) pageinfo['start'] = start pageinfo['end'] = start + grpsize - if (docinfo is not None) and ('numPages' in docinfo): - np = int(docinfo['numPages']) - pageinfo['end'] = min(pageinfo['end'], np) - pageinfo['numgroups'] = int(np / grpsize) - if np % grpsize > 0: - pageinfo['numgroups'] += 1 + pn = self.REQUEST.get('pn','1') + pageinfo['pn'] = pn + np = int(docinfo.get('numPages', 0)) + if np == 0: + # numPages unknown - maybe we can get it from text page + if docinfo.get('textURLPath', None): + # cache text page as well + pageinfo['textPage'] = self.getTextPage(mode=viewType, pn=pn, docinfo=docinfo, pageinfo=pageinfo) + np = int(docinfo.get('numPages', 0)) + + pageinfo['end'] = min(pageinfo['end'], np) + pageinfo['numgroups'] = int(np / grpsize) + if np % grpsize > 0: + pageinfo['numgroups'] += 1 - pageinfo['viewMode'] = viewMode - pageinfo['tocMode'] = tocMode pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg') - #pageinfo['optionToggle'] = self.REQUEST.get('optionToggle','1') pageinfo['query'] = self.REQUEST.get('query','') pageinfo['queryType'] = self.REQUEST.get('queryType','') pageinfo['querySearch'] =self.REQUEST.get('querySearch', 'fulltext') - pageinfo['textPN'] = self.REQUEST.get('textPN','1') pageinfo['highlightQuery'] = self.REQUEST.get('highlightQuery','') pageinfo['tocPageSize'] = self.REQUEST.get('tocPageSize', '30') pageinfo['queryPageSize'] =self.REQUEST.get('queryPageSize', '10') pageinfo['tocPN'] = self.REQUEST.get('tocPN', '1') # WTF?: toc = int(pageinfo['tocPN']) - pageinfo['textPages'] =int(toc) + pageinfo['textPages'] = int(toc) # What does this do? if 'tocSize_%s'%tocMode in docinfo: @@ -721,7 +732,6 @@ class documentViewer(Folder): pageinfo['tocPN'] = min(tocPages,toc) pageinfo['searchPN'] =self.REQUEST.get('searchPN','1') - pageinfo['sn'] =self.REQUEST.get('sn','') return pageinfo