version 1.8, 2004/04/21 08:59:14
|
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'] |
|
|
|
|
|
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="""function setDLParam(e) { |
contexts=dom.getElementsByTagName("context") |
if (document.all) { |
|
s=e.srcElement; |
ret=[] |
} else { |
for context in contexts: |
s=e.target; |
name=getUniqueElementText(context.getElementsByTagName("name")) |
} |
|
if (window.opener) { |
link=getUniqueElementText(context.getElementsByTagName("link")) |
window.opener.setParameter(s.name, s.value); |
if name or link: |
window.opener.display(9); |
ret.append((name,link)) |
} else { |
|
document.setParameter(s.name, s.value); |
|
document.display(9); |
|
} |
|
}""" |
|
return ret |
return ret |
|
except: |
|
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)) |
|
|
def navigation_js(self): |
return ret |
"""Javascript""" |
except: |
fileName=os.path.join(package_home(globals()),'js/navigation.js') |
return ret |
return file(fileName).read() |
|
|
|
|
def formatHTML(self,url,label=None,viewUrl=None): |
|
|
|
|
def generateTopJavaScript(self): |
sets=xml.dom.minidom.parse(urllib.urlopen(url)).getElementsByTagName('dataset') |
"""generate script""" |
ret="" |
ret=""" |
print label |
var baseUrl = '%s'; """% self.REQUEST['URL0'] |
if label: |
ret+=""" |
ret+="""<a href="%s">%s</a>"""%(viewUrl,label) |
newParameter('fn', '', 1); |
for set in sets: |
newParameter('pn', '1', 1); |
ret+="<table>" |
newParameter('ws', '1.0', 1); |
for node in set.childNodes: |
newParameter('mo', '', 1); |
if hasattr(node,'tagName'): |
newParameter('mk', '', 3); |
tag=node.tagName |
newParameter('wx', '0.0', 2); |
label=node.getAttribute("label") |
newParameter('wy', '0.0', 2); |
if not label: |
newParameter('ww', '1.0', 2); |
label=tag |
newParameter('wh', '1.0', 2); |
text=getText(node.childNodes) |
newParameter('pt', '0', 9); |
ret+="""<tr><td><b>%s:</b></td><td>%s</td></tr>"""%(label,text) |
newParameter('brgt', '0.0', 1); |
ret+="</table>" |
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'; |
|
""" |
|
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">picsize = bestPicSize('scaler'); |
ob=self.getDLParam("object") |
document.write('<img id="pic" src="%s&dw='+picsize.width+'&dh='+picsize.height+'" />') |
|
</script>"""%retStr |
|
return jS |
|
|
|
def changeZogiLibForm(self): |
|
"""Main configuration""" |
|
pt=PageTemplateFile('Products/zogiLib/zpt/changeZogiLibForm.zpt').__of__(self) |
|
return pt() |
|
|
|
def changeZogiLib(self,title,digilibBaseUrl, localFileBase,RESPONSE=None): |
fn=self.getDLParam("fn") |
"""change it""" |
pn=self.getDLParam("pn") |
self.title=title |
if not fn: |
self.digilibBaseUrl=digilibBaseUrl |
fn="" |
self.localFileBase=localFileBase |
if not pn: |
|
pn="" |
|
if not ob: |
|
ob="" |
|
|
if RESPONSE is not None: |
for context in contexts: |
RESPONSE.redirect('manage_main') |
metaDataLinks=context.getElementsByTagName("meta-datalink") |
|
for metaDataLink in metaDataLinks: |
|
|
|
if (db==metaDataLink.getAttribute("db")) or (len(metaDataLinks)==1): |
|
|
def nav_html(self,fileName): |
link=getUniqueElementText(metaDataLink.getElementsByTagName("metadata-url")) |
"""navigations frame""" |
label=getUniqueElementText(metaDataLink.getElementsByTagName("label")) |
## currently not in use |
url=getUniqueElementText(metaDataLink.getElementsByTagName("url")) |
# 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() |
return self.formatHTML(link,label,url) |
|
|
|
metaDataLinks=context.getElementsByTagName("meta-baselink") |
|
|
def index_html(self): |
for metaDataLink in metaDataLinks: |
"""main action""" |
|
|
|
|
|
#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 '' |