Diff for /documentViewer/documentViewer.py between versions 1.138 and 1.162

version 1.138, 2010/10/18 10:33:47 version 1.162, 2010/12/22 11:54:46
Line 12  import Ft.Xml.Domlette Line 12  import Ft.Xml.Domlette
 import os.path  import os.path
 import sys  import sys
 import urllib  import urllib
   
 import urllib2  import urllib2
 import logging  import logging
 import math  import math
 import urlparse   import urlparse 
 import cStringIO  import cStringIO
 import re  import re
   import string
   
 def logger(txt,method,txt2):  def logger(txt,method,txt2):
     """logging"""      """logging"""
Line 52  def serializeNode(node, encoding='utf-8' Line 51  def serializeNode(node, encoding='utf-8'
     buf.close()      buf.close()
     return s      return s
   
 def getBrowserType(self):  def browserCheck(self):
         """get browser type object"""      """check the browsers request to find out the browser type"""
         if self.REQUEST.SESSION.has_key('browserType'):      bt = {}
             return self.REQUEST.SESSION['browserType']      ua = self.REQUEST.get_header("HTTP_USER_AGENT")
         else:      bt['ua'] = ua
             bt = browserCheck(self)      bt['isIE'] = False
             self.REQUEST.SESSION.set('browserType', bt)          bt['isN4'] = False
             logging.debug("documentViewer (BROWSER TYPE) bt %s"%bt)                          if string.find(ua, 'MSIE') > -1:
           bt['isIE'] = True
       else:
           bt['isN4'] = (string.find(ua, 'Mozilla/4.') > -1)
           
       try:
           nav = ua[string.find(ua, '('):]
           ie = string.split(nav, "; ")[1]
           if string.find(ie, "MSIE") > -1:
               bt['versIE'] = string.split(ie, " ")[1]
       except: pass
       
       bt['isMac'] = string.find(ua, 'Macintosh') > -1
       bt['isWin'] = string.find(ua, 'Windows') > -1
       bt['isIEWin'] = bt['isIE'] and bt['isWin']
       bt['isIEMac'] = bt['isIE'] and bt['isMac']
       bt['staticHTML'] = False
   
             return bt              return bt
   
                 
Line 131  class documentViewer(Folder): Line 147  class documentViewer(Folder):
     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())
     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_text = PageTemplateFile('zpt/page_main_text', globals())      page_main_text = PageTemplateFile('zpt/page_main_text', globals())
     page_main_text_dict = PageTemplateFile('zpt/page_main_text_dict', globals())      page_main_text_dict = PageTemplateFile('zpt/page_main_text_dict', globals())
     page_main_gis =PageTemplateFile ('zpt/page_main_gis', globals())      page_main_gis =PageTemplateFile ('zpt/page_main_gis', globals())
     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())
     head_main = PageTemplateFile('zpt/head_main', globals())      head_main = PageTemplateFile('zpt/head_main', globals())
     docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())      docuviewer_css = PageTemplateFile('css/docuviewer.css', globals())
     info_xml = PageTemplateFile('zpt/info_xml', globals())      info_xml = PageTemplateFile('zpt/info_xml', globals())
Line 183  class documentViewer(Folder): Line 201  class documentViewer(Folder):
         """get query"""          """get query"""
         return self.template.fulltextclient.getQuery(**args)          return self.template.fulltextclient.getQuery(**args)
   
       def getQueryResultHits(self, **args):
           """get query"""
           return self.template.fulltextclient.getQueryResultHits(**args)
       
       def getQueryResultHitsText(self, **args):
           """get query"""
           return self.template.fulltextclient.getQueryResultHitsText(**args)
       
       def getQueryResultHitsFigures(self, **args):
           """get query"""
           return self.template.fulltextclient.getQueryResultHitsFigures(**args)
       
     def getSearch(self, **args):      def getSearch(self, **args):
         """get search"""          """get search"""
         return self.template.fulltextclient.getSearch(**args)          return self.template.fulltextclient.getSearch(**args)
Line 199  class documentViewer(Folder): Line 229  class documentViewer(Folder):
         """get original page number """          """get original page number """
         return self.template.fulltextclient.getOrigPages(**args)          return self.template.fulltextclient.getOrigPages(**args)
           
       def getAllPlaces(self, **args):
           """get original page number """
           return self.template.fulltextclient.getAllPlaces(**args)
       
       def getTocEntries(self, **args):
           """get original page number """
           return self.template.fulltextclient.getTocEntries(**args)
       
       def getFigureEntries(self, **args):
           """get original page number """
           return self.template.fulltextclient.getFigureEntries(**args)    
       
     def getNumPages(self, docinfo):      def getNumPages(self, docinfo):
         """get numpages"""          """get numpages"""
         return self.template.fulltextclient.getNumPages(docinfo)          return self.template.fulltextclient.getNumPages(docinfo)
Line 250  class documentViewer(Folder): Line 292  class documentViewer(Folder):
         pt = getattr(self.template, 'thumbs_main_rss')          pt = getattr(self.template, 'thumbs_main_rss')
                   
         if viewMode=="auto": # automodus gewaehlt          if viewMode=="auto": # automodus gewaehlt
             if docinfo.has_key("textURL") or docinfo.has_key('textURLPath'): #texturl gesetzt und textViewer konfiguriert              if docinfo.has_key("textURL") or docinfo.get('textURLPath',None): #texturl gesetzt und textViewer konfiguriert
                 viewMode="text"                  viewMode="text"
             else:              else:
                 viewMode="images"                  viewMode="images"
Line 258  class documentViewer(Folder): Line 300  class documentViewer(Folder):
         return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode)          return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode)
       
     security.declareProtected('View','index_html')      security.declareProtected('View','index_html')
     def index_html(self,url,mode="texttool",viewMode="auto",tocMode="thumbs",start=None,pn=1,mk=None, query=None, querySearch=None, characterNormalization=""):      def index_html(self,url,mode="texttool",viewMode="auto",tocMode="thumbs",start=None,pn=1,mk=None):
         '''          '''
         view it          view it
         @param mode: defines how to access the document behind url           @param mode: defines how to access the document behind url 
Line 286  class documentViewer(Folder): Line 328  class documentViewer(Folder):
             docinfo = self.getToc(mode=tocMode, docinfo=docinfo)              docinfo = self.getToc(mode=tocMode, docinfo=docinfo)
                           
         if viewMode=="auto": # automodus gewaehlt          if viewMode=="auto": # automodus gewaehlt
             if docinfo.has_key('textURL') or docinfo.has_key('textURLPath'): #texturl gesetzt und textViewer konfiguriert              if docinfo.has_key('textURL') or docinfo.get('textURLPath',None): #texturl gesetzt und textViewer konfiguriert
                 viewMode="text_dict"                  viewMode="text_dict"
             else:              else:
                 viewMode="images"                  viewMode="images"
Line 307  class documentViewer(Folder): Line 349  class documentViewer(Folder):
         return ret          return ret
   
   
       def getBrowser(self):
           """getBrowser the version of browser """
           bt = browserCheck(self)
           return bt
           
     def findDigilibUrl(self):      def findDigilibUrl(self):
         """try to get the digilib URL from zogilib"""          """try to get the digilib URL from zogilib"""
         url = self.template.zogilib.getDLBaseUrl()          url = self.template.zogilib.getDLBaseUrl()
Line 324  class documentViewer(Folder): Line 371  class documentViewer(Folder):
         else:          else:
             return style              return style
           
     def getLink(self,param=None,val=None):      def getLink(self, param=None, val=None, params=None, baseUrl=None, paramSep='&'):
         """link to documentviewer with parameter param set to val"""          """returns URL to documentviewer with parameter param set to val or from dict params"""
         params=self.REQUEST.form.copy()          # copy existing request params
           urlParams=self.REQUEST.form.copy()
           # change single param
         if param is not None:          if param is not None:
             if val is None:              if val is None:
                 if params.has_key(param):                  if urlParams.has_key(param):
                     del params[param]                      del urlParams[param]
             else:              else:
                 params[param] = str(val)                  urlParams[param] = str(val)
                                   
         if params.get("mode", None) == "filepath": #wenn beim erst Aufruf filepath gesetzt wurde aendere das nun zu imagepath          # change more params
                 params["mode"] = "imagepath"          if params is not None:
                 params["url"] = getParentDir(params["url"])              for k in params.keys():
                                   v = params[k]
         # quote values and assemble into query string                  if v is None:
         #ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()])                      # val=None removes param
         ps = urllib.urlencode(params)                      if urlParams.has_key(k):
         url=self.REQUEST['URL1']+"?"+ps                          del urlParams[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"] = getParentDir(urlParams["url"])
                   
           # 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']
               
           url = "%s?%s"%(baseUrl, ps)
         return url          return url
   
     def getLinkAmp(self,param=None,val=None):  
         """link to documentviewer with parameter param set to val"""  
         params=self.REQUEST.form.copy()  
         if param is not None:  
             if val is None:  
                 if params.has_key(param):  
                     del params[param]  
             else:  
                 params[param] = str(val)  
                                   
         # quote values and assemble into query string      def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None):
         logging.debug("XYXXXXX: %s"%repr(params.items()))          """link to documentviewer with parameter param set to val"""
         ps = "&".join(["%s=%s"%(k,urllib.quote(v)) for (k, v) in params.items()])          return self.getLink(param, val, params, baseUrl, '&')
         url=self.REQUEST['URL1']+"?"+ps  
         return url  
           
     def getInfo_xml(self,url,mode):      def getInfo_xml(self,url,mode):
         """returns info about the document as XML"""          """returns info about the document as XML"""
Line 370  class documentViewer(Folder): Line 424  class documentViewer(Folder):
         pt = getattr(self.template, 'info_xml')          pt = getattr(self.template, 'info_xml')
         return pt(docinfo=docinfo)          return pt(docinfo=docinfo)
   
       def getOptionToggle(self, newState=None, optionName='text_options_open', initialState=True):
           """returns new option state"""
           if not self.REQUEST.SESSION.has_key(optionName):
               # not in session -- initial
               opt = {'lastState': newState, 'state': initialState}
           else:
               opt = self.REQUEST.SESSION.get(optionName)
               if opt['lastState'] != newState:
                   # state in session has changed -- toggle
                   opt['state'] = not opt['state']
                   opt['lastState'] = newState
           
           self.REQUEST.SESSION[optionName] = opt
           return opt['state']
           
     def isAccessible(self, docinfo):      def isAccessible(self, docinfo):
         """returns if access to the resource is granted"""          """returns if access to the resource is granted"""
Line 663  class documentViewer(Folder): Line 731  class documentViewer(Folder):
         presentationUrls = dom.xpath("//texttool/presentation")          presentationUrls = dom.xpath("//texttool/presentation")
         docinfo = self.getBibinfoFromIndexMeta(url, docinfo=docinfo, dom=dom)   # get info von bib tag          docinfo = self.getBibinfoFromIndexMeta(url, docinfo=docinfo, dom=dom)   # get info von bib tag
         docinfo = self.getNameFromIndexMeta(url, docinfo=docinfo, dom=dom)          docinfo = self.getNameFromIndexMeta(url, docinfo=docinfo, dom=dom)
         docinfo =self.getOrigPages(docinfo=docinfo)          
                   
         if presentationUrls and (len(presentationUrls) > 0): # ueberschreibe diese durch presentation informationen           if presentationUrls and (len(presentationUrls) > 0): # ueberschreibe diese durch presentation informationen 
              # presentation url ergiebt sich ersetzen von index.meta in der url der fuer die Metadaten               # presentation url ergiebt sich ersetzen von index.meta in der url der fuer die Metadaten
Line 743  class documentViewer(Folder): Line 811  class documentViewer(Folder):
             logging.error("documentViewer (getdocinfo) unknown mode: %s!"%mode)              logging.error("documentViewer (getdocinfo) unknown mode: %s!"%mode)
             raise ValueError("Unknown mode %s! Has to be one of 'texttool','imagepath','filepath'."%(mode))              raise ValueError("Unknown mode %s! Has to be one of 'texttool','imagepath','filepath'."%(mode))
                                                   
         logging.debug("documentViewer (getdocinfo) docinfo: %s"%docinfo)          # FIXME: fake texturlpath 
           if not docinfo.has_key('textURLPath'):
               docinfo['textURLPath'] = None
                 
           logging.debug("documentViewer (getdocinfo) docinfo: %s"%docinfo)
           #logging.debug("documentViewer (getdocinfo) docinfo: %s"%)
         self.REQUEST.SESSION['docinfo'] = docinfo          self.REQUEST.SESSION['docinfo'] = docinfo
         return docinfo          return docinfo
                                 
     def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, tocMode=None,characterNormalization="",originalPage=None):      def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, tocMode=None):
         """returns pageinfo with the given parameters"""          """returns pageinfo with the given parameters"""
         pageinfo = {}          pageinfo = {}
         current = getInt(current)          current = getInt(current)
           
         pageinfo ['originalPage'] = originalPage  
         pageinfo['current'] = current          pageinfo['current'] = current
         rows = int(rows or self.thumbrows)          rows = int(rows or self.thumbrows)
         pageinfo['rows'] = rows          pageinfo['rows'] = rows
Line 773  class documentViewer(Folder): Line 844  class documentViewer(Folder):
                 pageinfo['numgroups'] += 1                          pageinfo['numgroups'] += 1        
         pageinfo['viewMode'] = viewMode          pageinfo['viewMode'] = viewMode
         pageinfo['tocMode'] = tocMode          pageinfo['tocMode'] = tocMode
         #pageinfo['characterNormalization'] =characterNormalization          pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg')
         pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization',' ')          pageinfo['optionToggle'] = self.REQUEST.get('optionToggle','')
         pageinfo['query'] = self.REQUEST.get('query',' ')          pageinfo['query'] = self.REQUEST.get('query',' ')
         pageinfo['queryType'] = self.REQUEST.get('queryType',' ')          pageinfo['queryType'] = self.REQUEST.get('queryType',' ')
         pageinfo['querySearch'] =self.REQUEST.get('querySearch', 'fulltext')          pageinfo['querySearch'] =self.REQUEST.get('querySearch', 'fulltext')
Line 786  class documentViewer(Folder): Line 857  class documentViewer(Folder):
         toc = int (pageinfo['tocPN'])          toc = int (pageinfo['tocPN'])
         pageinfo['textPages'] =int (toc)          pageinfo['textPages'] =int (toc)
                   
         logging.debug("originalPage: %s"%originalPage)          
                   
         if 'tocSize_%s'%tocMode in docinfo:          if 'tocSize_%s'%tocMode in docinfo:
             tocSize = int(docinfo['tocSize_%s'%tocMode])              tocSize = int(docinfo['tocSize_%s'%tocMode])

Removed from v.1.138  
changed lines
  Added in v.1.162


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