--- documentViewer/documentViewer.py 2011/08/03 19:04:18 1.175.2.16 +++ documentViewer/documentViewer.py 2011/08/05 17:04:20 1.175.2.21 @@ -266,16 +266,17 @@ 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) """ - logging.debug("documentViewer (index) mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn)) + logging.debug("documentViewer(index_html) mode=%s url=%s viewMode=%s viewType=%s start=%s pn=%s"%(mode,url,viewMode,viewType,start,pn)) if not hasattr(self, 'template'): # this won't work @@ -291,19 +292,34 @@ 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) + elif viewMode == "text_dict": + # legacy fix + viewMode = "text" + viewType = "dict" + + # stringify viewType + if isinstance(viewType, list): + viewType = ','.join([t for t in viewType if t]) + + 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') + # get template /template/viewer_$viewMode + pt = getattr(self.template, 'viewer_%s'%viewMode, None) + if pt is None: + logging.error("No template for viewMode=%s!"%viewMode) + # TODO: error page? + return "No template for viewMode=%s!"%viewMode + # 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="" @@ -372,7 +388,7 @@ class documentViewer(Folder): """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 = paramSep.join(["%s=%s"%(k,urllib.quote_plus(unicode(v),'/')) for (k, v) in urlParams.items()]) if baseUrl is None: baseUrl = self.getDocumentViewerURL() @@ -459,7 +475,7 @@ 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 resource = self.metadataService.getResourceData(dom=metaDom) if resource: @@ -664,9 +680,13 @@ 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) @@ -687,7 +707,7 @@ class documentViewer(Folder): # 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=viewMode, pn=pn, docinfo=docinfo, pageinfo=pageinfo) + pageinfo['textPage'] = self.getTextPage(mode=viewType, pn=pn, docinfo=docinfo, pageinfo=pageinfo) np = int(docinfo.get('numPages', 0)) pageinfo['end'] = min(pageinfo['end'], np) @@ -695,10 +715,7 @@ class documentViewer(Folder): 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') @@ -708,7 +725,7 @@ class documentViewer(Folder): 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: