|
|
| version 1.41, 2005/02/07 19:40:37 | version 1.52, 2005/06/09 15:08:01 |
|---|---|
| Line 6 import string | Line 6 import string |
| import xml.dom.minidom | import xml.dom.minidom |
| import types | import types |
| from Products.PageTemplates.PageTemplateFile import PageTemplateFile | from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
| from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate | |
| from OFS.SimpleItem import SimpleItem | from OFS.SimpleItem import SimpleItem |
| from Globals import package_home | from Globals import package_home |
| import Globals | import Globals |
| from AccessControl import ClassSecurityInfo | from AccessControl import ClassSecurityInfo |
| import os.path | import os.path |
| displayTypes = ['ZSQLExtendFolder','ZSQLBibliography','ECHO_group','ECHO_collection','ECHO_resource','ECHO_link','ECHO_sqlElement','ECHO_pageTemplate','ECHO_externalLink','ImageCollectionIFrame','VLP_resource','VLP_essay','ECHO_ZCatalogElement','ImageCollection','versionedFileFolder'] | displayTypes = ['ZSQLExtendFolder','ZSQLBibliography','ECHO_group','ECHO_collection','ECHO_resource','ECHO_link','ECHO_sqlElement','ECHO_pageTemplate','ECHO_externalLink','ImageCollectionIFrame','VLP_resource','VLP_essay','ECHO_ZCatalogElement','ImageCollection','versionedFileFolder','ECHO_movie'] |
| def content_html(self,type): | def content_html(self,type): |
| """template fuer content""" | """template fuer content""" |
| Line 25 def content_html(self,type): | Line 26 def content_html(self,type): |
| obj=getattr(self,type+"_template") | obj=getattr(self,type+"_template") |
| return obj() | return obj() |
| else: | else: |
| pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%type)).__of__(self) |
| pt.content_type="text/html" | pt.content_type="text/html" |
| return pt() | return pt() |
| Line 52 class ECHO_basis: | Line 53 class ECHO_basis: |
| return ret | return ret |
| def RDF(self): | |
| """showrdf""" | |
| self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') | |
| ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n""" | |
| ret+=self.getRDF(urn=self.absolute_url())+"\n" | |
| ret+="""</RDF:RDF>""" | |
| return ret | |
| def createSubElementRDF(self,urn=None): | def createSubElementRDF(self,urn=None): |
| """rdf list""" | """rdf list""" |
| Line 113 class ECHO_basis: | Line 125 class ECHO_basis: |
| def getLabel(self): | def getLabel(self): |
| """title""" | """title""" |
| if not hasattr(self,'label'): | |
| self.label="" | |
| if self.label=="": | |
| ret=self.getTitle() | |
| if ret=="": | |
| ret=self.getId() | |
| return ret | |
| return self.decode(self.label) | return self.decode(self.label) |
| try: | try: |
| Line 166 class ECHO_basis: | Line 186 class ECHO_basis: |
| """add a map area to this object""" | """add a map area to this object""" |
| if (newarea.id is None): | if (newarea.id is None): |
| # create new id | # create new id |
| areas = self.getMapAreas() | ids = [a.id for a in self.getMapAreas()] |
| newarea.id = "a%02d"%len(areas) | i = len(ids) |
| while ("a%02d"%i in ids): | |
| # if it exists, try the next one | |
| i += 1 | |
| newarea.id = "a%02d"%i | |
| self._setObject(newarea.id, newarea) | self._setObject(newarea.id, newarea) |
| def getMapText(self): | |
| """returns the MapText""" | |
| # get (the first) contained MapText | |
| res = self.ZopeFind(self, obj_metatypes=('ECHO_mapText')) | |
| if len(res) > 0: | |
| text = res[0][1] | |
| return text | |
| return None | |
| def ECHO_graphicEntry(self): | def ECHO_graphicEntry(self): |
| """change map coordinates""" | """change map coordinates""" |
| if self.hasParentOverview(): | if self.hasParentOverview(): |
| Line 218 class ECHO_basis: | Line 251 class ECHO_basis: |
| """create area calls for JavaScript""" | """create area calls for JavaScript""" |
| dynamical="\n" | dynamical="\n" |
| for ob in areas: | for ob in areas: |
| if ob.isTypeArrow(): | dynamical+="""addArea('%s', 'overview', %s, '%s');\n"""%(ob.getFullId(),ob.getCoordString(),ob.getType()) |
| dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob.getFullId(),ob.getCoordString()) | |
| else: | |
| dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob.getFullId(),ob.getCoordString()) | |
| return dynamical | return dynamical |
| def createMapHead(self): | def createMapHead(self): |
| Line 246 class ECHO_basis: | Line 276 class ECHO_basis: |
| """generate img-tag for map of parent""" | """generate img-tag for map of parent""" |
| return self.aq_parent.createMapImg() | return self.aq_parent.createMapImg() |
| def createMapLink(self, ob, text=None): | def createMapLink(self, ob, text=None, target="_blank"): |
| """generate map link""" | """generate map link""" |
| bt = BrowserCheck(self) | bt = BrowserCheck(self) |
| id = ob.getFullId() | id = ob.getFullId() |
| Line 255 class ECHO_basis: | Line 285 class ECHO_basis: |
| text = ob.getLabel() | text = ob.getLabel() |
| if text is None: | if text is None: |
| text = "link" | text = "link" |
| tiptext = ob.getText() | tiptext = ob.getTip() |
| tag = "" | tag = "" |
| if bt.isN4: | if bt.isN4: |
| # N4 needs layer for highlighting | # N4 needs layer for highlighting |
| tag += '<ilayer id="a.%s"><a onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link) | tag += '<ilayer id="a.%s"><a onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="%s"'%(id,id,id,link,target) |
| tag += ">" + text + "</a></ilayer>" | tag += ">" + text + "</a></ilayer>" |
| else: | else: |
| # a-element | # a-element |
| tag = '<a id="a.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link) | tag = '<a id="a.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="%s"'%(id,id,id,link,target) |
| if tiptext: | if tiptext: |
| tag += ' title="%s"'%tiptext | tag += ' title="%s"'%tiptext |
| tag += ">" + text + "</a>" | tag += ">" + text + "</a>" |
| return tag | return tag |
| def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"): | def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil", circlesrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/kreis", target="_blank"): |
| """generate map link image, text and other stuff""" | """generate map link image, text and other stuff""" |
| bt = BrowserCheck(self) | bt = BrowserCheck(self) |
| id = ob.getFullId() | id = ob.getFullId() |
| link = ob.getLinkId() | link = ob.getLinkId() |
| tiptext = ob.getText() | tiptext = ob.getTip() |
| tag = "" | tag = "" |
| if bt.isN4: | if bt.isN4: |
| # | |
| # N4 needs layer and img elements | # N4 needs layer and img elements |
| # | |
| tag += '<layer id="i.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)">'%(id,id,id) | tag += '<layer id="i.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)">'%(id,id,id) |
| if ob.isTypeArrow(): | if ob.isTypeArrow(): |
| # N4 - Arrow | |
| rot = ob.angle | rot = ob.angle |
| tag += '<a href="%s"><img border="0" src="%s&rot=%s" /></a>'%(link,arrowsrc,rot) | marksrc = arrowsrc |
| if rot < 0: | |
| marksrc = circlesrc | |
| tag += '<a href="%s"><img border="0" src="%s&rot=%s" /></a>'%(link,marksrc,rot) | |
| else: | else: |
| # N4 - Area | |
| tag += '<a href="%s"><img border="0" width="1000" height="1000" src="trans_img"'%(link) | tag += '<a href="%s"><img border="0" width="1000" height="1000" src="trans_img"'%(link) |
| if tiptext: | if tiptext: |
| tag += ' alt="%s"'%tiptext | tag += ' alt="%s"'%tiptext |
| tag += ' /></a>' | tag += ' /></a>' |
| tag += '</layer>' | tag += '</layer>' |
| else: | else: |
| # create a-element | # |
| tag = '<a id="b.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank">'%(id,id,id,link) | # (more or less) DOM capable browser |
| # | |
| tag = '<a id="b.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="%s">'%(id,id,id,link,target) | |
| if ob.isTypeArrow(): | if ob.isTypeArrow(): |
| # DOM - Arrow | |
| rot = ob.angle | rot = ob.angle |
| marksrc = arrowsrc | |
| if float(rot) < 0: | |
| marksrc = circlesrc | |
| print "ROT: ", rot, " mark: ", marksrc | |
| if bt.isIEWin and bt.versIE > 5: | if bt.isIEWin and bt.versIE > 5: |
| # IE/Win 5.5 has "feature" for PNG transparency | # IE/Win 5.5 has "feature" for PNG transparency |
| tag += '<span id="i.%s" style="position:absolute; top:-100px; left:-100px; border-style:none; border-width=1px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'%s&rot=%s\');"><img style="visibility:hidden" src="%s&rot=%s" /></span>'%(id,arrowsrc,rot,arrowsrc,rot) | tag += '<span id="i.%s" style="position:absolute; top:-100px; left:-100px; border-style:none; border-width=1px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'%s&rot=%s\');"><img style="visibility:hidden" src="%s&rot=%s" /></span>'%(id,marksrc,rot,marksrc,rot) |
| else: | else: |
| # arrow image | # arrow image |
| tag += '<img id="i.%s" src="%s&rot=%s" border="1" style="position:absolute; top:-100px; left:-100px; border-style:none;" />'%(id,arrowsrc,rot) | tag += '<img id="i.%s" src="%s&rot=%s" border="1" style="position:absolute; top:-100px; left:-100px; border-style:none;" />'%(id,marksrc,rot) |
| elif ob.isTypeText(): | |
| # DOM - Text | |
| tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;"'%(id) | |
| if tiptext: | |
| tag += ' title="%s"'%tiptext | |
| tag += '><div id="t.%s" class="maptext" style="visibility:hidden">'%(id) | |
| tag += ob.getText() | |
| tag += '</div></div>' | |
| else: | else: |
| # DOM - Area | |
| if bt.isIE: | if bt.isIE: |
| # IE needs transparent img for area | # IE needs transparent img for area |
| tag += '<img id="i.%s" border="0" style="position:absolute; top:-100px; left:-100px;" src="trans_img"'%(id) | tag += '<img id="i.%s" border="0" style="position:absolute; top:-100px; left:-100px;" src="trans_img"'%(id) |
| Line 308 class ECHO_basis: | Line 361 class ECHO_basis: |
| tag += ' title="%s"'%tiptext | tag += ' title="%s"'%tiptext |
| tag += " />" | tag += " />" |
| else: | else: |
| # div for area | # empty div for area |
| tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;"'%(id) | tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;"'%(id) |
| if tiptext: | if tiptext: |
| tag += ' title="%s"'%tiptext | tag += ' title="%s"'%tiptext |
| Line 328 def toList(field): | Line 381 def toList(field): |
| return field | return field |
| def getText(nodelist): | def getText(nodelist): |
| rc = "" | rc = "" |
| for node in nodelist: | for node in nodelist: |
| if node.nodeType == node.TEXT_NODE: | if node.nodeType == node.TEXT_NODE: |
| Line 395 def checkOnlyOneInGroup(object): | Line 447 def checkOnlyOneInGroup(object): |
| return displayedObjects[0][1] | return displayedObjects[0][1] |
| else: return object | else: return object |
| def getSubCols(self, sortfield=None, subColTypes=displayTypes, sortFieldMD=None): | def getSubCols(self, sortfield=None, subColTypes=displayTypes, sortFieldMD=None,searchMD=None): |
| def sort(x,y): | def sort(x,y): |
| return cmp(x[0],y[0]) | return cmp(x[0],y[0]) |
| Line 418 def getSubCols(self, sortfield=None, sub | Line 471 def getSubCols(self, sortfield=None, sub |
| for entry in displayedObjects: | for entry in displayedObjects: |
| object=entry[1] | object=entry[1] |
| if searchMD and hasattr(object,'getMDValue'): | |
| flag=0 | |
| for field in searchMD.keys(): | |
| if object.getMDValue(field)==searchMD[field]: | |
| flag=1 | |
| else: | |
| flag=0 | |
| break | |
| if flag==1: | |
| ids.append(object) | |
| else: | |
| ids.append(object) | ids.append(object) |
| if not sortfield: | if not sortfield: |
| Line 428 def getSubCols(self, sortfield=None, sub | Line 493 def getSubCols(self, sortfield=None, sub |
| tmplist=[] | tmplist=[] |
| for x in ids: | for x in ids: |
| if hasattr(x,sortfield): | if hasattr(x,sortfield): |
| try: | try: |
| tmp=int(getattr(x,sortfield)) | tmp=int(getattr(x,sortfield)) |
| Line 615 def findObjectPath(startobject, filename | Line 681 def findObjectPath(startobject, filename |
| paths = filename.split('/') | paths = filename.split('/') |
| object = startobject | object = startobject |
| for path in paths: | for path in paths: |
| if hasattr(object, path): | if hasattr(object, path): |
| object = getattr(object, path) | object = getattr(object, path) |
| else: | else: |
| Line 841 class MapArea(SimpleItem): | Line 908 class MapArea(SimpleItem): |
| # type constants | # type constants |
| TYPE_AREA = 'area' | TYPE_AREA = 'area' |
| TYPE_ARROW = 'arrow' | TYPE_ARROW = 'arrow' |
| TYPE_TEXT = 'text' | |
| def __init__(self, id, coords, label=None, type=None, text=None): | def __init__(self, id, coords, label=None, type=None, tip=None, volatile=True): |
| """init""" | """init""" |
| self.coords = coords[0:4] | self.coords = coords[0:4] |
| if len(coords) > 4: | if len(coords) > 4: |
| Line 852 class MapArea(SimpleItem): | Line 920 class MapArea(SimpleItem): |
| self.id = id | self.id = id |
| self.label = label | self.label = label |
| self.setType(type) | self.setType(type) |
| self.text = text | self.tip = tip |
| self.volatile = volatile | |
| def setCoords(self, coords): | def setCoords(self, coords): |
| """sets the coords""" | """sets the coords""" |
| Line 887 class MapArea(SimpleItem): | Line 956 class MapArea(SimpleItem): |
| self.type = MapArea.TYPE_ARROW | self.type = MapArea.TYPE_ARROW |
| elif type == MapArea.TYPE_AREA: | elif type == MapArea.TYPE_AREA: |
| self.type = MapArea.TYPE_AREA | self.type = MapArea.TYPE_AREA |
| elif type == MapArea.TYPE_TEXT: | |
| self.type = MapArea.TYPE_TEXT | |
| else: | else: |
| self.type = MapArea.TYPE_AREA | self.type = MapArea.TYPE_AREA |
| Line 898 class MapArea(SimpleItem): | Line 969 class MapArea(SimpleItem): |
| """returns if the type is arrow""" | """returns if the type is arrow""" |
| return self.type == MapArea.TYPE_ARROW | return self.type == MapArea.TYPE_ARROW |
| def isTypeText(self): | |
| """returns if the type is text""" | |
| return self.type == MapArea.TYPE_TEXT | |
| def getAngle(self): | def getAngle(self): |
| """returns the angle""" | """returns the angle""" |
| return self.angle | return self.angle |
| Line 906 class MapArea(SimpleItem): | Line 981 class MapArea(SimpleItem): |
| """sets the angle""" | """sets the angle""" |
| self.angle = angle | self.angle = angle |
| def getText(self): | def getTip(self): |
| """returns the popup text""" | """returns the popup text""" |
| if self.text is None: | # patch old version |
| if not hasattr(self, 'tip'): | |
| self.tip = self.text | |
| if self.tip is None: | |
| if hasattr(self, 'aq_parent'): | if hasattr(self, 'aq_parent'): |
| parent = self.aq_parent | parent = self.aq_parent |
| if parent.contentType == 'text-popup': | if parent.contentType == 'text-popup': |
| return parent.description | return parent.description |
| return self.text | return self.tip |
| def setText(self, text): | def setTip(self, text): |
| """sets the text""" | """sets the text""" |
| self.text = text | self.tiptext = text |
| def getText(self): | |
| """returns the text fpr the area""" | |
| if hasattr(self, 'aq_parent'): | |
| parent = self.aq_parent | |
| text = parent.getMapText() | |
| if text is not None: | |
| return text.document_src() | |
| return "" | |
| def getLabel(self): | def getLabel(self): |
| """returns the link label""" | """returns the link label""" |
| Line 935 class MapArea(SimpleItem): | Line 1023 class MapArea(SimpleItem): |
| return self.aq_parent.id | return self.aq_parent.id |
| return self.id | return self.id |
| # call this to initialize framework classes, which | # call this to initialize framework classes, which |
| # does the right thing with the security assertions. | # does the right thing with the security assertions. |
| Globals.InitializeClass(MapArea) | Globals.InitializeClass(MapArea) |
| class MapText(ZopePageTemplate): | |
| """class to hold text for map areas""" | |
| meta_type = 'ECHO_mapText' | |
| # Create a SecurityInfo for this class. | |
| security = ClassSecurityInfo() | |
| security.setDefaultAccess("allow") | |
| _default_content_fn = os.path.join(package_home(globals()), | |
| 'html', 'ECHO_mapText_default.html') | |
| def __init__(self, id, text=None, content_type=None): | |
| 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) | |
| # Product registration and Add support | |
| manage_addMapTextForm = PageTemplateFile( | |
| 'zpt/AddECHO_mapText', globals(), __name__='manage_addMapTextForm') | |
| def manage_addMapText(self, id, title=None, text=None, | |
| REQUEST=None, submit=None): | |
| "Add a Map Text with optional file content." | |
| id = str(id) | |
| if REQUEST is None: | |
| self._setObject(id, MapText(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 = MapText(id, text) | |
| else: | |
| zpt = MapText(id, file, headers.get('content_type')) | |
| self._setObject(id, zpt) | |
| if title: | |
| ob = getattr(self, id) | |
| ob.pt_setTitle(title) | |
| try: | |
| u = self.DestinationURL() | |
| except AttributeError: | |
| u = REQUEST['URL1'] | |
| if submit == " Add and Edit ": | |
| u = "%s/%s" % (u, urllib.quote(id)) | |
| REQUEST.RESPONSE.redirect(u+'/manage_main') | |
| return '' | |
| # call this to initialize framework classes, which | |
| # does the right thing with the security assertions. | |
| Globals.InitializeClass(MapText) |