|
|
| version 1.11, 2004/04/28 16:27:16 | version 1.34, 2004/07/21 17:44:51 |
|---|---|
| Line 6 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, | |
| REQUEST=None, submit=None): | |
| "Add a Page Template with optional file content." | |
| id = str(id) | |
| if REQUEST is None: | |
| self._setObject(id, zogilib_NavTemplate(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_NavTemplate(id) | |
| else: | |
| zpt = zogilib_NavTemplate(id, file, headers.get('content_type')) | |
| self._setObject(id, zpt) | |
| ob = getattr(self, id) | |
| 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." | |
| def cropf(f): | |
| """returns a float with reduced precision""" | |
| return float(int(f * 10000)/10000.0) | |
| id = str(id) | |
| if REQUEST is None: | |
| self._setObject(id, zogiLib_mainTemplate(id, text)) | |
| ob = getattr(self, id) | |
| if title: | def sendFile(self, filename, type): |
| ob.pt_setTitle(title) | """sends an object or a local file (in the product) as response""" |
| return ob | paths = filename.split('/') |
| object = self | |
| # look for an object called filename | |
| for path in paths: | |
| if hasattr(object, path): | |
| object = getattr(object, path) | |
| else: | else: |
| file = REQUEST.form.get('file') | object = None |
| headers = getattr(file, 'headers', None) | break |
| if headers is None or not file.filename: | if object: |
| zpt = zogiLib_mainTemplate(id) | # if the object exists then send it |
| return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE) | |
| 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 | |
| def browserCheck(self): | |
| """check the browsers request to find out the browser type""" | |
| bt = {} | |
| 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 | |
| try: | return bt |
| 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 '' | |
| 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 184 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 197 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 470 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 487 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']) | |
| dom=xml.dom.minidom.parse(url) | |
| params=dom.getElementsByTagName('parameter') | |
| for param in params: | |
| paramH[param.getAttribute('name')]=param.getAttribute('value') | |
| return paramH | |
| def getPageNumTotal(self): | |
| """pagenums""" | |
| return self.getDlInfo()['pt'].encode('utf-8') | |
| def generateImageFolder(self): | |
| """images ablegen""" | |
| self.manage_addFolder('images') | |
| pathName=os.path.join(package_home(globals()),'images') | |
| for image in os.listdir(pathName): | |
| try: | |
| fn=file(os.path.join(pathName,image)) | |
| self.images.manage_addImage(image,fn) | |
| except: | |
| print "ZOGILIB not imported:",image | |
| def __init__(self, id,title,digilibBaseUrl, localFileBase,version="book"): | def __init__(self, id, title, digilibBaseURL,localFileBase, version="book", basePath="", dlTarget=None, dlServerURL=None): |
| """init""" | """init""" |
| self.id=id | self.id=id |
| self.title=title | self.title=title |
| self.digilibBaseUrl=digilibBaseUrl | self.digilibBaseURL=digilibBaseURL |
| self.dlServerURL = dlServerURL | |
| if digilibBaseURL and not dlServerURL: | |
| self.dlServerURL = re.sub("/servlet/Scaler\?","",self.digilibBaseURL) | |
| self.localFileBase=localFileBase | self.localFileBase=localFileBase |
| #self._setObject('topTemplate',zogiLib_navTemplate(id='topTemplate')) | self.basePath=basePath |
| self._setObject('mainTemplate',zogiLib_mainTemplate(id='mainTemplate',version=version)) | self.layout=version |
| self.generateImageFolder() | if dlTarget: |
| self.dlTarget = dlTarget | |
| else: | |
| self.dlTarget = "digilib" | |
| def version(self): | |
| """version information""" | |
| return ZOGIVERSION | |
| manage_options = Folder.manage_options+( | def getContextStatic(self): |
| {'label':'Main Config','action':'changeZogiLibForm'}, | """get all the contexts which go to static pages""" |
| ) | |
| def option_js(self): | try: |
| """option_js""" | dom=xml.dom.minidom.parse(urllib.urlopen(self.getMetaFileName())) |
| ret=""" | contexts=dom.getElementsByTagName("context") |
| function setDLParam(e) { | |
| var s; | |
| if (document.all) { | |
| s=e.srcElement; | |
| } else { | |
| 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 | |
| ret=[] | |
| 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: | |
| return [] | |
| def navigation_js(self): | def getContextDatabases(self): |
| """Javascript""" | """get all dynamic contexts""" |
| fileName=os.path.join(package_home(globals()),'js/navigation.js') | try: |
| return file(fileName).read() | 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 generateTopJavaScript(self): | |
| """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'; | |
| """ | sets=xml.dom.minidom.parse(urllib.urlopen(url)).getElementsByTagName('dataset') |
| ret="" | |
| print label | |
| if label: | |
| ret+="""<a href="%s">%s</a>"""%(viewUrl,label) | |
| for set in sets: | |
| 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 | return ret |
| def getMetaData(self): | |
| """getMetaData""" | |
| try: | |
| dom=xml.dom.minidom.parse(urllib.urlopen(self.getMetaFileName())) | |
| except: | |
| return "error metadata" | |
| def generateScalerImg(self,requestString): | contexts=dom.getElementsByTagName("context") |
| """generate Scaler IMG Tag""" | ret=[] |
| retStr=self.digilibBaseUrl+requestString | db=self.getDLParam("db") |
| jS="""<script type="text/javascript">var ps = bestPicSize('scaler'); | ob=self.getDLParam("object") |
| document.write('<img id="pic" src="%s&dw='+ps.width+'&dh='+ps.height+'" />') | |
| </script>"""%retStr | |
| return jS | |
| def changeZogiLibForm(self): | fn=self.getDLParam("fn") |
| """Main configuration""" | pn=self.getDLParam("pn") |
| pt=PageTemplateFile('Products/zogiLib/zpt/changeZogiLibForm.zpt').__of__(self) | if not fn: |
| return pt() | fn="" |
| if not pn: | |
| pn="" | |
| if not ob: | |
| ob="" | |
| def changeZogiLib(self,title,digilibBaseUrl, localFileBase,RESPONSE=None): | for context in contexts: |
| """change it""" | metaDataLinks=context.getElementsByTagName("meta-datalink") |
| self.title=title | for metaDataLink in metaDataLinks: |
| self.digilibBaseUrl=digilibBaseUrl | |
| self.localFileBase=localFileBase | |
| if RESPONSE is not None: | if (db==metaDataLink.getAttribute("db")) or (len(metaDataLinks)==1): |
| RESPONSE.redirect('manage_main') | |
| def nav_html(self,fileName): | |
| """navigations frame""" | |
| ## currently not in use | |
| # suche nach index.meta mit zogilib thumb info | |
| templ=readNavTemp(self.localFileBase+"/"+fileName) | |
| if not templ: | |
| templ=readNavTemp(self.localFileBase+"/"+fileName.split("/")[0]) | |
| if not templ: | |
| return self.topTemplate.document_src() | |
| return urllib.urlopen(templ).read() | link=getUniqueElementText(metaDataLink.getElementsByTagName("metadata-url")) |
| label=getUniqueElementText(metaDataLink.getElementsByTagName("label")) | |
| url=getUniqueElementText(metaDataLink.getElementsByTagName("url")) | |
| return self.formatHTML(link,label,url) | |
| def index_html(self): | metaDataLinks=context.getElementsByTagName("meta-baselink") |
| """main action""" | |
| for metaDataLink in metaDataLinks: | |
| #pt=PageTemplateFile('Products/zogiLib/zpt/zogiLibMain_image.zpt').__of__(self) | if db==metaDataLink.getAttribute("db") or (len(metaDataLinks)==1): |
| #return pt() | |
| return self.mainTemplate() | |
| def storeQuery(self): | link=getUniqueElementText(metaDataLink.getElementsByTagName("metadata-url")) |
| """storeQuery in session""" | label=getUniqueElementText(metaDataLink.getElementsByTagName("label")) |
| self.REQUEST.SESSION['query']={} | url=getUniqueElementText(metaDataLink.getElementsByTagName("url")) |
| for fm in self.REQUEST.form.keys(): | |
| self.REQUEST.SESSION['query'][fm]=self.REQUEST.form[fm] | |
| self.REQUEST.SESSION['dlInfo']=self.getDlInfo() | return self.formatHTML(link+'fn=%s&pn=%s&object=%s'%(fn,pn,ob),label,url) |
| return ret | |
| def getParam(self,param): | def getDLInfo(self): |
| """Gebe Parameter aus""" | """get DLInfo from digilib server""" |
| paramH={} | |
| baseUrl=self.dlServerURL+"/dlInfo-xml.jsp" | |
| try: | try: |
| return self.REQUEST.SESSION['query'][param] | 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: | except: |
| return None | return {} |
| def getPageNum(self): | |
| """PAgenum""" | |
| pn=self.getParam('pn') | |
| if pn: | |
| return pn | |
| else: | |
| return 1 | |
| def biggerWS(self): | def createHeadJS(self): |
| """ws+1""" | """generate all javascript tags for head""" |
| ws=self.getParam('ws') | self.checkQuery() |
| if ws: | bt = self.REQUEST.SESSION['browserType'] |
| return int(ws)+1 | if bt['staticHTML']: |
| else: | return |
| return 2 | |
| def options(self): | pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/zogilib_head_js')).__of__(self) |
| """showoptions""" | |
| pt=PageTemplateFile('Products/zogiLib/zpt/optionwindow.zpt').__of__(self) | |
| return pt() | return pt() |
| def createParamJS(self): | |
| def smallerWS(self): | """generate javascript for parameters only""" |
| """ws-11""" | self.checkQuery() |
| ws=self.getParam('ws') | bt = self.REQUEST.SESSION['browserType'] |
| if ws: | if bt['staticHTML']: |
| if int(ws)==1: | |
| return | return |
| else: | |
| return int(ws)-1 | |
| else: | |
| return 1 | |
| pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/zogilib_param_js')).__of__(self) | |
| return pt() | |
| def setParam(self,pn=None,ws=None,rot=None,brgt=None,cont=None): | |
| """setze Parameter""" | |
| ret="" | |
| if brgt: | def createScalerImg(self, requestString=None, bottom=0, side=0, width=500, height=500): |
| self.REQUEST.SESSION['query']['brgt']=brgt | """generate Scaler IMG Tag""" |
| self.checkQuery() | |
| bt = self.REQUEST.SESSION['browserType'] | |
| # override with parameters from session | |
| if self.REQUEST.SESSION.has_key('scalerDiv'): | |
| (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 | |
| if cont: | def createScalerDiv(self, requestString = None, bottom = 0, side = 0, width=500, height=500): |
| self.REQUEST.SESSION['query']['cont']=cont | """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'] | |
| if pn: | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/zogilib_img_div')).__of__(self) |
| self.REQUEST.SESSION['query']['pn']=pn | return pt() |
| if ws: | def createAuxDiv(self): |
| self.REQUEST.SESSION['query']['ws']=ws | """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() | |
| if rot: | |
| self.REQUEST.SESSION['query']['rot']=rot | |
| for param in self.REQUEST.SESSION['query'].keys(): | def option_js(self): |
| """javascript""" | |
| return sendFile(self, 'js/option.js', 'text/plain') | |
| ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&" | 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') | |
| self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret) | 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 mirrorPage(self,mi): | def mark1(self): |
| """mirror""" | """mark image""" |
| ret="" | return sendFile(self, 'images/mark1.gif', 'image/gif') |
| try: | |
| splitted=self.REQUEST.SESSION['query']['mo'].split(',') | def mark2(self): |
| except: | """mark image""" |
| splitted=[] | return sendFile(self, 'images/mark2.gif', 'image/gif') |
| def mark3(self): | |
| """mark image""" | |
| return sendFile(self, 'images/mark3.gif', 'image/gif') | |
| def mark4(self): | |
| """mark image""" | |
| return sendFile(self, 'images/mark4.gif', 'image/gif') | |
| def mark5(self): | |
| """mark image""" | |
| return sendFile(self, 'images/mark5.gif', 'image/gif') | |
| def mark6(self): | |
| """mark image""" | |
| return sendFile(self, 'images/mark6.gif', 'image/gif') | |
| def mark7(self): | |
| """mark image""" | |
| return sendFile(self, 'images/mark7.gif', 'image/gif') | |
| def mark8(self): | |
| """mark image""" | |
| return sendFile(self, 'images/mark8.gif', 'image/gif') | |
| def corner1(self): | |
| """mark image""" | |
| return sendFile(self, 'images/olinks.gif', 'image/gif') | |
| def corner2(self): | |
| """mark image""" | |
| return sendFile(self, 'images/orechts.gif', 'image/gif') | |
| def corner3(self): | |
| """mark image""" | |
| return sendFile(self, 'images/ulinks.gif', 'image/gif') | |
| def corner4(self): | |
| """mark image""" | |
| return sendFile(self, 'images/urechts.gif', 'image/gif') | |
| 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 left_img(self): | |
| """mark image""" | |
| return sendFile(self, 'images/left.gif', 'image/gif') | |
| def right_img(self): | |
| """mark image""" | |
| return sendFile(self, 'images/right.gif', 'image/gif') | |
| if mi=="h": | |
| if 'hmir' in splitted: | |
| splitted.remove('hmir') | |
| else: | |
| splitted.append('hmir') | |
| if mi=="v": | def index_html(self): |
| """main action""" | |
| self.checkQuery() | |
| bt = self.REQUEST.SESSION['browserType'] | |
| tp = "zogiLibMainTemplate" | |
| if 'vmir' in splitted: | if hasattr(self, tp): |
| splitted.remove('vmir') | pt = getattr(self, tp) |
| else: | else: |
| splitted.append('vmir') | tpt = self.layout |
| if bt['staticHTML']: | |
| tpt = "static" | |
| self.REQUEST.SESSION['query']['mo']=string.join(splitted,",") | pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/zogiLibMain_%s'%tpt)).__of__(self) |
| return pt() | |
| for param in self.REQUEST.SESSION['query'].keys(): | def storeQuery(self, more = None): |
| """storeQuery in session""" | |
| dlParams = {} | |
| for fm in self.REQUEST.form.keys(): | |
| dlParams[fm] = self.REQUEST.form[fm] | |
| # look for more | |
| if more: | |
| for fm in more.split('&'): | |
| try: | |
| pv = fm.split('=') | |
| dlParams[pv[0]] = pv[1] | |
| except: | |
| pass | |
| ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&" | # parse digilib mode parameter |
| if 'mo' in dlParams: | |
| if len(dlParams['mo']) > 0: | |
| modes=dlParams['mo'].split(',') | |
| else: | |
| modes=[] | |
| self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret) | self.REQUEST.SESSION['query'] = dlParams |
| self.REQUEST.SESSION['dlModes'] = modes | |
| self.REQUEST.SESSION['dlInfo'] = self.getDLInfo() | |
| if not self.REQUEST.SESSION.has_key('browserType'): | |
| self.REQUEST.SESSION['browserType'] = browserCheck(self) | |
| def decode(self,strR): | return |
| """decode &""" | |
| return re.sub('\&','\&',strR) | 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 wholePage(self): | def zogilibPath(self, otherbase=None): |
| """zoom out""" | """returns an URL to the zogiLib instance""" |
| ret="" | url = self.REQUEST['URL1'] |
| # should end with "/" | |
| if len(url) > 0 and url[-1] != '/': | |
| url += '/' | |
| if type(otherbase) is str: | |
| url += otherbase | |
| else: | |
| url += self.basePath | |
| # should end with "/" | |
| if len(url) > 0 and url[-1] != '/': | |
| url += '/' | |
| return url | |
| self.REQUEST.SESSION['query']['ww']=1 | def getDLParam(self, param): |
| self.REQUEST.SESSION['query']['wh']=1 | """returns parameter""" |
| self.REQUEST.SESSION['query']['wx']=0 | try: |
| self.REQUEST.SESSION['query']['wy']=0 | return self.REQUEST.SESSION['query'][param] |
| except: | |
| return | |
| for param in self.REQUEST.SESSION['query'].keys(): | def setDLParam(self, param, value): |
| """sets parameter""" | |
| self.REQUEST.SESSION['query'][param] = value | |
| return | |
| ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&" | 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 + "&" | |
| self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret) | # omit trailing "&" |
| return ret.rstrip('&') | |
| def prevPage(self,pn=None): | |
| """next page""" | |
| ret="" | |
| if pn and pn>0: | def setDLParams(self,pn=None,ws=None,rot=None,brgt=None,cont=None): |
| pn=str(int(pn)-1) | """setze Parameter""" |
| self.setDLParam('brgt', brgt) | |
| self.setDLParam('cont', cont) | |
| self.setDLParam('ws', ws) | |
| self.setDLParam('rot', rot) | |
| self.REQUEST.form['pn']=pn | if pn: |
| # unmark | |
| self.setDLParam('mk', None) | |
| self.setDLParam('pn', pn) | |
| return self.display() | |
| for param in self.REQUEST.form.keys(): | |
| ret+=param+"="+str(self.REQUEST.form[param])+"&" | 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) | |
| self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret) | 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 firstPage(self): | def isStaticHTML(self): |
| """erste Seite""" | """returns if the page is using static HTML only""" |
| return self.setParam(pn="1") | self.checkQuery() |
| return self.REQUEST.SESSION['browserType']['staticHTML'] | |
| def lastPage(self): | def getPT(self): |
| """letzte Seite""" | """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 nextPage(self,pn=None): | def getBiggerWS(self): |
| """next page""" | """ws+1""" |
| ret="" | ws = self.getDLParam('ws') |
| try: | |
| return float(ws)+0.5 | |
| except: | |
| return 1.5 | |
| def getSmallerWS(self): | |
| """ws-1""" | |
| ws=self.getDLParam('ws') | |
| try: | try: |
| pn=str(int(pn)+1) | return max(float(ws)-0.5, 1) |
| except: | except: |
| pn=str(2) | return 1 |
| def hasMode(self, mode): | |
| """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: | |
| modes.append('hmir') | |
| return self.display() | |
| self.REQUEST.form['pn']=pn | def dl_VMirror(self): |
| """mirror action""" | |
| modes = self.REQUEST.SESSION['dlModes'] | |
| if 'vmir' in modes: | |
| modes.remove('vmir') | |
| else: | |
| modes.append('vmir') | |
| for param in self.REQUEST.form.keys(): | return self.display() |
| ret+=param+"="+str(self.REQUEST.form[param])+"&" | |
| self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret) | 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 generateDivs(self): | def changeZogiLibForm(self): |
| """generate divs""" | """Main configuration""" |
| pt=PageTemplateFile('Products/zogiLib/zpt/zogilib_divs').__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/changeZogiLibForm.zpt')).__of__(self) |
| return pt() | return pt() |
| #divFileName=os.path.join(package_home(globals()),'zpt/zogilib_divs.zpt') | def changeZogiLib(self,title,digilibBaseURL, localFileBase, version, basePath, dlTarget, RESPONSE=None): |
| #return open(divFileName).read() | """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" | |
| if RESPONSE is not None: | |
| RESPONSE.redirect('manage_main') | |
| def manage_addZogiLibForm(self): | def manage_addZogiLibForm(self): |
| """interface for adding zogilib""" | """interface for adding zogilib""" |
| pt=PageTemplateFile('Products/zogiLib/zpt/addZogiLibForm').__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/addZogiLibForm')).__of__(self) |
| return pt() | return pt() |
| def manage_addZogiLib(self,id,title,digilibBaseUrl, localFileBase,version="book",RESPONSE=None): | def manage_addZogiLib(self,id,title,digilibBaseURL, localFileBase,version="book",basePath="",dlTarget="digilib",RESPONSE=None): |
| """add dgilib""" | """add dgilib""" |
| newObj=zogiLib(id,title,digilibBaseUrl, localFileBase, version) | newObj=zogiLib(id,title,digilibBaseURL, localFileBase, version, basePath, dlTarget) |
| self.Destination()._setObject(id,newObj) | self.Destination()._setObject(id,newObj) |
| if RESPONSE is not None: | if RESPONSE is not None: |
| RESPONSE.redirect('manage_main') | RESPONSE.redirect('manage_main') |
| class zogiLibPageTemplate(ZopePageTemplate): | |
| """pageTemplate Objekt""" | |
| meta_type="zogiLib_pageTemplate" | |
| ## 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 manage_addZogiLibPageTemplateForm(self): | |
| """Form for adding""" | |
| pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/addZogiLibPageTemplateForm')).__of__(self) | |
| return pt() | |
| def manage_addZogiLibPageTemplate(self, id='zogiLibMainTemplate', title=None, layout=None, text=None, | |
| REQUEST=None, submit=None): | |
| "Add a Page Template with optional file content." | |
| id = str(id) | |
| self._setObject(id, zogiLibPageTemplate(id)) | |
| ob = getattr(self, id) | |
| 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'] | |
| u = "%s/%s" % (u, urllib.quote(id)) | |
| REQUEST.RESPONSE.redirect(u+'/manage_main') | |
| return '' |