1 /** |
|
2 * :organization: Logilab |
|
3 * :copyright: 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
|
4 * :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
|
5 */ |
|
6 |
|
7 Widgets.GMapWidget = defclass('GMapWidget', null, { |
|
8 __init__: function(wdgnode) { |
|
9 // Assume we have imported google maps JS |
|
10 if (GBrowserIsCompatible()) { |
|
11 var uselabelstr = wdgnode.getAttribute('cubicweb:uselabel'); |
|
12 var uselabel = true; |
|
13 if (uselabelstr) { |
|
14 if (uselabelstr == 'True') { |
|
15 uselabel = true; |
|
16 } |
|
17 else { |
|
18 uselabel = false; |
|
19 } |
|
20 } |
|
21 var map = new GMap2(wdgnode); |
|
22 map.addControl(new GSmallMapControl()); |
|
23 var jsonurl = wdgnode.getAttribute('cubicweb:loadurl'); |
|
24 var self = this; // bind this to a local variable |
|
25 jQuery.getJSON(jsonurl, function(geodata) { |
|
26 var zoomLevel; |
|
27 var center; |
|
28 var latlngbounds = new GLatLngBounds( ); |
|
29 for (var i = 0; i < geodata.markers.length; i++) { |
|
30 var marker = geodata.markers[i]; |
|
31 var latlng = new GLatLng(marker.latitude, marker.longitude); |
|
32 latlngbounds.extend( latlng ); |
|
33 } |
|
34 if (geodata.zoomlevel) { |
|
35 zoomLevel = geodata.zoomlevel; |
|
36 } else { |
|
37 zoomLevel = map.getBoundsZoomLevel( latlngbounds ) - 1; |
|
38 } |
|
39 if (geodata.center) { |
|
40 center = new GLatng(geodata.center.latitude, geodata.center.longitude); |
|
41 } else { |
|
42 center = latlngbounds.getCenter(); |
|
43 } |
|
44 map.setCenter(center, zoomLevel); |
|
45 for (var i = 0; i < geodata.markers.length; i++) { |
|
46 var marker = geodata.markers[i]; |
|
47 self.createMarker(map, marker, i + 1, uselabel); |
|
48 } |
|
49 }); |
|
50 jQuery(wdgnode).after(this.legendBox); |
|
51 } else { // incompatible browser |
|
52 jQuery.unload(GUnload); |
|
53 } |
|
54 }, |
|
55 |
|
56 createMarker: function(map, marker, i, uselabel) { |
|
57 var point = new GLatLng(marker.latitude, marker.longitude); |
|
58 var icon = new GIcon(); |
|
59 icon.image = marker.icon[0]; |
|
60 icon.iconSize = new GSize(marker.icon[1][0], marker.icon[1][1]); |
|
61 icon.iconAnchor = new GPoint(marker.icon[2][0], marker.icon[2][1]); |
|
62 if (marker.icon[3]) { |
|
63 icon.shadow4 = marker.icon[3]; |
|
64 } |
|
65 if (typeof LabeledMarker == "undefined") { |
|
66 var gmarker = new GMarker(point, { |
|
67 icon: icon, |
|
68 title: marker.title |
|
69 }); |
|
70 } else { |
|
71 var gmarker = new LabeledMarker(point, { |
|
72 icon: icon, |
|
73 title: marker.title, |
|
74 labelText: uselabel ? '<strong>' + i + '</strong>': '', |
|
75 labelOffset: new GSize(2, - 32) |
|
76 }); |
|
77 } |
|
78 map.addOverlay(gmarker); |
|
79 GEvent.addListener(gmarker, 'click', function() { |
|
80 jQuery.post(marker.bubbleUrl, function(data) { |
|
81 map.openInfoWindowHtml(point, data); |
|
82 }); |
|
83 }); |
|
84 } |
|
85 |
|
86 }); |
|
87 |
|