Diff for /documentViewer/documentViewer.py between versions 1.175.2.23 and 1.175.2.34

version 1.175.2.23, 2011/08/10 19:18:03 version 1.175.2.34, 2011/08/31 16:22:12
Line 1 Line 1
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile   from Products.PageTemplates.PageTemplateFile import PageTemplateFile 
   from App.ImageFile import ImageFile
 from AccessControl import ClassSecurityInfo  from AccessControl import ClassSecurityInfo
 from AccessControl import getSecurityManager  from AccessControl import getSecurityManager
 from Globals import package_home  from Globals import package_home
   
 #from Ft.Xml import EMPTY_NAMESPACE, Parse   
 #import Ft.Xml.Domlette  
   
 import xml.etree.ElementTree as ET  import xml.etree.ElementTree as ET
   
 import os.path  import os
 import sys  import sys
 import urllib  import urllib
 import logging  import logging
Line 19  import urlparse Line 17  import urlparse
 import re  import re
 import string  import string
   
 from SrvTxtUtils import getInt, getText, getHttpData  from SrvTxtUtils import getInt, getText, getHttpData, refreshingImageFileIndexHtml
   
 def logger(txt,method,txt2):  
     """logging"""  
     logging.info(txt+ txt2)  
       
           
 def serializeNode(node, encoding="utf-8"):  def serializeNode(node, encoding="utf-8"):
     """returns a string containing node as XML"""      """returns a string containing node as XML"""
Line 105  def getParentPath(path, cnt=1): Line 98  def getParentPath(path, cnt=1):
     # split by /, shorten, and reassemble      # split by /, shorten, and reassemble
     return '/'.join(path.split('/')[0:-cnt])      return '/'.join(path.split('/')[0:-cnt])
   
   
 ##  ##
 ## documentViewer class  ## documentViewer class
 ##  ##
Line 122  class documentViewer(Folder): Line 114  class documentViewer(Folder):
     """MetaDataFolder instance"""      """MetaDataFolder instance"""
   
     # templates and forms      # templates and forms
       viewer_text = PageTemplateFile('zpt/viewer_text', globals())
       viewer_images = PageTemplateFile('zpt/viewer_images', globals())
     viewer_main = PageTemplateFile('zpt/viewer_main', globals())      viewer_main = PageTemplateFile('zpt/viewer_main', globals())
     toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals())      toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals())
     toc_text = PageTemplateFile('zpt/toc_text', globals())      toc_text = PageTemplateFile('zpt/toc_text', globals())
     toc_figures = PageTemplateFile('zpt/toc_figures', globals())      toc_figures = PageTemplateFile('zpt/toc_figures', globals())
       toc_none = PageTemplateFile('zpt/toc_none', globals())
     page_main_images = PageTemplateFile('zpt/page_main_images', globals())      page_main_images = PageTemplateFile('zpt/page_main_images', globals())
     page_main_double = PageTemplateFile('zpt/page_main_double', globals())      page_main_double = PageTemplateFile('zpt/page_main_double', globals())
     page_main_text = PageTemplateFile('zpt/page_main_text', globals())      page_main_text = PageTemplateFile('zpt/page_main_text', globals())
Line 134  class documentViewer(Folder): Line 129  class documentViewer(Folder):
     page_main_xml = PageTemplateFile('zpt/page_main_xml', globals())      page_main_xml = PageTemplateFile('zpt/page_main_xml', globals())
     page_main_pureXml = PageTemplateFile('zpt/page_main_pureXml', globals())      page_main_pureXml = PageTemplateFile('zpt/page_main_pureXml', globals())
     head_main = PageTemplateFile('zpt/head_main', globals())      head_main = PageTemplateFile('zpt/head_main', globals())
     docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())  
     info_xml = PageTemplateFile('zpt/info_xml', globals())      info_xml = PageTemplateFile('zpt/info_xml', globals())
       docuviewer_css = ImageFile('css/docuviewer.css',globals())
       # make ImageFile better for development
       docuviewer_css.index_html = refreshingImageFileIndexHtml
           
           
     thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals())      thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals())
Line 209  class documentViewer(Folder): Line 206  class documentViewer(Folder):
         """get all gis places """          """get all gis places """
         return self.template.fulltextclient.getAllGisPlaces(**args)          return self.template.fulltextclient.getAllGisPlaces(**args)
                 
     def getTranslate(self, **args):      def getWordInfo(self, **args):
         """get translate"""          """get translate"""
         return self.template.fulltextclient.getTranslate(**args)          return self.template.fulltextclient.getWordInfo(**args)
   
     def getLemma(self, **args):      def getLemma(self, **args):
         """get lemma"""          """get lemma"""
Line 310  class documentViewer(Folder): Line 307  class documentViewer(Folder):
                           
         # stringify viewType          # stringify viewType
         if isinstance(viewType, list):          if isinstance(viewType, list):
               logging.debug("index_html: viewType is list:%s"%viewType)
             viewType = ','.join([t for t in viewType if t])              viewType = ','.join([t for t in viewType if t])
                                                   
         pageinfo = self.getPageinfo(start=start, current=pn, docinfo=docinfo, viewMode=viewMode, viewType=viewType, tocMode=tocMode)          pageinfo = self.getPageinfo(start=start, current=pn, docinfo=docinfo, viewMode=viewMode, viewType=viewType, tocMode=tocMode)
Line 346  class documentViewer(Folder): Line 344  class documentViewer(Folder):
         url = self.template.zogilib.getDLBaseUrl()          url = self.template.zogilib.getDLBaseUrl()
         return url          return url
   
       def getScalerUrl(self, fn=None, pn=None, dw=100, dh=100, docinfo=None):
           """returns URL to digilib Scaler with params"""
           url = None
           if docinfo is not None:
               url = docinfo.get('imageURL', None)
               
           if url is None:
               url = "%s/servlet/Scaler?"%self.digilibBaseUrl
               if fn is None and docinfo is not None:
                   fn = docinfo.get('imagePath','')
               
               url += "fn=%s"%fn
               
           if pn:
               url += "&pn=%s"%pn
               
           url += "&dw=%s&dh=%s"%(dw,dh)
           return url
   
     def getDocumentViewerURL(self):      def getDocumentViewerURL(self):
         """returns the URL of this instance"""          """returns the URL of this instance"""
         return self.absolute_url()          return self.absolute_url()
           
     def getStyle(self, idx, selected, style=""):      def getStyle(self, idx, selected, style=""):
         """returns a string with the given style and append 'sel' if path == selected."""          """returns a string with the given style and append 'sel' if idx == selected."""
         #logger("documentViewer (getstyle)", logging.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style))          #logger("documentViewer (getstyle)", logging.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style))
         if idx == selected:          if idx == selected:
             return style + 'sel'              return style + 'sel'
         else:          else:
             return style              return style
           
     def getParams(self, param=None, val=None, params=None):      def getParams(self, param=None, val=None, params=None, duplicates=None):
         """returns dict with URL parameters.          """returns dict with URL parameters.
                   
         Takes URL parameters and additionally param=val or dict params.          Takes URL parameters and additionally param=val or dict params.
Line 375  class documentViewer(Folder): Line 392  class documentViewer(Folder):
                                   
         # change more params          # change more params
         if params is not None:          if params is not None:
             for k in params.keys():              for (k, v) in params.items():
                 v = params[k]  
                 if v is None:                  if v is None:
                     # val=None removes param                      # val=None removes param
                     if newParams.has_key(k):                      if newParams.has_key(k):
Line 385  class documentViewer(Folder): Line 401  class documentViewer(Folder):
                 else:                  else:
                     newParams[k] = v                      newParams[k] = v
                                           
           if duplicates:
               # eliminate lists (coming from duplicate keys)
               for (k,v) in newParams.items():
                   if isinstance(v, list):
                       if duplicates == 'comma':
                           # make comma-separated list of non-empty entries
                           newParams[k] = ','.join([t for t in v if t])
                       elif duplicates == 'first':
                           # take first non-empty entry
                           newParams[k] = [t for t in v if t][0]
           
         return newParams          return newParams
           
     def getLink(self, param=None, val=None, params=None, baseUrl=None, paramSep='&'):      def getLink(self, param=None, val=None, params=None, baseUrl=None, paramSep='&', duplicates='comma'):
         """returns URL to documentviewer with parameter param set to val or from dict params"""          """returns URL to documentviewer with parameter param set to val or from dict params"""
         urlParams = self.getParams(param=param, val=val, params=params)          urlParams = self.getParams(param=param, val=val, params=params, duplicates=duplicates)
         # quote values and assemble into query string (not escaping '/')          # quote values and assemble into query string (not escaping '/')
         ps = paramSep.join(["%s=%s"%(k,urllib.quote_plus(unicode(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:          if baseUrl is None:
Line 398  class documentViewer(Folder): Line 425  class documentViewer(Folder):
         url = "%s?%s"%(baseUrl, ps)          url = "%s?%s"%(baseUrl, ps)
         return url          return url
   
     def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None):      def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None, duplicates='comma'):
         """link to documentviewer with parameter param set to val"""          """link to documentviewer with parameter param set to val"""
         return self.getLink(param, val, params, baseUrl, '&')          return self.getLink(param=param, val=val, params=params, baseUrl=baseUrl, paramSep='&', duplicates=duplicates)
           
           
     def getInfo_xml(self,url,mode):      def getInfo_xml(self,url,mode):
Line 522  class documentViewer(Folder): Line 549  class documentViewer(Folder):
             # override image path from texttool with url              # override image path from texttool with url
             docinfo['imagePath'] = url.replace('/mpiwg/online/', '', 1)              docinfo['imagePath'] = url.replace('/mpiwg/online/', '', 1)
   
               
   
         # number of images from digilib          # number of images from digilib
         if docinfo.get('imagePath', None):          if docinfo.get('imagePath', None):
             docinfo['imageURL'] = self.digilibBaseUrl + "/servlet/Scaler?fn=" + docinfo['imagePath']              docinfo['imageURL'] = self.digilibBaseUrl + "/servlet/Scaler?fn=" + docinfo['imagePath']
Line 686  class documentViewer(Folder): Line 711  class documentViewer(Folder):
         return docinfo          return docinfo
           
   
     def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, viewType=None, tocMode=None):      def getPageinfo(self, current=None, start=None, rows=None, cols=None, docinfo=None, viewMode=None, viewType=None, tocMode=None):
         """returns pageinfo with the given parameters"""          """returns pageinfo with the given parameters"""
           logging.debug("getPageInfo(current=%s, start=%s, rows=%s, cols=%s, viewMode=%s, viewType=%s, tocMode=%s)"%(current,start,rows,cols,viewMode,viewType,tocMode))
         pageinfo = {}          pageinfo = {}
         pageinfo['viewMode'] = viewMode          pageinfo['viewMode'] = viewMode
         pageinfo['viewType'] = viewType          pageinfo['viewType'] = viewType
Line 695  class documentViewer(Folder): Line 721  class documentViewer(Folder):
   
         current = getInt(current)          current = getInt(current)
         pageinfo['current'] = current          pageinfo['current'] = current
           pageinfo['pn'] = current
         rows = int(rows or self.thumbrows)          rows = int(rows or self.thumbrows)
         pageinfo['rows'] = rows          pageinfo['rows'] = rows
         cols = int(cols or self.thumbcols)          cols = int(cols or self.thumbcols)
Line 705  class documentViewer(Folder): Line 732  class documentViewer(Folder):
         start = getInt(start, default=(math.ceil(float(current)/float(grpsize))*grpsize-(grpsize-1)))          start = getInt(start, default=(math.ceil(float(current)/float(grpsize))*grpsize-(grpsize-1)))
         # int(current / grpsize) * grpsize +1))          # int(current / grpsize) * grpsize +1))
         pageinfo['start'] = start          pageinfo['start'] = start
         pn = self.REQUEST.get('pn','1')          
         pageinfo['pn'] = pn  
         np = int(docinfo.get('numPages', 0))          np = int(docinfo.get('numPages', 0))
         if np == 0:          if np == 0:
             # numPages unknown - maybe we can get it from text page              # numPages unknown - maybe we can get it from text page
             if docinfo.get('textURLPath', None):              if docinfo.get('textURLPath', None):
                 # cache text page as well                  # cache text page as well
                 pageinfo['textPage'] = self.getTextPage(mode=viewType, pn=pn, docinfo=docinfo, pageinfo=pageinfo)                  pageinfo['textPage'] = self.getTextPage(mode=viewType, pn=current, docinfo=docinfo, pageinfo=pageinfo)
                 np = int(docinfo.get('numPages', 0))                  np = int(docinfo.get('numPages', 0))
                                   
         pageinfo['numgroups'] = int(np / grpsize)          pageinfo['numgroups'] = int(np / grpsize)
Line 724  class documentViewer(Folder): Line 750  class documentViewer(Folder):
         # add zeroth page for two columns          # add zeroth page for two columns
         pageZero = (cols == 2 and (pageFlowLtr != oddScanLeft))          pageZero = (cols == 2 and (pageFlowLtr != oddScanLeft))
         pageinfo['pageZero'] = pageZero          pageinfo['pageZero'] = pageZero
         pageinfo['pageList'] = self.getPageList(start=start, rows=rows, cols=cols, pageFlowLtr=pageFlowLtr, pageZero=pageZero, minIdx=1, maxIdx=np)          pageinfo['pageBatch'] = self.getPageBatch(start=start, rows=rows, cols=cols, pageFlowLtr=pageFlowLtr, pageZero=pageZero, minIdx=1, maxIdx=np)
                                   
           # TODO: do we need this here?
         pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg')          pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg')
         pageinfo['query'] = self.REQUEST.get('query','')           pageinfo['query'] = self.REQUEST.get('query','') 
         pageinfo['queryType'] = self.REQUEST.get('queryType','')          pageinfo['queryType'] = self.REQUEST.get('queryType','')
Line 751  class documentViewer(Folder): Line 778  class documentViewer(Folder):
         return pageinfo          return pageinfo
   
   
     def getPageList(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 array of page informations for one screenfull of thumbnails"""          """returns dict with array of page informations for one screenfull of thumbnails"""
           batch = {}
           grpsize = rows * cols
         if maxIdx == 0:          if maxIdx == 0:
             maxIdx = start + rows * cols              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 = []          pages = []
         if pageZero and start == 1:          if pageZero and start == 1:
Line 779  class documentViewer(Folder): Line 823  class documentViewer(Folder):
                                   
             pages.append(row)              pages.append(row)
                           
         logging.debug("getPageList returns=%s"%(pages))          if start > 1:
         return pages              batch['prevStart'] = max(start - grpsize, 1)
           else:
               batch['prevStart'] = None
               
           if start + grpsize < maxIdx:
               batch['nextStart'] = start + grpsize
           else:
               batch['nextStart'] = None
   
           batch['pages'] = pages
           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
                   
   
     security.declareProtected('View management screens','changeDocumentViewerForm')          security.declareProtected('View management screens','changeDocumentViewerForm')    
Line 814  def manage_AddDocumentViewer(self,id,ima Line 912  def manage_AddDocumentViewer(self,id,ima
           
     if RESPONSE is not None:      if RESPONSE is not None:
         RESPONSE.redirect('manage_main')          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 ''  
   
   
       

Removed from v.1.175.2.23  
changed lines
  Added in v.1.175.2.34


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>