--- documentViewer/documentViewer.py 2011/08/15 19:09:08 1.175.2.26 +++ documentViewer/documentViewer.py 2011/08/25 15:05:22 1.175.2.32 @@ -1,17 +1,17 @@ from OFS.Folder import Folder -from OFS.Image import File from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate -from Products.PageTemplates.PageTemplateFile import PageTemplateFile +from Products.PageTemplates.PageTemplateFile import PageTemplateFile +from App.ImageFile import ImageFile +from App.Common import rfc1123_date +#from Products.ZSimpleFile.ZSimpleFile import ZSimpleFile from AccessControl import ClassSecurityInfo from AccessControl import getSecurityManager from Globals import package_home -#from Ft.Xml import EMPTY_NAMESPACE, Parse -#import Ft.Xml.Domlette - import xml.etree.ElementTree as ET -import os.path +import os +import stat import sys import urllib import logging @@ -106,6 +106,14 @@ def getParentPath(path, cnt=1): # split by /, shorten, and reassemble return '/'.join(path.split('/')[0:-cnt]) +def devImageFileIndexHtml(self, REQUEST, RESPONSE): + """index_html method for App.ImageFile that updates the file info for each request.""" + stat_info = os.stat(self.path) + self.size = stat_info[stat.ST_SIZE] + self.lmt = float(stat_info[stat.ST_MTIME]) or time.time() + self.lmh = rfc1123_date(self.lmt) + # call original method + return ImageFile.index_html(self, REQUEST, RESPONSE) ## ## documentViewer class @@ -124,6 +132,7 @@ class documentViewer(Folder): # templates and forms viewer_text = PageTemplateFile('zpt/viewer_text', globals()) + viewer_images = PageTemplateFile('zpt/viewer_images', globals()) viewer_main = PageTemplateFile('zpt/viewer_main', globals()) toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals()) toc_text = PageTemplateFile('zpt/toc_text', globals()) @@ -137,8 +146,9 @@ class documentViewer(Folder): page_main_pureXml = PageTemplateFile('zpt/page_main_pureXml', globals()) head_main = PageTemplateFile('zpt/head_main', globals()) info_xml = PageTemplateFile('zpt/info_xml', globals()) - # TODO: can this be nicer? - docuviewer_css = File('docuviewer_css','',open(os.path.join(package_home(globals()),'css/docuviewer.css')), content_type='text/css') + docuviewer_css = ImageFile('css/docuviewer.css',globals()) + # make ImageFile better for development + docuviewer_css.index_html = devImageFileIndexHtml thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals()) @@ -555,8 +565,6 @@ class documentViewer(Folder): # override image path from texttool with url docinfo['imagePath'] = url.replace('/mpiwg/online/', '', 1) - - # number of images from digilib if docinfo.get('imagePath', None): docinfo['imageURL'] = self.digilibBaseUrl + "/servlet/Scaler?fn=" + docinfo['imagePath'] @@ -786,12 +794,28 @@ class documentViewer(Folder): return pageinfo - def getPageBatch(self, start=None, rows=None, cols=None, pageFlowLtr=True, pageZero=False, minIdx=1, maxIdx=0): + def getPageBatch(self, start=1, rows=10, cols=2, pageFlowLtr=True, pageZero=False, minIdx=1, maxIdx=0): """returns dict with array of page informations for one screenfull of thumbnails""" + batch = {} grpsize = rows * cols if maxIdx == 0: maxIdx = start + grpsize + nb = int(math.ceil(maxIdx / float(grpsize))) + # list of all batch start and end points + batches = [] + if pageZero: + ofs = 0 + else: + ofs = 1 + + for i in range(nb): + s = i * grpsize + ofs + e = min((i + 1) * grpsize + ofs - 1, maxIdx) + batches.append({'start':s, 'end':e}) + + batch['batches'] = batches + pages = [] if pageZero and start == 1: # correct beginning @@ -815,7 +839,6 @@ class documentViewer(Folder): pages.append(row) - batch = {} if start > 1: batch['prevStart'] = max(start - grpsize, 1) else: @@ -827,7 +850,50 @@ class documentViewer(Folder): batch['nextStart'] = None batch['pages'] = pages - #logging.debug("getPageList returns=%s"%(batch)) + return batch + + def getBatch(self, start=1, size=10, end=0, data=None, fullData=True): + """returns dict with information for one screenfull of data.""" + batch = {} + if end == 0: + end = start + size + + nb = int(math.ceil(end / float(size))) + # list of all batch start and end points + batches = [] + for i in range(nb): + s = i * size + 1 + e = min((i + 1) * size, end) + batches.append({'start':s, 'end':e}) + + batch['batches'] = batches + # list of elements in this batch + this = [] + j = 0 + for i in range(start, min(start+size, end)): + if data: + if fullData: + d = data[i] + else: + d = data[j] + j += 1 + + else: + d = i+1 + + this.append(d) + + batch['this'] = this + if start > 1: + batch['prevStart'] = max(start - size, 1) + else: + batch['prevStart'] = None + + if start + size < end: + batch['nextStart'] = start + size + else: + batch['nextStart'] = None + return batch @@ -862,37 +928,3 @@ def manage_AddDocumentViewer(self,id,ima if RESPONSE is not None: RESPONSE.redirect('manage_main') - -## DocumentViewerTemplate class -class DocumentViewerTemplate(ZopePageTemplate): - """Template for document viewer""" - meta_type="DocumentViewer Template" - - -def manage_addDocumentViewerTemplateForm(self): - """Form for adding""" - pt=PageTemplateFile('zpt/addDocumentViewerTemplate', globals()).__of__(self) - return pt() - -def manage_addDocumentViewerTemplate(self, id='viewer_main', title=None, text=None, - REQUEST=None, submit=None): - "Add a Page Template with optional file content." - - self._setObject(id, DocumentViewerTemplate(id)) - ob = getattr(self, id) - txt=file(os.path.join(package_home(globals()),'zpt/viewer_main.zpt'),'r').read() - logging.info("txt %s:"%txt) - ob.pt_edit(txt,"text/html") - if title: - ob.pt_setTitle(title) - try: - u = self.DestinationURL() - except AttributeError: - u = REQUEST['URL1'] - - u = "%s/%s" % (u, urllib.quote(id)) - REQUEST.RESPONSE.redirect(u+'/manage_main') - return '' - - -