Skip to content
Snippets Groups Projects
marker.js 2.6 KiB
Newer Older
Brandon Bergren's avatar
Brandon Bergren committed
 * @file
 * Common marker routines.
 */

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

Drupal.gmap.addHandler('gmap', function (elem) {
  var obj = this;

Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind('init', function () {
    if (obj.vars.behavior.autozoom) {
      obj.bounds = new GLatLngBounds();
    }
  });

Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind('addmarker', function (marker) {
    var m = Drupal.gmap.factory.marker(new GLatLng(marker.latitude, marker.longitude), marker.opts);
    marker.marker = m;
Brandon Bergren's avatar
Brandon Bergren committed
    GEvent.addListener(m, 'click', function () {
      obj.change('clickmarker', -1, marker);
    });
    if (obj.vars.behavior.extramarkerevents) {
Brandon Bergren's avatar
Brandon Bergren committed
      GEvent.addListener(m, 'mouseover', function () {
        obj.change('mouseovermarker', -1, marker);
Brandon Bergren's avatar
Brandon Bergren committed
      GEvent.addListener(m, 'mouseout', function () {
        obj.change('mouseoutmarker', -1, marker);
Brandon Bergren's avatar
Brandon Bergren committed
      GEvent.addListener(m, 'dblclick', function () {
        obj.change('dblclickmarker', -1, marker);
      });
    }
    /**
     * Perform a synthetic marker click on this marker on load.
     */
    if (marker.autoclick || (marker.options && marker.options.autoclick)) {
Brandon Bergren's avatar
Brandon Bergren committed
      obj.deferChange('clickmarker', -1, marker);
    }
    if (obj.vars.behavior.autozoom) {
      obj.bounds.extend(marker.marker.getPoint());
    }
  });

  // Default marker actions.
Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind('clickmarker', function (marker) {
    if (marker.text) {
      marker.marker.openInfoWindowHtml(marker.text);
    }
    if (marker.rmt) {
Brandon Bergren's avatar
Brandon Bergren committed
      $.get(obj.vars.rmtcallback + '/' + marker.rmt, {}, function (data) {
        marker.marker.openInfoWindowHtml(data);
      });
    }
    else if (marker.tabs) {
      var infoWinTabs = [];
      for (var m in marker.tabs) {
Brandon Bergren's avatar
Brandon Bergren committed
        if (marker.tabs.hasOwnProperty(m)) {
          infoWinTabs.push(new GInfoWindowTab(m, marker.tabs[m]));
        }
      }
      marker.marker.openInfoWindowTabsHtml(infoWinTabs);
    }
    else if (marker.link) {
Brandon Bergren's avatar
Brandon Bergren committed
      open(marker.link, '_self');
Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind('markersready', function () {
    // If we are autozooming, set the map center at this time.
    if (obj.vars.behavior.autozoom) {
      if (!obj.bounds.isEmpty()) {
        obj.map.setCenter(obj.bounds.getCenter(), Math.min(obj.map.getBoundsZoomLevel(obj.bounds), obj.vars.maxzoom));
      }
    }
  });

Brandon Bergren's avatar
Brandon Bergren committed
  obj.bind('clearmarkers', function () {
    // Reset bounds if autozooming
    // @@@ Perhaps we should have a bounds for both markers and shapes?
    if (obj.vars.behavior.autozoom) {
      obj.bounds = new GLatLngBounds();
    }
  });

  // @@@ TODO: Some sort of bounds handling for deletemarker? We'd have to walk the whole thing to figure out the new bounds...
});