Skip to content
Snippets Groups Projects
locpick.js 4.68 KiB
Newer Older
Brandon Bergren's avatar
Brandon Bergren committed
 * @file
 * Location chooser interface.
 */

Brandon Bergren's avatar
Brandon Bergren committed
/*global $, Drupal, GEvent, GLatLng, GMarker */

Brandon Bergren's avatar
 
Brandon Bergren committed
(function ($) {
Brandon Bergren's avatar
Brandon Bergren committed
Drupal.gmap.addHandler('gmap', function (elem) {
  var obj = this;

Brandon Bergren's avatar
Brandon Bergren committed
  var binding = obj.bind("locpickchange", function () {
    if (obj.locpick_coord) {
      google.maps.event.trigger(obj.map, "click", { 'latLng': obj.locpick_coord });
Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind("locpickremove", function () {
    //obj.map.removeOverlay(obj.locpick_point);
    if (obj.locpick_point) obj.locpick_point.setMap(null);
    obj.locpick_coord = null;
    obj.change('locpickchange', -1);
  });

Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind("init", function () {
    if (obj.vars.behavior.locpick) {
      obj.locpick_coord = new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude);
      google.maps.event.addListener(obj.map, "click", function (event) {
        google.maps.event.trigger(obj.map, "resize");
        if (event) {
            obj.locpick_point = new google.maps.Marker({
              map: obj.map,
              draggable: true
            });
          }
          else {
            obj.locpick_point.setPosition(event.latLng);
          google.maps.event.addListener(obj.locpick_point, 'drag', function () {
            //obj.locpick_coord = obj.locpick_point.getLatLng();
            obj.locpick_coord = new google.maps.LatLng(obj.locpick_point.position.lat(), obj.locpick_point.position.lng());
            obj.change('locpickchange', binding);
          });
          google.maps.event.addListener(obj.locpick_point, 'dragend', function () {
            //obj.locpick_coord = obj.locpick_point.getLatLng();
            obj.locpick_coord = new google.maps.LatLng(obj.locpick_point.position.lat(), obj.locpick_point.position.lng());
            obj.change('locpickchange', binding);
          });
          obj.locpick_coord = event.latLng;
          obj.map.panTo(event.latLng);
          obj.change('locpickchange', binding);
        }
        else {
          // Unsetting the location
Brandon Bergren's avatar
Brandon Bergren committed
          obj.change('locpickremove', -1);
Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind("ready", function () {
    // Fake a click to set the initial point, if one was set.
    if (obj.vars.behavior.locpick) {
      if (!obj.locpick_invalid) {
        obj.change('locpickchange', -1);
      }
    }
  });

});

Brandon Bergren's avatar
Brandon Bergren committed
Drupal.gmap.addHandler('locpick_latitude', function (elem) {
  var obj = this;
Brandon Bergren's avatar
Brandon Bergren committed

  obj.bind("init", function () {
    if (elem.value !== '') {
      obj.vars.latitude = Number(elem.value);
      //obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude);
      obj.locpick_coord = new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude);
    }
    else {
      obj.locpick_coord = null;
      obj.locpick_invalid = true;
    }
  });

Brandon Bergren's avatar
Brandon Bergren committed
  var binding = obj.bind("locpickchange", function () {
    if (obj.locpick_coord) {
      elem.value = obj.locpick_coord.lat();
    }
    else {
      elem.value = '';
    }
  });

Brandon Bergren's avatar
Brandon Bergren committed
  $(elem).change(function () {
    if (elem.value !== '') {
      if (obj.locpick_coord) {
        //obj.locpick_coord = new GLatLng(Number(elem.value), obj.locpick_coord.lng());
        obj.locpick_coord = new google.maps.LatLng(Number(elem.value), obj.locpick_coord.lng());
        obj.change('locpickchange', binding);
      }
      else {
        //obj.locpick_coord = new GLatLng(Number(elem.value), 0.0);
        obj.locpick_coord = new google.maps.LatLng(Number(elem.value), 0.0);
      }
    }
    else {
      obj.change('locpickremove', -1);
    }
  });
});

Brandon Bergren's avatar
Brandon Bergren committed
Drupal.gmap.addHandler('locpick_longitude', function (elem) {
  var obj = this;

Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind("init", function () {
    if (elem.value !== '') {
      obj.vars.longitude = Number(elem.value);
      //obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude);
      obj.locpick_coord = new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude);
    }
    else {
      obj.locpick_invalid = true;
    }
  });

Brandon Bergren's avatar
Brandon Bergren committed
  var binding = obj.bind("locpickchange", function () {
    if (obj.locpick_coord) {
      elem.value = obj.locpick_coord.lng();
    }
    else {
      elem.value = '';
    }
  });

Brandon Bergren's avatar
Brandon Bergren committed
  $(elem).change(function () {
    if (elem.value !== '') {
      if (obj.locpick_coord) {
        //obj.locpick_coord = new GLatLng(obj.locpick_coord.lat(), Number(elem.value));
        obj.locpick_coord = new google.maps.LatLng(obj.locpick_coord.lat(), Number(elem.value));
        obj.change('locpickchange', binding);
      }
      else {
        //obj.locpick_coord = new GLatLng(0.0, Number(elem.value));
        obj.locpick_coord = new google.maps.LatLng(0.0, Number(elem.value));
      }
    }
    else {
      obj.change('locpickremove', -1);
    }
  });
});
Brandon Bergren's avatar
 
Brandon Bergren committed
})(jQuery);