## Script (Python) "maps_markers" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= longlat=[], node, controls='nothing', maptype='hybrid', overviewControls=None, typeControls=None, events=False, color='default', zoom=None, loc=(37.4419, -122.1419), mapevents=None, auto='Full' ##title= ## from Products.qPloneGoogleMaps.utility import processDesc lon = [] lat = [] sPortal = context.portal_url() sControls = "" sMarkerEvents = "" sMapEvents = "" sDefaults = "" sMarkers = "" sInfoWindow = """ "

"+title+"

"+content+"

" """ sMarkerForm = """ "
" """ if maptype == 'satellite': maptype = 'G_SATELLITE_MAP' elif maptype == 'map': maptype = 'G_NORMAL_MAP' else: maptype = 'G_HYBRID_MAP' if (not color) and longlat: lat = [float(e.geoLocation[0]) for el in longlat.values() for e in el] lon = [float(e.geoLocation[1]) for el in longlat.values() for e in el] sMarkers = "\n".join([""" addMarker(%(lt)f, %(lg)f, "%(title)s", "%(url)s/view", "%(desc)s", "%(c)s"); typeof(overLays["%(id)s"])=='undefined'?overLays["%(id)s"]=[]:''; overLays["%(id)s"].push([%(lt)f, %(lg)f, "%(title)s", "%(url)s/view", "%(desc)s", "%(c)s"]); """ % {'lt':float(e.geoLocation[0]), 'lg':float(e.geoLocation[1]), 'title':e.Title, 'url':e.getURL(), 'desc':processDesc(e.Description), 'c':el[1], 'id':el[0]} for el, value in longlat.items() for e in value]) elif longlat: lat = [float(el.geoLocation[0]) for el in longlat] lon = [float(el.geoLocation[1]) for el in longlat] sMarkers = "\n".join(["""addMarker(%f, %f, "%s", "%s/view", "%s", "%s");""" % (float(el.geoLocation[0]), float(el.geoLocation[1]), el.Title, el.getURL(), processDesc(el.Description), color) for el in longlat]) if controls == 'large': sControls += "map1.addControl(new GLargeMapControl());\n" elif controls == 'small': sControls += "map1.addControl(new GSmallMapControl());\n" if typeControls: sControls += "map1.addControl(new GMapTypeControl());\n" if overviewControls: sControls += "map1.addControl(new GOverviewMapControl());\n" #if mapevents: if False: sMapEvents = """ var listener = function(marker, point) { if (!marker){ var m = new GMarker(point); map1.addOverlay(m); m.openInfoWindowHtml(%s); var ok_buttons = document.getElementsByName('ok'); var c_buttons = document.getElementsByName('cancel'); for (var i=0; i < ok_buttons.length; i++) { ok_buttons[i].addEventListener('click', function(){map1.closeInfoWindow()}, false); c_buttons[i].addEventListener('click', function(){map1.closeInfoWindow();map1.removeOverlay(m);}, false); GEvent.addEvent(m, 'infowindowclose', function(){map1.removeOverlay(m);}, false); }; //map1.removeOverlay(m); infowindow = map1.getInfoWindow(); infowindow.reset(point); //window.alert(infowindow instanceof null); //GEvent.addListener(infowindow, 'closeclick', function(){map1.removeOverlay(m)}); } }; GEvent.addListener(map1, 'click', listener);""" % sMarkerForm if events: sMarkerEvents = """ var f = function(){marker.openInfoWindowHtml(%s, opt);}; GEvent.addListener(marker, 'click', f);\n""" % sInfoWindow if lon and lat and auto != 'None': sDefaults = """ var centerPoint = new GLatLng(%f, %f), autoZoom = map1.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(%f, %f), new GLatLng(%f, %f))); """ % ((min(lat)+max(lat))/2, (min(lon)+max(lon))/2, min(lat), min(lon), max(lat), max(lon)) if auto == 'Zoom': sDefaults += """map1.setZoom(autoZoom);""" elif auto == 'Center': sDefaults += """map1.setCenter(centerPoint);""" elif auto == 'Full': sDefaults += """map1.setCenter(centerPoint, autoZoom);""" sDefaults += """map1.savePosition();""" if not zoom: zoom = 6 return """ """ % { 'url' : sPortal, 'node' : node, 'markers' : sMarkers, 'defaults' : sDefaults, 'controls' : sControls, 'event' : sMarkerEvents, 'mapevents' : sMapEvents, 'zoom' : zoom, 'lt' : float(loc[0]), 'ln' : float(loc[1]), 'maptype' : maptype}