diff options
author | Zarino Zappia <mail@zarino.co.uk> | 2016-06-20 17:08:25 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-07-11 15:15:36 +0100 |
commit | 898a64596ae5be52c94663ddead42641f903c4cd (patch) | |
tree | bed4d5fe6416e92119953a1f029242da79c37eb0 /web/js/map-google.js | |
parent | 8badf396faf199eec72b7b0c1790e055d23c3971 (diff) |
Move to using pushState for new report.
Update the URL whenever location of pin is updated (first time, drag, or
reclick), make sure it works when clicking back.
Diffstat (limited to 'web/js/map-google.js')
-rw-r--r-- | web/js/map-google.js | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/web/js/map-google.js b/web/js/map-google.js index fa2b6d90e..4c3f6188e 100644 --- a/web/js/map-google.js +++ b/web/js/map-google.js @@ -11,11 +11,21 @@ fixmystreet.maps = {}; (function() { fixmystreet.maps.update_pin = function(lonlat) { - document.getElementById('fixmystreet.latitude').value = lonlat.lat(); - document.getElementById('fixmystreet.longitude').value = lonlat.lng(); + var lat = lonlat.lat(); + var lon = lonlat.lng(); + document.getElementById('fixmystreet.latitude').value = lat; + document.getElementById('fixmystreet.longitude').value = lon; + return { + 'url': { 'lon': lon, 'lat': lat }, + 'state': { 'lon': lon, 'lat': lat } + }; }; fixmystreet.maps.begin_report = function(lonlat) { + if (typeof lonlat.lat !== 'function') { + lonlat = new google.maps.LatLng(lonlat.lat, lonlat.lon); + } + if (fixmystreet.page == 'new') { /* Already have a pin */ fixmystreet.report_marker.setPosition(lonlat); @@ -35,6 +45,15 @@ fixmystreet.maps = {}; fixmystreet.markers[m].setMap(null); } } + return lonlat; + }; + + fixmystreet.maps.display_around = function() { + if (fixmystreet.report_marker) { + fixmystreet.report_marker.setMap(null); + } + fixmystreet.event_update_map = google.maps.event.addListener(fixmystreet.map, 'idle', update_pins); + google.maps.event.trigger(fixmystreet.map, 'idle'); }; function PaddingControl(div) { @@ -81,6 +100,11 @@ fixmystreet.maps = {}; } function map_clicked(e) { + if ($('.js-back-to-report-list').length) { + $('.js-back-to-report-list').trigger('click'); + return true; + } + var lonlat = e.latLng; fixmystreet.display.begin_report(lonlat); } @@ -148,28 +172,6 @@ fixmystreet.maps = {}; var l = google.maps.event.addListener(fixmystreet.map, 'click', map_clicked); } - $(window).hashchange(function(){ - if (location.hash && location.hash != '#') { - return; - } - - // Okay, back to around view. - fixmystreet.report_marker.setMap(null); - fixmystreet.event_update_map = google.maps.event.addListener(fixmystreet.map, 'idle', update_pins); - google.maps.event.trigger(fixmystreet.map, 'idle'); - if ( fixmystreet.state_pins_were_hidden ) { - // If we had pins hidden when we clicked map (which had to show the pin layer as I'm doing it in one layer), hide them again. - $('#hide_pins_link').click(); - } - $('#side-form').hide(); - $('#side').show(); - $('#sub_map_links').show(); - //only on mobile - $('#mob_sub_map_links').remove(); - $('.mobile-map-banner').html('<a href="/">' + translation_strings.home + '</a> ' + translation_strings.place_pin_on_map); - fixmystreet.page = 'around'; - }); - if ( fixmystreet.area.length ) { for (var i=0; i<fixmystreet.area.length; i++) { var args = { |