Changeset 360
- Timestamp:
- 07/04/06 04:59:15
- Files:
-
- qPloneGoogleMaps/trunk/Extensions/Install.py (modified) (6 diffs)
- qPloneGoogleMaps/trunk/TODO.txt (modified) (1 diff)
- qPloneGoogleMaps/trunk/__init__.py (modified) (1 diff)
- qPloneGoogleMaps/trunk/config.py (modified) (1 diff)
- qPloneGoogleMaps/trunk/content (added)
- qPloneGoogleMaps/trunk/content/Map.py (added)
- qPloneGoogleMaps/trunk/content/Marker.py (added)
- qPloneGoogleMaps/trunk/content/Overlay.py (added)
- qPloneGoogleMaps/trunk/content/__init__.py (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/gmarker_view.pt (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/blue (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/blue/map_marker.png (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/default (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/default/map_marker.png (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/green (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/green/map_marker.png (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/map_shadow.png (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/red (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/images/red/map_marker.png (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/map_icon.gif (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/map_view.pt (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_markers.py (modified) (4 diffs)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_view.pt (modified) (1 diff)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/marker_icon.gif (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/overlay_icon.gif (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/overlay_view.pt (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/portlet_maps.pt (modified) (1 diff)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/topic_maps_view.pt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
qPloneGoogleMaps/trunk/Extensions/Install.py
r359 r360 5 5 from Products.CMFCore.DirectoryView import addDirectoryViews 6 6 7 from Products.Archetypes.Extensions.utils import installTypes 8 from Products.Archetypes.public import listTypes 9 7 10 from Products.qPloneGoogleMaps.config import * 11 12 def installContentTypes(self, out): 13 """ Install new portal types and add to the portal_factory """ 14 15 typesInfo = listTypes(PROJECTNAME) 16 installTypes(self, out, typesInfo, PROJECTNAME) 17 out.write("Installed types\n") 18 19 factory_tool = getToolByName(self, 'portal_factory') 20 types = factory_tool.getFactoryTypes().keys() 21 for item in NEW_PORTAL_TYPES: 22 if item not in types: 23 types.append(item) 24 factory_tool.manage_setPortalFactoryTypes(listOfTypeIds = types) 25 out.write('Added %s portal type to portal_factory\n' % item) 8 26 9 27 def addTopicMapView(self, out, view): … … 12 30 portal_types = getToolByName(self, 'portal_types', None) 13 31 if portal_types is not None: 14 fti = getattr(portal_types, 'Topic', None) 15 if fti is not None: 16 views = list(getattr(fti, 'view_methods')) 17 if view not in views: 18 views.append(view) 19 fti.manage_changeProperties(view_methods = tuple(views)) 20 out.write("Added new view template to 'Topic' FTI.\n") 32 for tp in ['Folder', 'Large Plone Folder', 'Topic']: 33 fti = getattr(portal_types, tp, None) 34 if fti is not None: 35 views = list(getattr(fti, 'view_methods')) 36 if view not in views: 37 views.append(view) 38 fti.manage_changeProperties(view_methods = tuple(views)) 39 out.write("Added new view template to '%s' FTI.\n" % tp) 21 40 22 41 def removeTopicMapView(self, out, view): … … 25 44 portal_types = getToolByName(self, 'portal_types', None) 26 45 if portal_types is not None: 27 fti = getattr(portal_types, 'Topic', None) 28 if fti is not None: 29 views = list(getattr(fti, 'view_methods')) 30 if view in views: 31 views.remove(view) 32 fti.manage_changeProperties(view_methods = tuple(views)) 33 out.write("Removed maps view template from 'Topic' FTI.\n") 46 for tp in ['Folder', 'Large Plone Folder', 'Topic']: 47 fti = getattr(portal_types, tp, None) 48 if fti is not None: 49 views = list(getattr(fti, 'view_methods')) 50 if view in views: 51 views.remove(view) 52 fti.manage_changeProperties(view_methods = tuple(views)) 53 out.write("Removed maps view template from '%s' FTI.\n" % tp) 34 54 35 55 def addPortlet(self, out, slot): … … 94 114 out = StringIO() 95 115 116 # installin content types 117 installContentTypes(self, out) 118 96 119 # add portlet to right slot 97 120 addPortlet(self, out, 'here/portlet_maps/macros/portlet') … … 102 125 # setup skin layer 103 126 out.write('setupSkin... \n') 104 setupSkin(self, out, PROJECT _NAME)127 setupSkin(self, out, PROJECTNAME) 105 128 106 129 return out.getvalue() … … 118 141 119 142 # remove skin layer 120 removeSkin(self, [PROJECT _NAME,])143 removeSkin(self, [PROJECTNAME,]) 121 144 122 145 return out.getvalue() qPloneGoogleMaps/trunk/TODO.txt
r359 r360 4 4 # * centering, zooming 5 5 6 * folder view 6 # * folder view 7 8 * marker functionality qPloneGoogleMaps/trunk/__init__.py
r359 r360 1 from AccessControl import allow_module 2 1 3 from Products.CMFCore.DirectoryView import registerDirectory 4 from Products.CMFCore import utils 2 5 3 from Products.qPloneGoogleMaps.config import SKINS_DIR, GLOBALS 6 from Products.Archetypes.public import process_types 7 from Products.Archetypes import listTypes 8 9 from Products.qPloneGoogleMaps.config import * 10 11 allow_module('Products.qPloneGoogleMaps.config') 4 12 5 13 registerDirectory(SKINS_DIR, GLOBALS) 14 15 def initialize(context): 16 from content import Map, Marker, Overlay 17 18 content_types, constructors, ftis = process_types(listTypes(PROJECTNAME), PROJECTNAME) 19 20 utils.ContentInit(PROJECTNAME + ' Content', 21 content_types = content_types, 22 permission = DEFAULT_ADD_CONTENT_PERMISSION, 23 extra_constructors = constructors, 24 fti = ftis).initialize(context) qPloneGoogleMaps/trunk/config.py
r359 r360 1 PROJECT_NAME = 'qPloneGoogleMaps' 1 from Products.CMFCore.CMFCorePermissions import setDefaultRoles 2 2 3 PROJECTNAME = 'qPloneGoogleMaps' 4 5 DEFAULT_ADD_CONTENT_PERMISSION = "Add portal content" 3 6 GLOBALS = globals() 4 7 SKINS_DIR = 'skins' 5 8 6 MAP_KEY = 'ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw' 9 NEW_PORTAL_TYPES = ['Map', 'Marker', 'Overlay'] 10 11 #MAP_API_KEY = 'ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw' 12 13 MAP_API_KEY = 'ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hR-_Derz1M-sZYUdeXG3J1uZOMrKxT98efydo7fhYu6kuaFv5ESjlw4mw' 14 15 setDefaultRoles(DEFAULT_ADD_CONTENT_PERMISSION, ('Manager', 'Owner',)) qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_markers.py
r359 r360 5 5 ##bind script=script 6 6 ##bind subpath=traverse_subpath 7 ##parameters= longlat=[], node, controls= False, events=False7 ##parameters= longlat=[], node, controls='nothing', maptype='G_NORMAL_MAP', overviewControls=None, typeControls=None, events=False, color='default', zoom=6, ln=-122.1419, lt=37.4419 8 8 ##title= 9 9 ## 10 10 11 lon = [el.longitude for el in longlat]12 lat = [el.latitude for el in longlat]13 11 sPortal = context.portal_url() 14 12 sControls = "" 15 13 sEvents = "" 16 14 sDefaults = "" 17 if controls: 18 sControls = """ 19 map.addControl(new GLargeMapControl()); 20 map.addControl(new GMapTypeControl()); 21 map.addControl(new GOverviewMapControl());\n""" 15 sMarkers = "" 16 sInfoWindow = """ 17 "<div><h2><a href='"+url+"'>"+title+"</a></h2><p>"+content+"</p></div>" 18 """ 19 20 if maptype == 'satellite': maptype = 'G_SATELLITE_MAP' 21 22 if (not color) and longlat: 23 lon = [e.longitude for el in longlat for e in el.values()[0]] 24 lat = [e.latitude for el in longlat for e in el.values()[0]] 25 if hasattr(longlat[0].values()[0][0], 'getURL'): 26 sMarkers = "\n".join(["addMarker(%f, %f, '%s', '%s', '%s', '%s');" % (e.latitude, e.longitude, e.Title, e.getURL(), e.Description, el.keys()[0]) for el in longlat for e in el.values()[0]]) 27 else: 28 sMarkers = "\n".join(["addMarker(%f, %f, '%s', '%s', '%s', '%s');" % (e.latitude, e.longitude, e.Title(), e.absolute_url(), e.Description(), el.keys()[0]) for el in longlat for e in el.values()[0]]) 29 elif longlat: 30 lon = [el.longitude for el in longlat] 31 lat = [el.latitude for el in longlat] 32 if hasattr(longlat[0], 'getURL'): 33 sMarkers = "\n".join(["addMarker(%f, %f, '%s', '%s', '%s', '%s');" % (el.latitude, el.longitude, el.Title, el.getURL(), el.Description, color) for el in longlat]) 34 else: 35 sMarkers = "\n".join(["addMarker(%f, %f, '%s', '%s', '%s', '%s');" % (el.latitude, el.longitude, el.Title(), el.absolute_url(), el.Description(), color) for el in longlat]) 36 37 if controls == 'large': sControls += "map.addControl(new GLargeMapControl());" 38 elif controls == 'small': sControls += "map.addControl(new GSmallMapControl());" 39 if typeControls: sControls += "map.addControl(new GMapTypeControl());" 40 if overviewControls: sControls += "map.addControl(new GOverviewMapControl());\n" 41 22 42 if events: 23 43 sEvents = """ 24 var f = function(){marker.openInfoWindowHtml("<p>"+html+"</p>");}; 25 GEvent.addListener(marker, 'click', f);\n""" 26 if longlat: sDefaults = """ 44 var f = function(){marker.openInfoWindowHtml(%s);}; 45 GEvent.addListener(marker, 'click', f);\n""" % sInfoWindow 46 if longlat: 47 sDefaults = """ 27 48 map.setCenter(new GLatLng(%f, %f), map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(%f, %f), new GLatLng(%f, %f)))); 28 49 map.savePosition();""" % ((min(lat)+max(lat))/2, (min(lon)+max(lon))/2, min(lat), min(lon), max(lat), max(lon)) … … 37 58 var map = new GMap2(document.getElementById('%(node)s')); 38 59 %(controls)s 39 map.setCenter(new GLatLng( 37.4419, -122.1419), 6)60 map.setCenter(new GLatLng(%(lt)f, %(ln)f), %(zoom)s) 40 61 41 62 var icon = new GIcon(); 42 icon.image = "%(url)s/gmap_marker.png"; 43 icon.shadow = "%(url)s/gmap_shadow.png"; 63 icon.shadow = "%(url)s/images/map_shadow.png"; 44 64 icon.iconSize = new GSize(20, 34); 45 65 icon.shadowSize = new GSize(37, 34); … … 47 67 icon.infoWindowAnchor = new GPoint(9, 2); 48 68 49 function addMarker(lat, lng, html){ 69 function addMarker(lat, lng, title, url, content, col){ 70 icon.image = "%(url)s/images/"+col+"/map_marker.png"; 50 71 var point = new GLatLng(lat, lng); 51 72 var marker = new GMarker(point, icon) … … 60 81 </script> 61 82 """ % { 62 'url': sPortal, 63 'node': node, 64 'markers': "\n".join(["addMarker(%f, %f, '%s');" % (el.latitude, el.longitude, el.Description) for el in longlat]), 65 'defaults': sDefaults, 66 'controls': sControls, 67 'events': sEvents} 83 'url' : sPortal, 84 'node' : node, 85 'markers' : sMarkers, 86 'defaults' : sDefaults, 87 'controls' : sControls, 88 'events' : sEvents, 89 'zoom' : zoom, 90 'ln' : float(ln), 91 'lt' : float(lt), 92 'maptype' : maptype} qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_view.pt
r359 r360 6 6 <metal:block fill-slot="javascript_head_slot"> 7 7 <script type="text/javascript" src="" 8 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw"> 8 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 9 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${key}"> 9 10 </script> 10 <span tal:replace="structure python:here.maps_markers([here,], node='map', controls=True, events=True)" />11 <span tal:replace="structure python:here.maps_markers([here,], node='map', events=True, controls='large', typeControls=True, overviewControls=True)" /> 11 12 </metal:block> 12 13 </head> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/portlet_maps.pt
r359 r360 4 4 <body> 5 5 <div metal:define-macro="portlet" 6 tal:define="lon here/longitude|nothing;7 lat here/latitude|nothing;6 tal:define="lon python:here.getProperty('longitude', None); 7 lat python:here.getProperty('latitude', None); 8 8 longlat python:[here,]" 9 9 tal:condition="python:lon and lat"> 10 10 11 11 <script type="text/javascript" src="" 12 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw"> 12 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 13 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${key}"> 13 14 </script> 14 15 <span tal:replace="structure python:here.maps_markers(longlat=longlat, node='portlet_map')" /> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/topic_maps_view.pt
r359 r360 6 6 <metal:block fill-slot="javascript_head_slot"> 7 7 <script type="text/javascript" src="" 8 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw"> 8 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 9 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${key}"> 9 10 </script> 10 <span tal:define="longlat python:[el for el in here.queryCatalog() if getattr(el,'latitude') and getattr(el,'longitude')]" 11 tal:replace="structure python:here.maps_markers(longlat, node='map', controls=True, events=True)" /> 11 <span tal:define="contentsMethod python:test(here.portal_type=='Topic', here.queryCatalog, here.getFolderContents); 12 content folderContents|python:contentsMethod(); 13 longlat python:[el for el in content if getattr(el,'latitude') and getattr(el,'longitude')]" 14 tal:replace="structure python:here.maps_markers(longlat, node='map', events=True, controls='large', typeControls=True, overviewControls=True)" /> 12 15 </metal:block> 13 16 </head>
