]> git.openstreetmap.org Git - rails.git/blobdiff - app/views/site/index.html.erb
Make ?{node,way,relation}=id GET argumens work for the shortlink as
[rails.git] / app / views / site / index.html.erb
index ecb732c9b198d5e74daeb4014e11c0773bdff2c5..a1ce52267e71e60d278ea83e7932726956c5014d 100644 (file)
 </noscript>
 
 <div id="map">
-<div id="permalink"><a href="/" id="permalinkanchor"><%= t 'site.index.permalink' %></a></div>
+  <div id="permalink">
+    <a href="/" id="permalinkanchor"><%= t 'site.index.permalink' %></a><br/>
+    <a href="/" id="shortlinkanchor"><%= t 'site.index.shortlink' %></a>
+  </div>
 </div> 
 
 <div id="attribution">
@@ -52,8 +55,26 @@ if params['minlon'] and params['minlat'] and params['maxlon'] and params['maxlat
        box = true if params['box']=="yes" 
 end
 
+if params['node'] or params['way'] or params['relation']
+    object = true
+    if params['node']
+        object_type = 'node'
+        object_id = h(params['node'])
+    elsif params['way']
+        object_type = 'way'
+        object_id = h(params['way'])
+    elsif params['relation']
+        object_type = 'relation'
+        object_id = h(params['relation'])
+    end
+end
+
 # Decide on a lat lon to initialise the map with. Various ways of doing this
-if params['lon'] and params['lat'] 
+if params['lon'] and params['lat']
+       # We only want to override the default 'object = true' zoom above
+       # if we get actual GET params, as opposed to say a cookie
+       lat_lon_zoom_via_params = true
+
        lon =  h(params['lon'])
        lat =  h(params['lat'])
        zoom =  h(params['zoom'] || '5')
@@ -100,6 +121,8 @@ end
   var brokenContentSize = $("content").offsetWidth == 0;
   var marker;
   var map;
+  var obj_type = false;
+  var obj_id = false;
 
   OpenLayers.Lang.setCode("<%= I18n.locale.to_s %>");
 
@@ -120,6 +143,47 @@ end
     // IE requires Vector layers be initialised on page load, and not under deferred script conditions
     Event.observe(window, 'load', function() {addBoxToMap(bbox)});
     <%    end %>
+    <% elsif object %>
+    // Display node/way/relation on the map
+    obj_type = "<%= object_type %>";
+    obj_id = <%= object_id %>;
+    var url = "/api/<%= "#{API_VERSION}" %>/<%= object_type %>/<%= object_id %>";
+
+    if (obj_type != "node") {
+        url += "/full";
+    }
+
+    var osm_layer = new OpenLayers.Layer.GML("OSM", url, {
+        format: OpenLayers.Format.OSM,
+        projection: new OpenLayers.Projection("EPSG:4326")
+    });
+
+    osm_layer.events.register("loadend", osm_layer, function() {
+      if (this.features.length) {
+        var extent =  this.features[0].geometry.getBounds();
+          for (var i = 1; i < this.features.length; i++) {
+            extent.extend(this.features[i].geometry.getBounds());
+           }
+
+           <% unless lat_lon_zoom_via_params %>
+           if (extent) {
+             this.map.zoomToExtent(extent);
+           } else {
+             this.map.zoomToMaxExtent();
+           }
+           <% else %>
+           var center = new OpenLayers.LonLat(<%= lon %>, <%= lat %>);
+           var zoom = <%= zoom %>;
+           <% end %>
+  
+           var center = getMapCenter();
+      }
+    });
+   
+    map.addLayer(osm_layer);
+    osm_layer.loadGML();
+    osm_layer.loaded = true;
+
     <% else %>
     var centre = new OpenLayers.LonLat(<%= lon %>, <%= lat %>);
     var zoom = <%= zoom %>;
@@ -176,7 +240,7 @@ end
     var extents = getMapExtent();
     var expiry = new Date();
 
-    updatelinks(lonlat.lon, lonlat.lat, zoom, layers, extents.left, extents.bottom, extents.right, extents.top);
+    updatelinks(lonlat.lon, lonlat.lat, zoom, layers, extents.left, extents.bottom, extents.right, extents.top, obj_type, obj_id);
 
     expiry.setYear(expiry.getFullYear() + 10); 
     document.cookie = "_osm_location=" + lonlat.lon + "|" + lonlat.lat + "|" + zoom + "|" + layers + "; expires=" + expiry.toGMTString();