Diff for /zogiLib/zogiLib.py between versions 1.14 and 1.34

version 1.14, 2004/05/05 12:31:13 version 1.34, 2004/07/21 17:44:51
Line 1 Line 1
   
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from Products.PageTemplates.PageTemplate import PageTemplate  from Products.PageTemplates.PageTemplate import PageTemplate
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
Line 7  from webdav.common import rfc1123_date Line 6  from webdav.common import rfc1123_date
   
 import xml.dom.minidom  import xml.dom.minidom
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from xml_helpers import getText  from xml_helpers import getUniqueElementText,getText
 import os  import os
 import re  import re
 import string  import string
 import urllib  import urllib
   import types
 from Globals import package_home  from Globals import package_home
   
 def getString(self,key,default=''):  ZOGIVERSION = "0.9.7 ROC:21.7.2004"
     try:  
         return self.REQUEST[key]  
     except:  
         return default  
   
       
 class zogiLib_navTemplate(ZopePageTemplate):  
     """pageTemplate Objekt"""  
     meta_type="zogiLib_navTemplate"  
   
     _default_content_fn = os.path.join(package_home(globals()),  
                                        'zpt/zogiLib_NavTemplateDefault.zpt')  
   
     manage_options=ZopePageTemplate.manage_options+(  
         {'label':'Copy to Filesystem','action':'copyContent'},  
        )  
   
     def getPath(self):  
         """get path"""  
         return getPath(self,'thumbtemplate.templ')  
       
   
     def copyContent(self):  
         """copycontent to path"""  
   
         return "copied to:"+copyContent(self,'thumbtemplate.templ')  
           
       
 def manage_addZogiLib_NavTemplateForm(self):  
     """Form for adding"""  
     pt=PageTemplateFile('Products/zogiLib/zpt/AddZogilib_NavTemplate.zpt').__of__(self)  
     return pt()  
   
   
   
   
 def manage_addZogiLib_NavTemplate(self, id,title=None, text=None,  def cropf(f):
                            REQUEST=None, submit=None):      """returns a float with reduced precision"""
     "Add a Page Template with optional file content."      return float(int(f * 10000)/10000.0)
   
           
     id = str(id)  def sendFile(self, filename, type):
     if REQUEST is None:      """sends an object or a local file (in the product) as response"""
         self._setObject(id, zogilib_NavTemplate(id, text))      paths = filename.split('/')
         ob = getattr(self, id)      object = self
              # look for an object called filename
         if title:      for path in paths:
             ob.pt_setTitle(title)          if hasattr(object, path):
         return ob          object = getattr(object, path)
     else:  
         file = REQUEST.form.get('file')  
         headers = getattr(file, 'headers', None)  
         if headers is None or not file.filename:  
             zpt = zogilib_NavTemplate(id)  
         else:          else:
             zpt = zogilib_NavTemplate(id, file, headers.get('content_type'))          object = None
           break
         self._setObject(id, zpt)      if object:
         ob = getattr(self, id)      # if the object exists then send it
       return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE)
   
         try:  
             u = self.DestinationURL()  
         except AttributeError:  
             u = REQUEST['URL1']  
   
         if submit == " Add and Edit ":  
             u = "%s/%s" % (u, quote(id))  
         REQUEST.RESPONSE.redirect(u+'/manage_main')  
     return ''  
   
   
           
 def readNavTemp(fileName):  
     """navtemp"""  
       
       
     if os.path.exists(fileName+"/index.meta"):  
         dom=xml.dom.minidom.parse(fileName+"/index.meta")  
     else:  
         return None  
       
       
     try:  
         navTag=getText(dom.getElementsByTagName('zogilibtemplate')[0].childNodes)  
     except:  
         navTag=None  
     return navTag  
   
 class zogiLib_mainTemplate(ZopePageTemplate):  
     """pageTemplate Objekt"""  
     meta_type="zogiLib_mainTemplate"  
   
       
     def __init__(self, id, text=None, content_type=None, version="book"):  
   
         default_content_string="zpt/zogiLibMain_%s.zpt"%version  
         self._default_content_fn = os.path.join(package_home(globals()),default_content_string)  
         self.id = str(id)  
         self.ZBindings_edit(self._default_bindings)  
         if text is None:  
             text = open(self._default_content_fn).read()  
         self.pt_edit(text, content_type)  
   
       
 def manage_addZogiLibMainTemplateForm(self):  
     """Form for adding"""  
     pt=PageTemplateFile('Products/ECHO_content/zpt/AddOSAS_thumbTemplate.zpt').__of__(self)  
     return pt()  
   
   
   
   
 def manage_addZogiLibMainTemplate(self, id,title=None, text=None,  
                            REQUEST=None, submit=None):  
     "Add a Page Template with optional file content."  
   
       
     id = str(id)  
     if REQUEST is None:  
         self._setObject(id, zogiLib_mainTemplate(id, text))  
         ob = getattr(self, id)  
          
         if title:  
             ob.pt_setTitle(title)  
         return ob  
     else:  
         file = REQUEST.form.get('file')  
         headers = getattr(file, 'headers', None)  
         if headers is None or not file.filename:  
             zpt = zogiLib_mainTemplate(id)  
         else:          else:
             zpt = zogiLib_mainTemplate(id, file, headers.get('content_type'))      # send a local file with the given content-type
       fn = os.path.join(package_home(globals()), filename)
         self._setObject(id, zpt)      self.REQUEST.RESPONSE.setHeader("Content-Type", type)
         ob = getattr(self, id)      self.REQUEST.RESPONSE.write(file(fn).read())
       return
   
         try:  def browserCheck(self):
             u = self.DestinationURL()      """check the browsers request to find out the browser type"""
         except AttributeError:      bt = {}
             u = REQUEST['URL1']      ua = self.REQUEST.get_header("HTTP_USER_AGENT")
       bt['ua'] = ua
       bt['isIE'] = string.find(ua, 'MSIE') > -1
       bt['isN4'] = (string.find(ua, 'Mozilla/4.') > -1) and not bt['isIE']
       nav = ua[string.find(ua, '('):]
       ie = string.split(nav, "; ")[1]
       if string.find(ie, "MSIE") > -1:
           bt['versIE'] = string.split(ie, " ")[1]
       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
   
         if submit == " Add and Edit ":      return bt
             u = "%s/%s" % (u, quote(id))  
         REQUEST.RESPONSE.redirect(u+'/manage_main')  
     return ''  
   
           
 class zogiImage(Image):  class zogiImage(Image):
     """einzelnes Image"""      """einzelnes Image"""
     meta_type="zogiImage"      meta_type="zogiImage"
   
       manage_options=ZopePageTemplate.manage_options+(
           {'label':'Main config','action':'changeZogiImageForm'},
          )
           
           
     def __init__(self,id,title,baseUrl,queryString,content_type='',precondition=''):      def __init__(self,id,title,baseUrl,queryString,content_type='',precondition=''):
Line 185  class zogiImage(Image): Line 86  class zogiImage(Image):
   
     def changeZogiImageForm(self):      def changeZogiImageForm(self):
         """Main configuration"""          """Main configuration"""
         pt=PageTemplateFile('Products/zogiLib/zpt/changeZogiImageForm.zpt').__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/changeZogiImageForm.zpt')).__of__(self)
         return pt()          return pt()
           
     def changeZogiImage(self,title,baseUrl, queryString,RESPONSE=None):      def changeZogiImage(self,title,baseUrl, queryString,RESPONSE=None):
Line 198  class zogiImage(Image): Line 99  class zogiImage(Image):
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
   
     manage_options=ZopePageTemplate.manage_options+(  
         {'label':'Main config','action':'changeZogiImageForm'},  
        )  
   
       
   
           
     def index_html(self, REQUEST, RESPONSE):      def index_html(self, REQUEST, RESPONSE):
         """          """
         Modified version of OFS/Image.py          Modified version of OFS/Image.py
Line 471  class zogiImage(Image): Line 365  class zogiImage(Image):
   
 def manage_addZogiImageForm(self):  def manage_addZogiImageForm(self):
     """Form for adding"""      """Form for adding"""
     pt=PageTemplateFile('Products/zogiLib/zpt/addZogiImage.zpt').__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/addZogiImage.zpt')).__of__(self)
     return pt()      return pt()
   
   
Line 488  class zogiLib(Folder): Line 382  class zogiLib(Folder):
     """StandardElement"""      """StandardElement"""
   
     meta_type="zogiLib"      meta_type="zogiLib"
       #xxxx
   
     def getDlInfo(self):      manage_options = Folder.manage_options+(
         """DLInfo"""              {'label':'Main Config','action':'changeZogiLibForm'},
         paramH={}              )
         baseUrl=re.sub("servlet/Scaler","dlInfo-xml.jsp",self.digilibBaseUrl)  
                   
         url=urllib.urlopen(baseUrl+self.REQUEST['QUERY_STRING'])      def __init__(self, id, title, digilibBaseURL,localFileBase, version="book", basePath="", dlTarget=None, dlServerURL=None):
         dom=xml.dom.minidom.parse(url)          """init"""
         params=dom.getElementsByTagName('parameter')  
         for param in params:  
             paramH[param.getAttribute('name')]=param.getAttribute('value')  
         return paramH  
   
     def getPageNumTotal(self):          self.id=id
         """pagenums"""          self.title=title
         return self.getDlInfo()['pt'].encode('utf-8')          self.digilibBaseURL=digilibBaseURL
           self.dlServerURL = dlServerURL
           if digilibBaseURL and not dlServerURL:
               self.dlServerURL = re.sub("/servlet/Scaler\?","",self.digilibBaseURL)
   
           self.localFileBase=localFileBase
           self.basePath=basePath
           self.layout=version
           if dlTarget:
               self.dlTarget = dlTarget
           else:
               self.dlTarget = "digilib"
           
       def version(self):
           """version information"""
           return ZOGIVERSION
   
       def getContextStatic(self):
           """get all the contexts which go to static pages"""
           
     def generateImageFolder(self):  
         """images ablegen"""  
         self.manage_addFolder('images')  
         pathName=os.path.join(package_home(globals()),'images')  
         for image in os.listdir(pathName):  
             try:              try:
               dom=xml.dom.minidom.parse(urllib.urlopen(self.getMetaFileName()))
               contexts=dom.getElementsByTagName("context")
                                   
                 fn=file(os.path.join(pathName,image))              ret=[]
                 self.images.manage_addImage(image,fn)              for context in contexts:
                   name=getUniqueElementText(context.getElementsByTagName("name"))
   
                   link=getUniqueElementText(context.getElementsByTagName("link"))
                   if name or link:
                       ret.append((name,link))
               return ret
             except:              except:
                 print "ZOGILIB not imported:",image              return []
                                   
       def getContextDatabases(self):
           """get all dynamic contexts"""
           try:
               dom=xml.dom.minidom.parse(urllib.urlopen(self.getMetaFileName()))
               contexts=dom.getElementsByTagName("context")
               ret=[]
               for context in contexts:
                   metaDataLinks=context.getElementsByTagName("meta-datalink")
                   for metaDataLink in metaDataLinks:
                       db=metaDataLink.getAttribute("db")
                       link=self.REQUEST['URL1']+"/dl_db?db=%s"%db
                       if db:
                           ret.append((db,link))
                   metaDataLinks=context.getElementsByTagName("meta-baselink")
   
                   for metaDataLink in metaDataLinks:
                       db=metaDataLink.getAttribute("db")
                       link=self.REQUEST['URL1']+"/dl_db?db=%s"%db
                       if db:
                           ret.append((db,link))
                           
               return ret
           except:
               return ret
                   
       def formatHTML(self,url,label=None,viewUrl=None):
   
     def __init__(self, id,title,digilibBaseUrl, localFileBase,version="book"):  
         """init"""  
   
         self.id=id          sets=xml.dom.minidom.parse(urllib.urlopen(url)).getElementsByTagName('dataset')
         self.title=title          ret=""
         self.digilibBaseUrl=digilibBaseUrl          print label
         self.localFileBase=localFileBase          if label:
         #self._setObject('topTemplate',zogiLib_navTemplate(id='topTemplate'))              ret+="""<a href="%s">%s</a>"""%(viewUrl,label)
         self._setObject('mainTemplate',zogiLib_mainTemplate(id='mainTemplate',version=version))          for set in sets:
         #self.generateImageFolder()              ret+="<table>"
               for node in set.childNodes:
                   if hasattr(node,'tagName'):
                       tag=node.tagName
                       label=node.getAttribute("label")
                       if not label:
                           label=tag
                       text=getText(node.childNodes)
                       ret+="""<tr><td><b>%s:</b></td><td>%s</td></tr>"""%(label,text)
               ret+="</table>"
           return ret
   
       def getMetaData(self):
           """getMetaData"""
           try:
               dom=xml.dom.minidom.parse(urllib.urlopen(self.getMetaFileName()))
           except:
               return "error metadata"
   
     manage_options = Folder.manage_options+(          contexts=dom.getElementsByTagName("context")
             {'label':'Main Config','action':'changeZogiLibForm'},          ret=[]
             )          db=self.getDLParam("db")
           ob=self.getDLParam("object")
   
     def option_js(self):          fn=self.getDLParam("fn")
         """option_js"""          pn=self.getDLParam("pn")
         ret="""          if not fn:
           function setDLParam(e) {              fn=""
           var s;          if not pn:
           if (document.all) {              pn=""
             s=e.srcElement;          if not ob:
           } else {              ob=""
             s=e.target;  
           }  
           if (window.opener) {  
             window.opener.setParameter(s.name, s.value);  
             window.opener.display(9);  
           } else {  
             setParameter(s.name, s.value);  
             display(9);  
           }  
         }"""  
         return ret  
                                                   
           for context in contexts:
               metaDataLinks=context.getElementsByTagName("meta-datalink")
               for metaDataLink in metaDataLinks:
                                                   
     def navigation_js(self):                  if (db==metaDataLink.getAttribute("db")) or (len(metaDataLinks)==1):
         """Javascript"""  
         fileName = os.path.join(package_home(globals()),'js/js_lib.js')  
         js = file(fileName).read()  
         fileName = os.path.join(package_home(globals()),'js/dl_lib.js')  
         js += file(fileName).read()  
         return js   
   
                       link=getUniqueElementText(metaDataLink.getElementsByTagName("metadata-url"))
                       label=getUniqueElementText(metaDataLink.getElementsByTagName("label"))
                       url=getUniqueElementText(metaDataLink.getElementsByTagName("url"))
   
                       return self.formatHTML(link,label,url)
                           
     def generateTopJavaScript(self):              metaDataLinks=context.getElementsByTagName("meta-baselink")
         """generate script"""  
         ret="""  
         var baseUrl = '%s'; """% self.REQUEST['URL0']  
         ret+="""  
         newParameter('fn', '', 1);  
         newParameter('pn', '1', 1);  
         newParameter('ws', '1.0', 1);  
         newParameter('mo', '', 1);  
         newParameter('mk', '', 3);  
         newParameter('wx', '0.0', 2);  
         newParameter('wy', '0.0', 2);  
         newParameter('ww', '1.0', 2);  
         newParameter('wh', '1.0', 2);  
         newParameter('pt', '0', 9);  
         newParameter('brgt', '0.0', 1);  
         newParameter('cont', '0.0', 1);  
         newParameter('rot', '0.0', 1);  
         newParameter('rgba', '', 1);  
         newParameter('rgbm', '', 1);  
         newParameter('ddpix', '', 9);  
         newParameter('ddpiy', '', 9);  
         var picsize = new Size(100, 100);  
         document.id='digilib';  
   
         """              for metaDataLink in metaDataLinks:
                   
                   if db==metaDataLink.getAttribute("db") or (len(metaDataLinks)==1):
                       
                       link=getUniqueElementText(metaDataLink.getElementsByTagName("metadata-url"))
                       label=getUniqueElementText(metaDataLink.getElementsByTagName("label"))
                       url=getUniqueElementText(metaDataLink.getElementsByTagName("url"))
   
                       return self.formatHTML(link+'fn=%s&pn=%s&object=%s'%(fn,pn,ob),label,url)
         return ret          return ret
   
       def getDLInfo(self):
           """get DLInfo from digilib server"""
           paramH={}
           baseUrl=self.dlServerURL+"/dlInfo-xml.jsp"
           try:
               url=urllib.urlopen(baseUrl+self.REQUEST['QUERY_STRING'])
               dom=xml.dom.minidom.parse(url)
               params=dom.getElementsByTagName('parameter')
               for param in params:
                   paramH[param.getAttribute('name')]=param.getAttribute('value')
               return paramH
           except:
               return {}
   
   
       def createHeadJS(self):
           """generate all javascript tags for head"""
       self.checkQuery()
       bt = self.REQUEST.SESSION['browserType']
           if bt['staticHTML']:
               return
           
           pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/zogilib_head_js')).__of__(self)
           return pt()
   
       def createParamJS(self):
           """generate javascript for parameters only"""
       self.checkQuery()
       bt = self.REQUEST.SESSION['browserType']
           if bt['staticHTML']:
               return
   
           pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/zogilib_param_js')).__of__(self)
           return pt()
                   
     def generateScalerImg(self,requestString):                          
       def createScalerImg(self, requestString=None, bottom=0, side=0, width=500, height=500):
         """generate Scaler IMG Tag"""          """generate Scaler IMG Tag"""
         retStr=self.digilibBaseUrl+requestString      self.checkQuery()
         jS="""<script type="text/javascript">var ps = bestPicSize('scaler');      bt = self.REQUEST.SESSION['browserType']
         document.write('<img id="pic" src="%s&dw='+ps.width+'&dh='+ps.height+'" />')          # override with parameters from session
         </script>"""%retStr          if  self.REQUEST.SESSION.has_key('scalerDiv'):
         return jS              (requestString, bottom, side, width, height) = self.REQUEST.SESSION['scalerDiv']
           # if not explicitly defined take normal request
           if not requestString:
               requestString = self.getAllDLParams()
           url = self.digilibBaseURL+requestString
           # construct bottom and side insets
           b_par = ""
           s_par = ""
           if (bottom != 0) or (side != 0):
               b_par = "-" + str(int(bottom))
               s_par = "-" + str(int(side))
           tag = ""
           if bt['staticHTML']:
               tag += '<div id="scaler"><img id="pic" src="%s&dw=%i&dh=%i" /></div>'%(url, int(width-side), int(height-bottom))
           else:
               if bt['isN4']:
                   # N4 needs layers
                   tag += '<ilayer id="scaler">'
               else:
                   tag += '<div id="scaler">'
               tag += '<script type="text/javascript">'
               tag += "var ps = bestPicSize(getElement('scaler'));"
               # write img tag with javascript
               tag += 'document.write(\'<img id="pic" src="%s&dw=\'+(ps.width%s)+\'&dh=\'+(ps.height%s)+\'" />\');'%(url, s_par, b_par)
               tag += '</script>'
               if bt['isN4']:
                   tag += '</ilayer>'
               else:
                   tag += '</div>'
           return tag
   
       def createScalerDiv(self, requestString = None, bottom = 0, side = 0, width=500, height=500):
           """generate scaler img and table with navigation arrows"""
       self.checkQuery()
           if requestString != None or bottom != 0 or side != 0:
               self.REQUEST.SESSION['scalerDiv'] = (requestString, bottom, side, width, height)
           else:
               if self.REQUEST.SESSION.has_key('scalerDiv'):
                   # make shure to remove unused parameter
                   del self.REQUEST.SESSION['scalerDiv']
                   
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/zogilib_img_div')).__of__(self)
           return pt()
   
       def createAuxDiv(self):
           """generate other divs"""
       self.checkQuery()
       bt = self.REQUEST.SESSION['browserType']
           if bt['staticHTML']:
               return
           if bt['isN4']:
               f = 'zpt/zogilib_divsN4.zpt'
           else:
               f = 'zpt/zogilib_divs.zpt'
           pt=PageTemplateFile(os.path.join(package_home(globals()),f)).__of__(self)
           return pt()
   
   
       def option_js(self):
           """javascript"""
           return sendFile(self, 'js/option.js', 'text/plain')
   
       def dl_lib_js(self):
           """javascript"""
           return sendFile(self, 'js/dllib.js', 'text/plain')
   
       def js_lib_js(self):
           """javascript"""
           return sendFile(self, 'js/baselib.js', 'text/plain')
   
       def optionwindow(self):
           """showoptions"""
       self.checkQuery()
       bt = self.REQUEST.SESSION['browserType']
           if bt['staticHTML']:
               pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/optionwindow_static.zpt')).__of__(self)
           else:
           finds=self.ZopeFind(self,obj_ids=['viewingTools.zpt'])
           if finds:
                   
           return finds[0][1]()
           else:
                   pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/optionwindow.zpt')).__of__(self)
                   return pt()
   
     def mark1(self):      def mark1(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/mark1.gif')          return sendFile(self, 'images/mark1.gif', 'image/gif')
         return file(fileName).read()  
   
     def mark2(self):      def mark2(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/mark2.gif')          return sendFile(self, 'images/mark2.gif', 'image/gif')
         return file(fileName).read()  
   
     def mark3(self):      def mark3(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/mark3.gif')          return sendFile(self, 'images/mark3.gif', 'image/gif')
         return file(fileName).read()  
   
     def mark4(self):      def mark4(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/mark4.gif')          return sendFile(self, 'images/mark4.gif', 'image/gif')
         return file(fileName).read()  
   
     def mark5(self):      def mark5(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/mark5.gif')          return sendFile(self, 'images/mark5.gif', 'image/gif')
         return file(fileName).read()  
   
     def mark6(self):      def mark6(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/mark6.gif')          return sendFile(self, 'images/mark6.gif', 'image/gif')
         return file(fileName).read()  
   
     def mark7(self):      def mark7(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/mark7.gif')          return sendFile(self, 'images/mark7.gif', 'image/gif')
         return file(fileName).read()  
   
     def mark8(self):      def mark8(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/mark8.gif')          return sendFile(self, 'images/mark8.gif', 'image/gif')
         return file(fileName).read()  
   
     def corner1(self):      def corner1(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/olinks.gif')          return sendFile(self, 'images/olinks.gif', 'image/gif')
         return file(fileName).read()  
   
     def corner2(self):      def corner2(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/orechts.gif')          return sendFile(self, 'images/orechts.gif', 'image/gif')
         return file(fileName).read()  
   
     def corner3(self):      def corner3(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/ulinks.gif')          return sendFile(self, 'images/ulinks.gif', 'image/gif')
         return file(fileName).read()  
   
     def corner4(self):      def corner4(self):
         """mark image"""          """mark image"""
         fileName = os.path.join(package_home(globals()),'images/urechts.gif')          return sendFile(self, 'images/urechts.gif', 'image/gif')
         return file(fileName).read()  
   
       def up_img(self):
           """mark image"""
           return sendFile(self, 'images/up.gif', 'image/gif')
   
       def down_img(self):
           """mark image"""
           return sendFile(self, 'images/down.gif', 'image/gif')
   
     def changeZogiLibForm(self):      def left_img(self):
         """Main configuration"""          """mark image"""
         pt=PageTemplateFile('Products/zogiLib/zpt/changeZogiLibForm.zpt').__of__(self)          return sendFile(self, 'images/left.gif', 'image/gif')
         return pt()  
           
     def changeZogiLib(self,title,digilibBaseUrl, localFileBase,RESPONSE=None):      def right_img(self):
         """change it"""          """mark image"""
         self.title=title          return sendFile(self, 'images/right.gif', 'image/gif')
         self.digilibBaseUrl=digilibBaseUrl  
         self.localFileBase=localFileBase  
   
         if RESPONSE is not None:  
             RESPONSE.redirect('manage_main')  
   
                           
     def nav_html(self,fileName):      def index_html(self):
         """navigations frame"""          """main action"""
         ## currently not in use      self.checkQuery()
         # suche nach index.meta mit zogilib thumb info      bt = self.REQUEST.SESSION['browserType']
                   tp = "zogiLibMainTemplate"
         templ=readNavTemp(self.localFileBase+"/"+fileName)          
         if not templ:          if hasattr(self, tp):
             templ=readNavTemp(self.localFileBase+"/"+fileName.split("/")[0])          pt = getattr(self, tp)
             if not templ:          else:
                 return self.topTemplate.document_src()              tpt = self.layout
               
               if bt['staticHTML']:
                   tpt = "static"
   
         return urllib.urlopen(templ).read()              pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/zogiLibMain_%s'%tpt)).__of__(self)
           
           return pt()
           
     def index_html(self):  
         """main action"""  
   
         #pt=PageTemplateFile('Products/zogiLib/zpt/zogiLibMain_image.zpt').__of__(self)  
         #return pt()  
         return self.mainTemplate()  
   
     def storeQuery(self):      def storeQuery(self, more = None):
         """storeQuery in session"""          """storeQuery in session"""
         self.REQUEST.SESSION['query']={}          dlParams = {}
         for fm in self.REQUEST.form.keys():          for fm in self.REQUEST.form.keys():
             self.REQUEST.SESSION['query'][fm]=self.REQUEST.form[fm]              dlParams[fm] = self.REQUEST.form[fm]
           # look for more
         self.REQUEST.SESSION['dlInfo']=self.getDlInfo()          if more:
                       for fm in more.split('&'):
     def getParam(self,param):  
         """Gebe Parameter aus"""  
         try:          try:
             return self.REQUEST.SESSION['query'][param]                      pv = fm.split('=')
                       dlParams[pv[0]] = pv[1]
         except:          except:
             return None                      pass
   
     def getPageNum(self):          # parse digilib mode parameter
         """PAgenum"""          if 'mo' in dlParams:
         pn=self.getParam('pn')              if len(dlParams['mo']) > 0:
         if pn:                  modes=dlParams['mo'].split(',')
             return pn  
         else:          else:
             return 1              modes=[]
   
     def biggerWS(self):          self.REQUEST.SESSION['query'] = dlParams
         """ws+1"""          self.REQUEST.SESSION['dlModes'] = modes
         ws=self.getParam('ws')          self.REQUEST.SESSION['dlInfo'] = self.getDLInfo()
         if ws:          if not self.REQUEST.SESSION.has_key('browserType'):
             return int(ws)+1              self.REQUEST.SESSION['browserType'] = browserCheck(self)
               
           return
   
       def checkQuery(self):
       """check if the query has been stored"""
       if not (self.REQUEST.SESSION and self.REQUEST.SESSION.has_key('query')) :
           print "ZOGILIB: have to store query!!"
           self.storeQuery()
           return
   
       def zogilibPath(self, otherbase=None):
           """returns an URL to the zogiLib instance"""
           url = self.REQUEST['URL1']
           # should end with "/"
           if len(url) > 0 and url[-1] != '/':
               url += '/'
           if type(otherbase) is str:
               url += otherbase
         else:          else:
             return 2              url += self.basePath
           # should end with "/"
           if len(url) > 0 and url[-1] != '/':
               url += '/'
           return url
   
     def options(self):      def getDLParam(self, param):
         """showoptions"""          """returns parameter"""
         pt=PageTemplateFile('Products/zogiLib/zpt/optionwindow.zpt').__of__(self)          try:
         return pt()              return self.REQUEST.SESSION['query'][param]
           except:
               return
   
       def setDLParam(self, param, value):
           """sets parameter"""
           self.REQUEST.SESSION['query'][param] = value
           return
   
       def getAllDLParams(self):
           """parameter string for digilib"""
           dlParams = self.REQUEST.SESSION['query']
           # save modes
           modes = self.REQUEST.SESSION['dlModes']
           dlParams['mo'] = string.join(modes, ',')
           # assemble query string
           ret = ""
           for param in dlParams.keys():
               if dlParams[param] is None: continue
               val = str(dlParams[param])
               if val != "":
                   ret += param + "=" + val + "&"
                   
     def smallerWS(self):          # omit trailing "&"
         """ws-11"""          return ret.rstrip('&')
         ws=self.getParam('ws')  
         if ws:  
             if int(ws)==1:  
                 return 1  
             else:  
                 return int(ws)-1  
         else:  
             return 1  
                   
                   
     def setParam(self,pn=None,ws=None,rot=None,brgt=None,cont=None):      def setDLParams(self,pn=None,ws=None,rot=None,brgt=None,cont=None):
         """setze Parameter"""          """setze Parameter"""
         ret=""  
   
         if brgt:          self.setDLParam('brgt', brgt)
             self.REQUEST.SESSION['query']['brgt']=brgt          self.setDLParam('cont', cont)
           self.setDLParam('ws', ws)
         if cont:          self.setDLParam('rot', rot)
             self.REQUEST.SESSION['query']['cont']=cont  
   
         if pn:          if pn:
             self.REQUEST.SESSION['query']['pn']=pn              # unmark
               self.setDLParam('mk', None)
         if ws:              self.setDLParam('pn', pn)
             self.REQUEST.SESSION['query']['ws']=ws              
           return self.display()
   
         if rot:  
             self.REQUEST.SESSION['query']['rot']=rot  
                           
         for param in self.REQUEST.SESSION['query'].keys():      def display(self):
           """(re)display page"""
           params = self.getAllDLParams()
           if self.basePath:
               self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?'+params)
           else:
               self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+params)
                           
             ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&"      def getMetaFileName(self):
           url=self.dlServerURL+'/dlContext-xml.jsp?'+self.getAllDLParams()
           return urlbase
   
       def getToolbarPageURL(self):
           """returns a toolbar-enabled page URL"""
           url=self.dlServerURL+'/digimage.jsp?'+self.getAllDLParams()
           return url
       
       def getDLTarget(self):
           """returns dlTarget"""
           self.checkQuery()
           s = self.dlTarget
   #         s = 'dl'
   #         if self.getDLParam('fn'):
   #             s += "_" + self.getDLParam('fn')
   #         if self.getDLParam('pn'):
   #             s += "_" + self.getDLParam('pn')
           return s
   
       def setStaticHTML(self, static=True):
           """sets the preference to static HTML"""
           self.checkQuery()
       self.REQUEST.SESSION['browserType']['staticHTML'] = static
           return
   
       def isStaticHTML(self):
           """returns if the page is using static HTML only"""
           self.checkQuery()
       return self.REQUEST.SESSION['browserType']['staticHTML']
                   
         self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)      def getPT(self):
           """pagenums"""
           di = self.REQUEST.SESSION['dlInfo']
           if di:
               return int(di['pt'])
           else:
               return 1
   
       def getPN(self):
           """Pagenum"""
           pn = self.getDLParam('pn')
           try:
               return int(pn)
           except:
               return 1
         
     def mirrorPage(self,mi):      def getBiggerWS(self):
         """mirror"""          """ws+1"""
         ret=""          ws = self.getDLParam('ws')
         try:          try:
             splitted=self.REQUEST.SESSION['query']['mo'].split(',')              return float(ws)+0.5
         except:          except:
             splitted=[]              return 1.5
                   
         if mi=="h":      def getSmallerWS(self):
           """ws-1"""
           ws=self.getDLParam('ws')
           try:
               return max(float(ws)-0.5, 1)
           except:
               return 1
                                           
             if 'hmir' in splitted:      def hasMode(self, mode):
                 splitted.remove('hmir')          """returns if mode is in the diglib mo parameter"""
           return (mode in self.REQUEST.SESSION['dlModes'])
   
       def hasNextPage(self):
           """returns if there is a next page"""
           pn = self.getPN()
           pt = self.getPT()
           return (pn < pt)
      
       def hasPrevPage(self):
           """returns if there is a previous page"""
           pn = self.getPN()
           return (pn > 1)
   
       def canMoveLeft(self):
           """returns if its possible to move left"""
           wx = float(self.getDLParam('wx') or 0)
           return (wx > 0)
   
       def canMoveRight(self):
           """returns if its possible to move right"""
           wx = float(self.getDLParam('wx') or 0)
           ww = float(self.getDLParam('ww') or 1)
           return (wx + ww < 1)
   
       def canMoveUp(self):
           """returns if its possible to move up"""
           wy = float(self.getDLParam('wy') or 0)
           return (wy > 0)
   
       def canMoveDown(self):
           """returns if its possible to move down"""
           wy = float(self.getDLParam('wy') or 0)
           wh = float(self.getDLParam('wh') or 1)
           return (wy + wh < 1)
   
   
       def dl_StaticHTML(self):
           """set rendering to static HTML"""
           self.checkQuery()
           self.REQUEST.SESSION['browserType']['staticHTML'] = True
           return self.display()
   
       def dl_DynamicHTML(self):
           """set rendering to dynamic HTML"""
           self.checkQuery()
           self.REQUEST.SESSION['browserType']['staticHTML'] = False
           return self.display()
           
       def dl_HMirror(self):
           """mirror action"""
           modes = self.REQUEST.SESSION['dlModes']
           if 'hmir' in modes:
               modes.remove('hmir')
             else:              else:
                 splitted.append('hmir')              modes.append('hmir')
   
         if mi=="v":          return self.display()
   
             if 'vmir' in splitted:      def dl_VMirror(self):
                 splitted.remove('vmir')          """mirror action"""
           modes = self.REQUEST.SESSION['dlModes']
           if 'vmir' in modes:
               modes.remove('vmir')
             else:              else:
                 splitted.append('vmir')              modes.append('vmir')
   
   
         self.REQUEST.SESSION['query']['mo']=string.join(splitted,",")  
           
           
           
           
         for param in self.REQUEST.SESSION['query'].keys():  
               
             ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&"  
           
         self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)  
                   
     def decode(self,strR):          return self.display()
         """decode &"""  
                   
         return re.sub('\&amp','\&',strR)      def dl_Zoom(self, z):
           """general zoom action"""
           ww1 = float(self.getDLParam('ww') or 1)
           wh1 = float(self.getDLParam('wh') or 1)
           wx = float(self.getDLParam('wx') or 0)
           wy = float(self.getDLParam('wy') or 0)
           ww2 = ww1 * z
           wh2 = wh1 * z
           wx += (ww1 - ww2) / 2
           wy += (wh1 - wh2) / 2
           ww2 = max(min(ww2, 1), 0)
           wh2 = max(min(wh2, 1), 0)
           wx = max(min(wx, 1), 0)
           wy = max(min(wy, 1), 0)
           self.setDLParam('ww', cropf(ww2))
           self.setDLParam('wh', cropf(wh2))
           self.setDLParam('wx', cropf(wx))
           self.setDLParam('wy', cropf(wy))
           return self.display()
           
       def dl_ZoomIn(self):
           """zoom in action"""
           z = 0.7071
           return self.dl_Zoom(z)
   
       def dl_ZoomOut(self):
           """zoom out action"""
           z = 1.4142
           return self.dl_Zoom(z)
   
       def dl_Move(self, dx, dy):
           """general move action"""
           ww = float(self.getDLParam('ww') or 1)
           wh = float(self.getDLParam('wh') or 1)
           wx = float(self.getDLParam('wx') or 0)
           wy = float(self.getDLParam('wy') or 0)
           wx += dx * 0.5 * ww
           wy += dy * 0.5 * wh
           wx = max(min(wx, 1), 0)
           wy = max(min(wy, 1), 0)
           self.setDLParam('wx', cropf(wx))
           self.setDLParam('wy', cropf(wy))
           return self.display()
           
       def dl_MoveLeft(self):
           """move left action"""
           return self.dl_Move(-1, 0)
       
       def dl_MoveRight(self):
           """move left action"""
           return self.dl_Move(1, 0)
       
       def dl_MoveUp(self):
           """move left action"""
           return self.dl_Move(0, -1)
       
       def dl_MoveDown(self):
           """move left action"""
           return self.dl_Move(0, 1)
       
       def dl_WholePage(self):
           """zoom out action"""
           self.setDLParam('ww', 1)
           self.setDLParam('wh', 1)
           self.setDLParam('wx', 0)
           self.setDLParam('wy', 0)
           return self.display()
           
       def dl_PrevPage(self):
           """next page action"""
           pn = self.getPN() - 1
           if pn < 1:
               pn = 1
           self.setDLParam('pn', pn)
           # unmark
           self.setDLParam('mk', None)
           return self.display()
           
       def dl_NextPage(self):
           """next page action"""
           pn = self.getPN() + 1
           pt = self.getPT()
           if pn > pt:
               pn = pt
           self.setDLParam('pn', pn)
           # unmark
           self.setDLParam('mk', None)
           return self.display()
   
       def dl_FirstPage(self):
           """first page action"""
           self.setDLParam('pn', 1)
           # unmark
           self.setDLParam('mk', None)
           return self.display()
       
       def dl_LastPage(self):
           """last page action"""
           self.setDLParam('pn', self.getPT())
           # unmark
           self.setDLParam('mk', None)
           return self.display()
   
       def dl_Unmark(self):
           """action to remove last mark"""
           mk = self.getDLParam('mk')
           if mk:
               marks = mk.split(',')
               marks.pop()
               mk = string.join(marks, ',')
               self.setDLParam('mk', mk)
           return self.display()
   
       def dl_db(self,db):
           """set db"""
           self.setDLParam('db',db)
           self.display()
           
     def wholePage(self):      def changeZogiLibForm(self):
         """zoom out"""          """Main configuration"""
         ret=""          pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/changeZogiLibForm.zpt')).__of__(self)
                   return pt()
         self.REQUEST.SESSION['query']['ww']=1  
         self.REQUEST.SESSION['query']['wh']=1  
         self.REQUEST.SESSION['query']['wx']=0  
         self.REQUEST.SESSION['query']['wy']=0  
               
         for param in self.REQUEST.SESSION['query'].keys():  
               
             ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&"  
           
         self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)  
           
     def prevPage(self,pn=None):  
         """next page"""  
         ret=""  
   
         if pn and pn>0:  
             pn=str(int(pn)-1)  
           
   
         self.REQUEST.form['pn']=pn  
           
         for param in self.REQUEST.form.keys():  
               
             ret+=param+"="+str(self.REQUEST.form[param])+"&"  
                   
         self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)      def changeZogiLib(self,title,digilibBaseURL, localFileBase, version, basePath, dlTarget, RESPONSE=None):
           """change it"""
           self.title=title
           self.digilibBaseURL=digilibBaseURL
           self.localFileBase=localFileBase
           self.basePath = basePath
           self.layout=version
           if dlTarget:
               self.dlTarget = dlTarget
           else:
               self.dlTarget = "digilib"
   
     def firstPage(self):          if RESPONSE is not None:
         """erste Seite"""              RESPONSE.redirect('manage_main')
         return self.setParam(pn="1")  
           
     def lastPage(self):  
         """letzte Seite"""  
   
   def manage_addZogiLibForm(self):
       """interface for adding zogilib"""
       pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/addZogiLibForm')).__of__(self)
       return pt()
                   
     def nextPage(self,pn=None):  def manage_addZogiLib(self,id,title,digilibBaseURL, localFileBase,version="book",basePath="",dlTarget="digilib",RESPONSE=None):
         """next page"""      """add dgilib"""
         ret=""      newObj=zogiLib(id,title,digilibBaseURL, localFileBase, version, basePath, dlTarget)
       self.Destination()._setObject(id,newObj)
       if RESPONSE is not None:
           RESPONSE.redirect('manage_main')
                   
         try:  
             pn=str(int(pn)+1)  
         except:  
             pn=str(2)  
   
         self.REQUEST.form['pn']=pn  class zogiLibPageTemplate(ZopePageTemplate):
       """pageTemplate Objekt"""
       meta_type="zogiLib_pageTemplate"
                   
         for param in self.REQUEST.form.keys():  
             ret+=param+"="+str(self.REQUEST.form[param])+"&"  
                   
         self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)  ## def __init__(self, id, text=None, contentType=None):
   ##         self.id = str(id)
   ##         self.ZBindings_edit(self._default_bindings)
   ##         if text is None:
   ##             text = open(self._default_cont).read()
   ##         self.pt_edit(text, contentType)
   
     def generateDivs(self):  def manage_addZogiLibPageTemplateForm(self):
         """generate divs"""      """Form for adding"""
         pt=PageTemplateFile('Products/zogiLib/zpt/zogilib_divs').__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/addZogiLibPageTemplateForm')).__of__(self)
         return pt()          return pt()
   
         #divFileName=os.path.join(package_home(globals()),'zpt/zogilib_divs.zpt')  def manage_addZogiLibPageTemplate(self, id='zogiLibMainTemplate', title=None, layout=None, text=None,
         #return open(divFileName).read()                             REQUEST=None, submit=None):
       "Add a Page Template with optional file content."
                       
 def manage_addZogiLibForm(self):      id = str(id)
     """interface for adding zogilib"""      self._setObject(id, zogiLibPageTemplate(id))
     pt=PageTemplateFile('Products/zogiLib/zpt/addZogiLibForm').__of__(self)      ob = getattr(self, id)
     return pt()      if not layout: layout = "book"
       ob.pt_edit(open(os.path.join(package_home(globals()),'zpt/zogiLibMain_%s.zpt'%layout)).read(),None)
       if title:
           ob.pt_setTitle(title)
       try:
           u = self.DestinationURL()
       except AttributeError:
           u = REQUEST['URL1']
   
 def manage_addZogiLib(self,id,title,digilibBaseUrl, localFileBase,version="book",RESPONSE=None):      u = "%s/%s" % (u, urllib.quote(id))
     """add dgilib"""      REQUEST.RESPONSE.redirect(u+'/manage_main')
     newObj=zogiLib(id,title,digilibBaseUrl, localFileBase, version)      return ''
     self.Destination()._setObject(id,newObj)  
     if RESPONSE is not None:  
         RESPONSE.redirect('manage_main')  

Removed from v.1.14  
changed lines
  Added in v.1.34


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