From 3cd48f751e16bce33cf14f1a8fdeb809fea7c904 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 11 Sep 2013 12:14:18 +1000 Subject: [PATCH] Redid places/show using the all-javascript method. Moved JSON for "what's here?" from members/index to places/index -- we can improve this later if we want to show things other than members. --- app/assets/javascripts/places.js.erb | 57 ++++++++++++++++++--------- app/controllers/members_controller.rb | 1 - app/controllers/places_controller.rb | 3 ++ app/views/places/show.html.haml | 18 --------- 4 files changed, 42 insertions(+), 37 deletions(-) diff --git a/app/assets/javascripts/places.js.erb b/app/assets/javascripts/places.js.erb index f99ab4682..a31aad016 100644 --- a/app/assets/javascripts/places.js.erb +++ b/app/assets/javascripts/places.js.erb @@ -1,21 +1,42 @@ -map = L.map('map').setView([0.0, -0.0], 2); -L.tileLayer("http://{s}.tile.cloudmade.com/<%= ENV['CLOUDMADE_KEY'] %>/997/256/{z}/{x}/{y}.png", { - attribution: 'Map data © OpenStreetMap contributors under ODbL | Imagery © Cloudmade', - maxZoom: 18 -}).addTo(map); -markers = new L.MarkerClusterGroup(); +places_base_path = "/places" +things_to_map = location.pathname + '.json' -$.getJSON('/members.json', function(members) { - $.each(members, function(i, m) { - if (m.latitude && m.longitude) { - marker = new L.Marker(new L.LatLng(m.latitude, m.longitude)); - link = "

" + m.login_name + "

"; - where = "

" + m.location + "

"; - marker.bindPopup(link + where).openPopup(); - markers.addLayer(marker); - } +if (location.pathname == places_base_path) { //places index page + map = L.map('map').setView([0.0, -0.0], 2); + showMap(map); +} else { // specific place page + place = location.pathname.replace(places_base_path + "/", ''); + nominatim_query_url = 'http://nominatim.openstreetmap.org/search/' + place; + nominatim_options = { + format: "json", + callback: "placeholder", + limit: 1, + email: "<%= Growstuff::Application.config.user_agent_email %>" + }; + $.getJSON(nominatim_query_url, nominatim_options, function(data) { + map = L.map('map').setView([data[0].lat, data[0].lon], 5); + showMap(map); + }) +} + +function showMap(map) { + L.tileLayer("http://{s}.tile.cloudmade.com/<%= ENV['CLOUDMADE_KEY'] %>/997/256/{z}/{x}/{y}.png", { + attribution: 'Map data © OpenStreetMap contributors under ODbL | Imagery © Cloudmade', + maxZoom: 18 + }).addTo(map); + markers = new L.MarkerClusterGroup(); + + $.getJSON(things_to_map, function(members) { + $.each(members, function(i, m) { + if (m.latitude && m.longitude) { + marker = new L.Marker(new L.LatLng(m.latitude, m.longitude)); + link = "

" + m.login_name + "

"; + where = "

" + m.location + "

"; + marker.bindPopup(link + where).openPopup(); + markers.addLayer(marker); + } + }); }); -}); - -map.addLayer(markers); + map.addLayer(markers); +} diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 202e75e0c..ab3de0001 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -10,7 +10,6 @@ class MembersController < ApplicationController respond_to do |format| format.html # index.html.haml - format.json { render :json => Member.all.to_json(:only => [:id, :login_name, :location, :latitude, :longitude]) } end end diff --git a/app/controllers/places_controller.rb b/app/controllers/places_controller.rb index 3603dda3b..707319a5c 100644 --- a/app/controllers/places_controller.rb +++ b/app/controllers/places_controller.rb @@ -4,6 +4,8 @@ class PlacesController < ApplicationController def index respond_to do |format| format.html + # json response is whatever we want to map here + format.json { render :json => Member.all.to_json(:only => [:id, :login_name, :location, :latitude, :longitude]) } end end @@ -47,6 +49,7 @@ class PlacesController < ApplicationController respond_to do |format| format.html # show.html.haml + format.json { render :json => @nearby_members.to_json(:only => [:id, :login_name, :location, :latitude, :longitude]) } end end diff --git a/app/views/places/show.html.haml b/app/views/places/show.html.haml index 4a52bb829..3283f9e11 100644 --- a/app/views/places/show.html.haml +++ b/app/views/places/show.html.haml @@ -1,25 +1,7 @@ -content_for :title, @place - - %div#map{ :style => "height:300px"} -- attribution = render(:partial => 'map_attribution').gsub(/\n/, " ") -:javascript - map = L.map('map').setView([#{ @latitude }, #{ @longitude }]).fitBounds([ [#{@sw_lat}, #{@sw_lng}], [#{@ne_lat}, #{@ne_lng}] ]); - L.tileLayer("http://{s}.tile.cloudmade.com/#{ ENV['CLOUDMADE_KEY'] }/997/256/{z}/{x}/{y}.png", { - attribution: '#{ attribution }', - maxZoom: 18 - }).addTo(map); - -- Member.located.each do |m| - - popup = render :partial => 'members/popover', :locals => { :member => m } - - popup = escape_javascript(popup).gsub(/\\\//, "/") - :javascript - marker = new L.Marker(new L.LatLng(#{m.latitude}, #{m.longitude})); - marker.bindPopup('

#{link_to m, m}

#{ popup }').openPopup(); - map.addLayer(marker); - %h3 = Growstuff::Application.config.site_name members near #{@place}