Fix display of browsed objects on map
authorJohn Firebaugh <john.firebaugh@gmail.com>
Sat, 28 Sep 2013 22:59:48 +0000 (15:59 -0700)
committerJohn Firebaugh <john.firebaugh@gmail.com>
Sun, 13 Oct 2013 21:45:58 +0000 (14:45 -0700)
app/assets/javascripts/browse.js [deleted file]
app/assets/javascripts/index.js
app/assets/javascripts/leaflet.extend.js.erb
app/assets/javascripts/osm.js.erb
app/views/browse/_map.html.erb [deleted file]
app/views/site/_id.html.erb
vendor/assets/leaflet/leaflet.osm.js

diff --git a/app/assets/javascripts/browse.js b/app/assets/javascripts/browse.js
deleted file mode 100644 (file)
index d51b1c1..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-$(document).ready(function () {
-
-  var map = L.map("small_map", {
-    attributionControl: false,
-    zoomControl: false
-  }).addLayer(new L.OSM.Mapnik());
-
-  L.OSM.zoom()
-    .addTo(map);
-
-  var params = $("#small_map").data();
-  var object, bbox;
-  if (params.type == "changeset") {
-    bbox = L.latLngBounds([params.minlat, params.minlon],
-        [params.maxlat, params.maxlon]);
-
-    map.fitBounds(bbox);
-
-    L.rectangle(bbox, {
-      weight: 2,
-      color: '#e90',
-      fillOpacity: 0
-    }).addTo(map);
-
-    $("#loading").hide();
-
-    $("a[data-editor=remote]").click(function () {
-      return remoteEditHandler(bbox);
-    });
-
-    updatelinks(map.getCenter(), 16, null, [[params.minlat, params.minlon],
-        [params.maxlat, params.maxlon]]);
-  } else if (params.type == "note") {
-    object = {type: params.type, id: params.id};
-
-    map.setView([params.lat, params.lon], 16);
-
-    L.marker([params.lat, params.lon], { icon: getUserIcon() }).addTo(map);
-
-    bbox = map.getBounds();
-
-    $("#loading").hide();
-
-    $("a[data-editor=remote]").click(function () {
-      return remoteEditHandler(bbox);
-    });
-
-    updatelinks(params, 16, null, bbox, object);
-  } else {
-    $("#object_larger_map, #object_edit").hide();
-
-    object = {type: params.type, id: params.id};
-
-    if (!params.visible) {
-      object.version = params.version - 1;
-    }
-
-    map.addObject(object, {
-      zoom: true,
-      callback: function(extent) {
-        $("#loading").hide();
-
-        if (extent && extent.isValid()) {
-          $("#browse_map .secondary-actions").show();
-
-          $("a.bbox[data-editor=remote]").click(function () {
-            return remoteEditHandler(extent);
-          });
-
-          $("a.object[data-editor=remote]").click(function () {
-            return remoteEditHandler(extent, params.type + params.id);
-          });
-
-          $("#object_larger_map").show();
-          $("#object_edit").show();
-
-          updatelinks(map.getCenter(), 16, null, extent, object);
-        }
-      }
-    });
-  }
-});
index dff433a8a3e190fed06600a2394c1df09b1f7a8a..ef553f328253937ae8897ecf61f53405c08f7505 100644 (file)
@@ -158,14 +158,6 @@ $(document).ready(function () {
     }
   }
 
-  if (params.box) {
-    L.rectangle(params.box, {
-      weight: 2,
-      color: '#e90',
-      fillOpacity: 0
-    }).addTo(map);
-  }
-
   if (params.marker) {
     marker.setLatLng([params.mlat, params.mlon]).addTo(map);
   }
index 0ab0ffacec1b9614ef77ea34e3f287e29a5349ac..cec25081b8b463b617c9f11638fa3e7e6ad74150 100644 (file)
@@ -122,7 +122,12 @@ L.extend(L.Map.prototype, {
           styles: {
             node: options.style,
             way: options.style,
-            area: options.style
+            area: options.style,
+            changeset: {
+              weight: 2,
+              color: '#e90',
+              fillOpacity: 0
+            }
           }
         });
 
index 5c555a25ac9e37908bace402cf5673d95387d108..a3022f9ae905598e165918b9f11042be92f6cba4 100644 (file)
@@ -12,7 +12,7 @@ OSM = {
   apiUrl: function (object) {
     var url = "/api/" + OSM.API_VERSION + "/" + object.type + "/" + object.id;
 
-    if (object.type != "node") {
+    if (object.type === "way" || object.type === "relation") {
       url += "/full";
     } else if (object.version) {
       url += "/" + object.version;
@@ -38,7 +38,7 @@ OSM = {
   },
 
   mapParams: function (search) {
-    var params = OSM.params(search), mapParams = {}, bounds, loc;
+    var params = OSM.params(search), mapParams = {}, bounds, loc, match;
 
     if (params.mlon && params.mlat) {
       mapParams.marker = true;
@@ -46,7 +46,11 @@ OSM = {
       mapParams.mlat = parseFloat(params.mlat);
     }
 
-    if (params.node || params.way || params.relation) {
+    match = window.location.pathname.match(/\/browse\/(node|way|relation|changeset)\/(\d+)/);
+    if (match) {
+      mapParams.object_zoom = true;
+      mapParams.object = {type: match[1], id: parseInt(match[2])};
+    } else if (params.node || params.way || params.relation || params.note) {
       mapParams.object_zoom = true;
 
       if (params.node) {
@@ -58,6 +62,13 @@ OSM = {
       }
     }
 
+    match = window.location.pathname.match(/\/browse\/note\/(\d+)/);
+    if (match) {
+      mapParams.note = parseInt(match[1]);
+    } else if (params.note) {
+      mapParams.note = parseInt(params.note);
+    }
+
     if (params.bbox) {
       params.bbox = params.bbox.split(',');
       bounds = L.latLngBounds(
@@ -73,10 +84,6 @@ OSM = {
          parseFloat(params.maxlon)]);
     }
 
-    if (params.box === 'yes') {
-      mapParams.box = bounds;
-    }
-
     var hash = OSM.parseHash(location.hash);
 
     // Decide on a map starting position. Various ways of doing this.
@@ -123,10 +130,6 @@ OSM = {
 
     mapParams.layers = hash.layers || (loc && loc[3]) || '';
 
-    if (params.note) {
-      mapParams.note = parseInt(params.note);
-    }
-
     var scale = parseFloat(params.scale);
     if (scale > 0) {
       mapParams.zoom = Math.log(360.0 / (scale * 512.0)) / Math.log(2.0);
diff --git a/app/views/browse/_map.html.erb b/app/views/browse/_map.html.erb
deleted file mode 100644 (file)
index ed70366..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<div id="browse_map" class='clearfix content_map'>
-  <% if map.instance_of? Changeset or (map.instance_of? Node and map.version > 1) or map.visible? %>
-
-  <% content_for :head do %>
-    <%= javascript_include_tag "browse" %>
-  <% end %>
-
-  <%
-     if map.instance_of? Changeset
-       bbox = map.bbox.to_unscaled
-       data = {
-         :type   => "changeset",
-         :id     => map.id,
-         :minlon => bbox.min_lon,
-         :minlat => bbox.min_lat,
-         :maxlon => bbox.max_lon,
-         :maxlat => bbox.max_lat
-       }
-     elsif map.instance_of? Note
-       data = {
-         :type => "note",
-         :id   => map.id,
-         :lon  => map.lon,
-         :lat  => map.lat
-       }
-     else
-       data = {
-         :type    => map.class.name.downcase,
-         :id      => map.id,
-         :version => map.version,
-         :visible => map.visible
-       }
-     end
-  %>
-  <%= content_tag "div", "", :id => "small_map", :data => data %>
-  <span id="loading"><%= t 'browse.map.loading' %></span>
-
-  <ul class='secondary-actions clearfix'>
-    <li>
-      <% if map.instance_of? Note -%>
-        <%= link_to t("browse.map.larger.area"),
-                    root_path(:notes => "yes"),
-                    :id => "area_larger_map",
-                    :class => "geolink bbox" %>
-      <% else -%>
-        <%= link_to t("browse.map.larger.area"),
-                    root_path(:box => "yes"),
-                    :id => "area_larger_map",
-                    :class => "geolink bbox" %>
-      <% end -%>
-    </li>
-    <li>
-      <%= render :partial => 'layouts/edit_menu',
-                 :locals => { :link_text => t("browse.map.edit.area"),
-                              :link_class => 'bbox' } %>
-    </li>
-  </ul>
-
-  <% unless map.instance_of? Changeset %>
-  <ul class='secondary-actions clearfix'>
-    <li>
-      <%= link_to t("browse.map.larger." + map.class.to_s.downcase),
-                  root_path,
-                  :id => "object_larger_map",
-                  :class => "geolink object" %>
-    </li>
-    <li>
-      <%= render :partial => 'layouts/edit_menu',
-                 :locals => { :link_text => t("browse.map.edit." + map.class.to_s.downcase),
-                              :link_class => 'object' } %>
-    </li>
-  </ul>
-  <% end %>
-
-  <% else %>
-    <%= t 'browse.map.deleted' %>
-  <% end %>
-</div>
index 059009a0c9af07c535e5d3e97411d4a55d509c73..195873c34c30194cf9491c0989691aaae6ae076d 100644 (file)
@@ -6,7 +6,9 @@
     var params = {};
 
     var mapParams = OSM.mapParams();
-    if (mapParams.object) {
+    if (mapParams.object &&
+        mapParams.object.type !== 'note' &&
+        mapParams.object.type !== 'changeset') {
       params.id = mapParams.object.type[0] + mapParams.object.id;
     } else {
 <% if @lat && @lon -%>
index 144dfbfa084135f354aa21f0ea7969e2fa170542..4f8c9e23078548dc62b404faa1c0be116aecb3db 100644 (file)
@@ -73,7 +73,9 @@ L.OSM.DataLayer = L.FeatureGroup.extend({
     for (var i = 0; i < features.length; i++) {
       var feature = features[i], layer;
 
-      if (feature.type === "node") {
+      if (feature.type === "changeset") {
+        layer = L.rectangle(feature.latLngBounds, this.options.styles.changeset);
+      } else if (feature.type === "node") {
         layer = L.circleMarker(feature.latLng, this.options.styles.node);
       } else {
         var latLngs = new Array(feature.nodes.length);
@@ -96,7 +98,7 @@ L.OSM.DataLayer = L.FeatureGroup.extend({
   },
 
   buildFeatures: function (xml) {
-    var features = [],
+    var features = L.OSM.getChangesets(xml),
       nodes = L.OSM.getNodes(xml),
       ways = L.OSM.getWays(xml, nodes),
       relations = L.OSM.getRelations(xml, nodes, ways);
@@ -160,6 +162,25 @@ L.OSM.DataLayer = L.FeatureGroup.extend({
 });
 
 L.Util.extend(L.OSM, {
+  getChangesets: function (xml) {
+    var result = [];
+
+    var nodes = xml.getElementsByTagName("changeset");
+    for (var i = 0; i < nodes.length; i++) {
+      var node = nodes[i], id = node.getAttribute("id");
+      result.push({
+        id: id,
+        type: "changeset",
+        latLngBounds: L.latLngBounds(
+          [node.getAttribute("min_lat"), node.getAttribute("min_lon")],
+          [node.getAttribute("max_lat"), node.getAttribute("max_lon")]),
+        tags: this.getTags(node)
+      });
+    }
+
+    return result;
+  },
+
   getNodes: function (xml) {
     var result = {};