From 48929e8781f9c136a142400a7a2ef1cf994f74fd Mon Sep 17 00:00:00 2001 From: Mikel Maron Date: Sat, 30 Apr 2011 15:07:47 -0500 Subject: [PATCH 1/1] Add a map to the changeset list page Add a map to the changeset list page, with a bounding box for each changeset and highighting when the mouse is placed over either a box on the map or a row of the table. --- app/controllers/changeset_controller.rb | 2 + app/views/changeset/_changeset.html.erb | 14 ++-- .../changeset/_changeset_map_add.html.erb | 8 ++ app/views/changeset/_map.html.erb | 74 +++++++++++++++++++ app/views/changeset/list.html.erb | 1 + public/javascripts/map.js | 14 +++- public/stylesheets/common.css | 13 ++++ 7 files changed, 116 insertions(+), 10 deletions(-) create mode 100644 app/views/changeset/_changeset_map_add.html.erb create mode 100644 app/views/changeset/_map.html.erb diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index 5a4dc36fb..0aeaf200d 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -312,6 +312,8 @@ class ChangesetController < ApplicationController @page = (params[:page] || 1).to_i @page_size = 20 + @bbox = bbox + @edits = Changeset.find(:all, :include => [:user, :changeset_tags], :conditions => conditions, diff --git a/app/views/changeset/_changeset.html.erb b/app/views/changeset/_changeset.html.erb index 33d8cf129..2ba88b756 100644 --- a/app/views/changeset/_changeset.html.erb +++ b/app/views/changeset/_changeset.html.erb @@ -1,7 +1,7 @@ - - <% cl = cycle('table0', 'table1') %> +<% cl = cycle('table0', 'table1') %> + - + <%= id_link = link_to(changeset.id, {:controller => 'browse', :action => 'changeset', :id => changeset.id}, @@ -10,14 +10,14 @@ %> - + <% if changeset.closed_at > DateTime.now %> <%= t'changeset.changeset.still_editing' %> <% else %><%= l changeset.closed_at, :format => :long %><% end %> <%if showusername %> - + <% if changeset.user.data_public? %> <%= link_to h(changeset.user.display_name), :controller => "changeset", :action => "list", :display_name => changeset.user.display_name %> <% else %> @@ -26,7 +26,7 @@ <% end %> - + <% if changeset.tags['comment'].to_s != '' %> <%= linkify(h(changeset.tags['comment'])) %> <% else %> @@ -34,7 +34,7 @@ <% end %> - + <% if changeset.min_lat.nil? %> <%= t'changeset.changeset.no_edits' %> <% else %> diff --git a/app/views/changeset/_changeset_map_add.html.erb b/app/views/changeset/_changeset_map_add.html.erb new file mode 100644 index 000000000..924408153 --- /dev/null +++ b/app/views/changeset/_changeset_map_add.html.erb @@ -0,0 +1,8 @@ + var minlon = <%= changeset_map_add.min_lon / GeoRecord::SCALE.to_f %>; + var minlat = <%= changeset_map_add.min_lat / GeoRecord::SCALE.to_f %>; + var maxlon = <%= changeset_map_add.max_lon / GeoRecord::SCALE.to_f %>; + var maxlat = <%= changeset_map_add.max_lat / GeoRecord::SCALE.to_f %>; + var bbox = new OpenLayers.Bounds(minlon, minlat, maxlon, maxlat); + + bounds.extend(bbox); + box = addBoxToMap(bbox, {name: "changeset-<%= changeset_map_add.id %>"}, true); diff --git a/app/views/changeset/_map.html.erb b/app/views/changeset/_map.html.erb new file mode 100644 index 000000000..ddfac9f54 --- /dev/null +++ b/app/views/changeset/_map.html.erb @@ -0,0 +1,74 @@ +<%= javascript_include_tag '/openlayers/OpenLayers.js' %> +<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %> +<%= javascript_include_tag 'map.js' %> +
+
+
+ <%= t 'browse.map.loading' %> +
+ diff --git a/app/views/changeset/list.html.erb b/app/views/changeset/list.html.erb index 0333be5cc..4ec450c2c 100644 --- a/app/views/changeset/list.html.erb +++ b/app/views/changeset/list.html.erb @@ -1,6 +1,7 @@

<%= @heading %>

<%= @description %>

+<%= render :partial => 'map' %> <%= render :partial => 'changeset_paging_nav' %> <%= render :partial => 'changesets', :locals => { :showusername => !params.has_key?(:display_name) } %> <%= render :partial => 'changeset_paging_nav' %> diff --git a/public/javascripts/map.js b/public/javascripts/map.js index 090d4abc2..df9d30992 100644 --- a/public/javascripts/map.js +++ b/public/javascripts/map.js @@ -149,7 +149,7 @@ function addObjectToMap(url, zoom, callback) { layer.loadGML(); } -function addBoxToMap(boxbounds) { +function addBoxToMap(boxbounds, attributes, line) { if (!vectors) { // Be aware that IE requires Vector layers be initialised on page load, and not under deferred script conditions vectors = new OpenLayers.Layer.Vector("Boxes", { @@ -157,8 +157,16 @@ function addBoxToMap(boxbounds) { }); map.addLayer(vectors); } - var geometry = boxbounds.toGeometry().transform(epsg4326, map.getProjectionObject()); - var box = new OpenLayers.Feature.Vector(geometry, {}, { + + var geometry; + if (line) { + vertices = boxbounds.toGeometry().getVertices(); + vertices.push( new OpenLayers.Geometry.Point( vertices[0].x, vertices[0].y ) ); + geometry = new OpenLayers.Geometry.LineString(vertices).transform(epsg4326, map.getProjectionObject()); + } else { + geometry = boxbounds.toGeometry().transform(epsg4326, map.getProjectionObject()); + } + var box = new OpenLayers.Feature.Vector(geometry, attributes, { strokeWidth: 2, strokeColor: '#ee9900', fillOpacity: 0 diff --git a/public/stylesheets/common.css b/public/stylesheets/common.css index 6bc9666b2..098a9ddd9 100644 --- a/public/stylesheets/common.css +++ b/public/stylesheets/common.css @@ -633,6 +633,19 @@ hr { border: solid 1px black; } +#browse_map_changeset { + float: right; + width: 100%; + text-align: right; + margin-left: 10px; +} + +#browse_map_changeset #small_map { + width: 100%; + height: 315px; + border: solid 1px black; +} + /* Rules for the trace list shown by the traces tab etc */ #trace_list { -- 2.43.2