From 99775524b35017256203903962990c9dd212dbb4 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Sat, 28 Sep 2013 15:59:48 -0700 Subject: [PATCH] Fix display of browsed objects on map --- app/assets/javascripts/browse.js | 82 -------------------- app/assets/javascripts/index.js | 8 -- app/assets/javascripts/leaflet.extend.js.erb | 7 +- app/assets/javascripts/osm.js.erb | 25 +++--- app/views/browse/_map.html.erb | 78 ------------------- app/views/site/_id.html.erb | 4 +- vendor/assets/leaflet/leaflet.osm.js | 25 +++++- 7 files changed, 46 insertions(+), 183 deletions(-) delete mode 100644 app/assets/javascripts/browse.js delete mode 100644 app/views/browse/_map.html.erb diff --git a/app/assets/javascripts/browse.js b/app/assets/javascripts/browse.js deleted file mode 100644 index d51b1c1a9..000000000 --- a/app/assets/javascripts/browse.js +++ /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); - } - } - }); - } -}); diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index dff433a8a..ef553f328 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -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); } diff --git a/app/assets/javascripts/leaflet.extend.js.erb b/app/assets/javascripts/leaflet.extend.js.erb index 0ab0fface..cec25081b 100644 --- a/app/assets/javascripts/leaflet.extend.js.erb +++ b/app/assets/javascripts/leaflet.extend.js.erb @@ -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 + } } }); diff --git a/app/assets/javascripts/osm.js.erb b/app/assets/javascripts/osm.js.erb index 5c555a25a..a3022f9ae 100644 --- a/app/assets/javascripts/osm.js.erb +++ b/app/assets/javascripts/osm.js.erb @@ -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 index ed703665d..000000000 --- a/app/views/browse/_map.html.erb +++ /dev/null @@ -1,78 +0,0 @@ -
- <% 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 %> - <%= t 'browse.map.loading' %> - - - - <% unless map.instance_of? Changeset %> - - <% end %> - - <% else %> - <%= t 'browse.map.deleted' %> - <% end %> -
diff --git a/app/views/site/_id.html.erb b/app/views/site/_id.html.erb index 059009a0c..195873c34 100644 --- a/app/views/site/_id.html.erb +++ b/app/views/site/_id.html.erb @@ -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 -%> diff --git a/vendor/assets/leaflet/leaflet.osm.js b/vendor/assets/leaflet/leaflet.osm.js index 144dfbfa0..4f8c9e230 100644 --- a/vendor/assets/leaflet/leaflet.osm.js +++ b/vendor/assets/leaflet/leaflet.osm.js @@ -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 = {}; -- 2.43.2