Annotation of zogiLib/zogiLib.py, revision 1.3
1.1 dwinter 1: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
2: from Products.PageTemplates.PageTemplate import PageTemplate
3: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
4:
5:
6: import xml.dom.minidom
7: from OFS.Folder import Folder
8: from xml_helpers import getText
9: import os
10: import re
11: import string
12: import urllib
13: from Globals import package_home
14:
15: def getString(self,key,default=''):
16: try:
17: return self.REQUEST[key]
18: except:
19: return default
20:
21:
22: class zogiLib_navTemplate(ZopePageTemplate):
23: """pageTemplate Objekt"""
24: meta_type="zogiLib_navTemplate"
25:
26: _default_content_fn = os.path.join(package_home(globals()),
27: 'zpt/zogiLib_NavTemplateDefault.zpt')
28:
29: manage_options=ZopePageTemplate.manage_options+(
30: {'label':'Copy to Filesystem','action':'copyContent'},
31: )
32:
33: def getPath(self):
34: """get path"""
35: return getPath(self,'thumbtemplate.templ')
36:
37: ## def changeECHO_pageTemplateWeightForm(self):
38: ## """change"""
39: ## pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
40: ## return pt()
41:
42: ## def changeECHO_pageTemplateWeight(self,weight,content_type,RESPONSE=None):
43: ## """change"""
44: ## self.weight=weight
45: ## self.content_type=content_type
46:
47: ## if RESPONSE is not None:
48: ## RESPONSE.redirect('manage_main')
49:
50:
51: def copyContent(self):
52: """copycontent to path"""
53:
54: return "copied to:"+copyContent(self,'thumbtemplate.templ')
55:
56:
57: def manage_addZogiLib_NavTemplateForm(self):
58: """Form for adding"""
1.3 ! dwinter 59: pt=PageTemplateFile('Products/zogiLib/zpt/AddZogilib_NavTemplate.zpt').__of__(self)
1.1 dwinter 60: return pt()
61:
62:
63:
64:
65: def manage_addZogiLib_NavTemplate(self, id,title=None, text=None,
66: REQUEST=None, submit=None):
67: "Add a Page Template with optional file content."
68:
69:
70: id = str(id)
71: if REQUEST is None:
72: self._setObject(id, zogilib_NavTemplate(id, text))
73: ob = getattr(self, id)
74:
75: if title:
76: ob.pt_setTitle(title)
77: return ob
78: else:
79: file = REQUEST.form.get('file')
80: headers = getattr(file, 'headers', None)
81: if headers is None or not file.filename:
82: zpt = zogilib_NavTemplate(id)
83: else:
84: zpt = zogilib_NavTemplate(id, file, headers.get('content_type'))
85:
86: self._setObject(id, zpt)
87: ob = getattr(self, id)
88:
89:
90: try:
91: u = self.DestinationURL()
92: except AttributeError:
93: u = REQUEST['URL1']
94:
95: if submit == " Add and Edit ":
96: u = "%s/%s" % (u, quote(id))
97: REQUEST.RESPONSE.redirect(u+'/manage_main')
98: return ''
99:
1.3 ! dwinter 100:
! 101:
1.1 dwinter 102: def readNavTemp(fileName):
103: """navtemp"""
1.3 ! dwinter 104:
1.1 dwinter 105:
106: if os.path.exists(fileName+"/index.meta"):
107: dom=xml.dom.minidom.parse(fileName+"/index.meta")
108: else:
109: return None
110:
1.3 ! dwinter 111:
1.1 dwinter 112: try:
113: navTag=getText(dom.getElementsByTagName('zogilibtemplate')[0].childNodes)
114: except:
115: navTag=None
116: return navTag
117:
118:
119: class zogiLib(Folder):
120: """StandardElement"""
121:
122: meta_type="zogiLib"
123:
1.3 ! dwinter 124: def getDlInfo(self):
! 125: """DLInfo"""
! 126: paramH={}
! 127: baseUrl=re.sub("servlet/Scaler","/dlInfo-xml.jsp",self.digilibBaseUrl)
! 128:
! 129: url=urllib.urlopen(baseUrl+self.REQUEST['QUERY_STRING'])
! 130: dom=xml.dom.minidom.parse(url)
! 131: params=dom.getElementsByTagName('parameter')
! 132: for param in params:
! 133: paramH[param.getAttribute('name')]=param.getAttribute('value')
! 134: return paramH
! 135:
! 136: def getPageNumTotal(self):
! 137: """pagenums"""
! 138: return self.getDlInfo()['pt']
! 139:
! 140:
1.1 dwinter 141: def generateImageFolder(self):
142: """images ablegen"""
143: self.manage_addFolder('images')
144: for image in os.listdir("../lib/python/Products/zogiLib/images"):
145: fn=file("../lib/python/Products/zogiLib/images/"+image)
1.3 ! dwinter 146:
1.1 dwinter 147: self.images.manage_addImage(image,fn)
148:
149:
1.2 dwinter 150: def __init__(self, id,title,digilibBaseUrl, localFileBase):
1.1 dwinter 151: """init"""
152:
153: self.id=id
154: self.title=title
1.2 dwinter 155: self.digilibBaseUrl=digilibBaseUrl
1.1 dwinter 156: self.localFileBase=localFileBase
157: self._setObject('topTemplate',zogiLib_navTemplate(id='topTemplate'))
158: self.generateImageFolder()
159:
160:
161: manage_options = Folder.manage_options+(
162: {'label':'Main Config','action':'changeZogiLibForm'},
163: )
164:
1.3 ! dwinter 165: def option_js(self):
! 166: """option_js"""
! 167: ret="""function setParam(e) {
! 168: if (document.all) s=e.srcElement;
! 169: else s=e.target;
! 170: if (window.opener) location=window.opener.location
! 171: else location=document.location
! 172: location=" %s/setParam?"+s.name+'='+s.value;
! 173: }"""%self.REQUEST['URL1']
! 174: return ret
! 175:
! 176:
1.1 dwinter 177: def navigation_js(self):
178: """Javascript"""
179:
180: return file("../lib/python/Products/zogiLib/js/navigation.js").read()
181:
1.3 ! dwinter 182:
1.1 dwinter 183:
184: def generateTopJavaScript(self):
185: """generate script"""
186: ret="""var baseUrl = '%s'; """% self.REQUEST['URL0']
187: ret+="""newParameter('fn', '%s', '', 1);
188: newParameter('pn', '%s', '1', 1);
189: newParameter('ws', '%s', '1.0', 1);
190: newParameter('mo', '%s', '', 1);
191: newParameter('mk', '%s', '', 3);
192: newParameter('wx', '%s', '0.0', 2);
193: newParameter('wy', '%s', '0.0', 2);
194: newParameter('ww', '%s', '1.0', 2);
195: newParameter('wh', '%s', '1.0', 2);
196: newParameter('pt', '%s', '%s', 9);
197: newParameter('brgt', '%s', '0.0', 1);
198: newParameter('cont', '%s', '0.0', 1);
199: newParameter('rot', '%s', '0.0', 1);
200: newParameter('rgba', '%s', '', 1);
201: newParameter('rgbm', '%s', '', 1);
202: newParameter('ddpix', '%s', '', 9);
203: newParameter('ddpiy', '%s', '', 9);"""%(getString(self,'fn'),
204: getString(self,'pn',1),
205: getString(self,'ws',1.0),
206: getString(self,'mo',''),
207: getString(self,'mk',''),
208: getString(self,'wx',0.0),
209: getString(self,'wy',0.0),
210: getString(self,'ww',1.0),
211: getString(self,'wh',1.0),
212: getString(self,'pt',100),getString(self,'pt',100),
213: getString(self,'brgt',0.0),
214: getString(self,'cont',0.0),
215: getString(self,'rot',0.0),
216: getString(self,'rgba','0/0/0'),
217: getString(self,'rgbm','0/0/0'),
218: getString(self,'ddpix',0.0),
219: getString(self,'ddpiy',0.0)
220: )
221:
222: ret+="""
223:
224: var wwidth, wheight;
225: if (self.innerHeight) // all except Explorer
226: {
227: wwidth = self.innerWidth;
228: wheight = self.innerHeight;
229: }
230: else if (document.documentElement && document.documentElement.clientHeight)
231: // Explorer 6 Strict Mode
232: {
233: wwidth = document.documentElement.clientWidth;
234: wheight = document.documentElement.clientHeight;
235: }
236: else if (document.body) // other Explorers
237: {
238: wwidth = document.body.clientWidth;
239: wheight = document.body.clientHeight;
240: }
241:
1.3 ! dwinter 242: document.id="digilib"
1.1 dwinter 243:
244: """
245: return ret
246:
247:
248:
249:
250:
251:
252:
253: def generateScalerImg(self,requestString):
254: """generate Scaler Tag"""
1.2 dwinter 255: retStr=self.digilibBaseUrl+requestString
1.1 dwinter 256: jS="""<script type="text/javascript">
257: document.write("<img id=\\\"pic\\\" src=\\\"%s&dw="+wwidth+"&dh="+wheight+"\\\"/>")</script>"""%retStr
258: return jS
259:
260: def changeZogiLibForm(self):
261: """Main configuration"""
262: pt=PageTemplateFile('Products/zogiLib/zpt/changeZogiLibForm.zpt').__of__(self)
263: return pt()
264:
1.2 dwinter 265: def changeZogiLib(self,title,digilibBaseUrl, localFileBase,RESPONSE=None):
1.1 dwinter 266: """change it"""
267: self.title=title
1.2 dwinter 268: self.digilibBaseUrl=digilibBaseUrl
1.1 dwinter 269: self.localFileBase=localFileBase
270:
271: if RESPONSE is not None:
272: RESPONSE.redirect('manage_main')
273:
274:
275: def nav_html(self,fileName):
276: """navigations frame"""
277:
278: # suche nach index.meta mit zogilib thumb info
279:
280: templ=readNavTemp(self.localFileBase+"/"+fileName)
281: if not templ:
282: templ=readNavTemp(self.localFileBase+"/"+fileName.split("/")[0])
283: if not templ:
284: return self.topTemplate.document_src()
285:
286: return urllib.urlopen(templ).read()
287:
288:
289: def index_html(self):
290: """main action"""
291:
292:
1.3 ! dwinter 293: pt=PageTemplateFile('Products/zogiLib/zpt/zogiLibMain_book.zpt').__of__(self)
1.1 dwinter 294: return pt()
295:
296: def storeQuery(self):
297: """storeQuery in session"""
298: self.REQUEST.SESSION['query']={}
299: for fm in self.REQUEST.form.keys():
300: self.REQUEST.SESSION['query'][fm]=self.REQUEST.form[fm]
301:
1.3 ! dwinter 302: self.REQUEST.SESSION['dlInfo']=self.getDlInfo()
! 303:
! 304: def getParam(self,param):
! 305: """Gebe Parameter aus"""
! 306: try:
! 307: return self.REQUEST.SESSION['query'][param]
! 308: except:
! 309: return None
! 310:
! 311: def getPageNum(self):
! 312: """PAgenum"""
! 313: pn=self.getParam('pn')
! 314: if pn:
! 315: return pn
! 316: else:
! 317: return 1
! 318:
! 319: def biggerWS(self):
! 320: """ws+1"""
! 321: ws=self.getParam('ws')
! 322: if ws:
! 323: return int(ws)+1
! 324: else:
! 325: return 2
! 326:
! 327: def options(self):
! 328: """showoptions"""
! 329: pt=PageTemplateFile('Products/zogiLib/zpt/optionwindow.zpt').__of__(self)
! 330: return pt()
! 331:
! 332:
! 333: def smallerWS(self):
! 334: """ws-11"""
! 335: ws=self.getParam('ws')
! 336: if ws:
! 337: if int(ws)==1:
! 338: return
! 339: else:
! 340: return int(ws)-1
! 341: else:
! 342: return 1
! 343:
! 344:
! 345: def setParam(self,pn=None,ws=None,rot=None,brgt=None,cont=None):
! 346: """setze Parameter"""
1.1 dwinter 347: ret=""
348:
1.3 ! dwinter 349: if brgt:
! 350: self.REQUEST.SESSION['query']['brgt']=brgt
! 351:
! 352: if cont:
! 353: self.REQUEST.SESSION['query']['cont']=cont
! 354:
1.1 dwinter 355: if pn:
356: self.REQUEST.SESSION['query']['pn']=pn
357:
358: if ws:
359: self.REQUEST.SESSION['query']['ws']=ws
360:
361: if rot:
362: self.REQUEST.SESSION['query']['rot']=rot
363:
364: for param in self.REQUEST.SESSION['query'].keys():
365:
366: ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&"
367:
368: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)
369:
1.3 ! dwinter 370:
1.1 dwinter 371: def mirrorPage(self,mi):
372: """mirror"""
373: ret=""
374: try:
375: splitted=self.REQUEST.SESSION['query']['mo'].split(',')
376: except:
377: splitted=[]
378:
379: if mi=="h":
380:
381: if 'hmir' in splitted:
382: splitted.remove('hmir')
383: else:
384: splitted.append('hmir')
385:
386: if mi=="v":
387:
388: if 'vmir' in splitted:
389: splitted.remove('vmir')
390: else:
391: splitted.append('vmir')
392:
393:
394: self.REQUEST.SESSION['query']['mo']=string.join(splitted,",")
395:
396:
397:
398:
399: for param in self.REQUEST.SESSION['query'].keys():
400:
401: ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&"
402:
403: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)
404:
405: def decode(self,strR):
406: """decode &"""
1.3 ! dwinter 407:
1.1 dwinter 408: return re.sub('\&','\&',strR)
409:
410: def wholePage(self):
411: """zoom out"""
412: ret=""
413:
414: self.REQUEST.SESSION['query']['ww']=1
415: self.REQUEST.SESSION['query']['wh']=1
416: self.REQUEST.SESSION['query']['wx']=0
417: self.REQUEST.SESSION['query']['wy']=0
418:
419: for param in self.REQUEST.SESSION['query'].keys():
420:
421: ret+=param+"="+str(self.REQUEST.SESSION['query'][param])+"&"
422:
423: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)
424:
425: def prevPage(self,pn=None):
426: """next page"""
427: ret=""
428:
429: if pn and pn>0:
430: pn=str(int(pn)-1)
431:
432:
433: self.REQUEST.form['pn']=pn
1.3 ! dwinter 434:
1.1 dwinter 435: for param in self.REQUEST.form.keys():
1.3 ! dwinter 436:
1.1 dwinter 437: ret+=param+"="+str(self.REQUEST.form[param])+"&"
438:
439: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)
440:
1.3 ! dwinter 441: def firstPage(self):
! 442: """erste Seite"""
! 443: return self.setParam(pn="1")
1.1 dwinter 444:
1.3 ! dwinter 445: def lastPage(self):
! 446: """letzte Seite"""
! 447:
! 448:
1.1 dwinter 449: def nextPage(self,pn=None):
450: """next page"""
451: ret=""
452:
453: try:
454: pn=str(int(pn)+1)
455: except:
456: pn=str(2)
457:
458: self.REQUEST.form['pn']=pn
1.3 ! dwinter 459:
1.1 dwinter 460: for param in self.REQUEST.form.keys():
461: ret+=param+"="+str(self.REQUEST.form[param])+"&"
462:
463: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+ret)
464:
465:
466: def manage_addZogiLibForm(self):
467: """interface for adding zogilib"""
468: pt=PageTemplateFile('Products/zogiLib/zpt/addZogiLibForm').__of__(self)
469: return pt()
470:
1.2 dwinter 471: def manage_addZogiLib(self,id,title,digilibBaseUrl, localFileBase,RESPONSE=None):
1.1 dwinter 472: """add dgilib"""
1.2 dwinter 473: newObj=zogiLib(id,title,digilibBaseUrl, localFileBase)
1.1 dwinter 474: self.Destination()._setObject(id,newObj)
475: if RESPONSE is not None:
476: RESPONSE.redirect('manage_main')
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>