web/data/cubicweb.gmap.js
branchstable
changeset 9013 b4bcabf55e77
parent 9012 2cf127d4f5fd
parent 9010 1f3d4d829e63
child 9014 dfa4da8a53a0
child 9128 d988eec2d5d3
equal deleted inserted replaced
9012:2cf127d4f5fd 9013:b4bcabf55e77
     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