web/data/cubicweb.gmap.js
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 18 Feb 2010 10:54:50 +0100
branchstable
changeset 4624 1b46d5ece0d5
parent 553 c69eac8298c0
child 5658 7b9553a9db65
child 5767 1d811df051c2
permissions -rw-r--r--
turn default logging threshold to warning (we usually want them), and log 'no schema for eid' pb using warning instead of error, so we see them in logs but not during migration

/*
 *  :organization: Logilab
 *  :copyright: 2003-2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
 *  :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
 *
 *
 */

Widgets.GMapWidget = defclass('GMapWidget', null, {
  __init__: function(wdgnode) {
    // Assume we have imported google maps JS
    if (GBrowserIsCompatible()) {
      var uselabelstr = wdgnode.getAttribute('cubicweb:uselabel');
      var uselabel = true;
      if (uselabelstr){
	if (uselabelstr == 'True'){
	  uselabel = true;
	}
	else{
	  uselabel = false;
	}
      }
      var map = new GMap2(wdgnode);
      map.addControl(new GSmallMapControl());
      var jsonurl = wdgnode.getAttribute('cubicweb:loadurl');
      var self = this; // bind this to a local variable
      jQuery.getJSON(jsonurl, function(geodata) {
	if (geodata.center) {
	  var zoomLevel = geodata.zoomlevel;
	  map.setCenter(new GLatLng(geodata.center.latitude, geodata.center.longitude),
		        zoomLevel);
	}
	for (var i=0; i<geodata.markers.length; i++) {
	  var marker = geodata.markers[i];
	  self.createMarker(map, marker, i+1, uselabel);
	}
      });
      jQuery(wdgnode).after(this.legendBox);
    } else { // incompatible browser
      jQuery.unload(GUnload);
    }
  },

  createMarker: function(map, marker, i, uselabel) {
    var point = new GLatLng(marker.latitude, marker.longitude);
    var icon = new GIcon();
    icon.image = marker.icon[0];
    icon.iconSize = new GSize(marker.icon[1][0], marker.icon[1][1]) ;
    icon.iconAnchor = new GPoint(marker.icon[2][0], marker.icon[2][1]);
    if(marker.icon[3]){
      icon.shadow4 =  marker.icon[3];
    }
    if (typeof LabeledMarker == "undefined") {
	var gmarker = new GMarker(point, {icon: icon,
	title: marker.title});
    } else {
        var gmarker = new LabeledMarker(point, {
          icon: icon,
          title: marker.title,
          labelText: uselabel?'<strong>' + i + '</strong>':'',
          labelOffset: new GSize(2, -32)
        });
    }
    map.addOverlay(gmarker);
    GEvent.addListener(gmarker, 'click', function() {
      jQuery.post(marker.bubbleUrl, function(data) {
	map.openInfoWindowHtml(point, data);
      });
    });
  }

});