Skip to content
Snippets Groups Projects
markerloader_georss.js 2.71 KiB
/* $Id$ */

/**
 * GMap Marker Loader
 * GeoRSS markers.
 * This doesn't work at the moment.
 */

Drupal.gmap.addHandler('gmap', function(elem) {
  var obj = this;
  var feed, i, j, marker, tmp;
  if (obj.vars.feed) {
    // Inject markers as soon as the icon loader is ready.
    obj.bind('iconsready',function() {
      for (i=0; i<obj.vars.feed.length; i++) {
        feed = obj.vars.feed[i];
        var getfn = function(markername) {
          return function(data, responseCode) {
            var xml = GXml.parse(data);
            var offset = 0;
            var items = xml.getElementsByTagName('item');
            // Ugly.
            var f = function(name,ns) {
              var item = items[j].getElementsByTagName(name);
              if (item.length<1) {
                // Try again with prefix.
                if (ns) {
                  item = items[j].getElementsByTagName(ns+':'+name);
                }
                else {
                  return false;
                }
              }
              if (item.length>0) {
                return item[0].firstChild.nodeValue;
              }
              else {
                return false;
              }
            };

            for (j=0;j<items.length;j++) {
              marker = {};
              marker.opts = {};
              marker.opts.title = f('title');
              if (obj.vars.markermode == 0) {
                marker.text = f('description');
              }
              else {
                marker.link = f('link');
              }
              // GeoRSS Simple
              if ((tmp = f('point','georss'))) {
                tmp = tmp.split(' ');
                marker.latitude = tmp[0];
                marker.longitude = tmp[1];
              }
              // GeoRSS GML
              else if ((tmp = f('pos','gml'))) {
                tmp = tmp.split(' ');
                marker.latitude = tmp[0];
                marker.longitude = tmp[1];
              }
              // Misc.
              else {
                marker.latitude = f('lat','geo') || f('latitude','geourl') || f('latitude','icbm');
                marker.longitude = f('lon','geo') || f('longitude','geourl') || f('longitude','icbm');
              }
              marker.markername = markername;
              marker.offset = offset;
              offset++;
              // Pass around the object, bindings can change it if necessary.
              obj.change('preparemarker',-1,marker);
              // And add it.
              obj.change('addmarker',-1,marker);
            }
          };
        };
        // This sucks, but jQuery and IE don't get along here.
        GDownloadUrl(feed.url, getfn(feed.markername));
      }
      obj.change('markersready',-1);
    });
  }
});