From 40ae7ac254d35ad94cc9b3d43308e3ccd2205b58 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Tue, 9 Aug 2011 12:22:00 +0100 Subject: Allow dragging of new report marker. --- web/js/map-OpenLayers.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'web/js/map-OpenLayers.js') diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index d00079517..5b749fc44 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -98,6 +98,14 @@ function fixmystreet_onload() { var select = new OpenLayers.Control.SelectFeature( fixmystreet.markers ); fixmystreet.map.addControl( select ); select.activate(); + } else if (fixmystreet.page == 'new') { + var drag = new OpenLayers.Control.DragFeature( fixmystreet.markers, { + onComplete: function(feature, e) { + fixmystreet_update_pin( feature.geometry.clone() ); + } + } ); + fixmystreet.map.addControl( drag ); + drag.activate(); } fixmystreet.map.addLayer(fixmystreet.markers); @@ -281,12 +289,7 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { if (fixmystreet.page == 'new') { fixmystreet.markers.features[0].move(lonlat); } - lonlat.transform( - fixmystreet.map.getProjectionObject(), - new OpenLayers.Projection("EPSG:4326") - ); - document.getElementById('fixmystreet.latitude').value = lonlat.lat; - document.getElementById('fixmystreet.longitude').value = lonlat.lon; + fixmystreet_update_pin(lonlat); if (fixmystreet.page == 'new') { return; } @@ -294,3 +297,13 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { } }); +// This function might be passed either an OpenLayers.LonLat (so has +// lon and lat) or an OpenLayers.Geometry.Point (so has x and y) +function fixmystreet_update_pin(lonlat) { + lonlat.transform( + fixmystreet.map.getProjectionObject(), + new OpenLayers.Projection("EPSG:4326") + ); + document.getElementById('fixmystreet.latitude').value = lonlat.lat || lonlat.y; + document.getElementById('fixmystreet.longitude').value = lonlat.lon || lonlat.x; +} -- cgit v1.2.3 From 4cdf8b0c15052fd06d811137dda52e3bac65028e Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Tue, 9 Aug 2011 14:46:50 +0100 Subject: Move JS to where it'll work when run, to fix #145. --- web/js/map-OpenLayers.js | 94 ++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 47 deletions(-) (limited to 'web/js/map-OpenLayers.js') diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index 5b749fc44..f8bd9c31e 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -113,6 +113,53 @@ function fixmystreet_onload() { var bounds = fixmystreet.markers.getDataExtent(); if (bounds) { fixmystreet.map.zoomToExtent( bounds ); } } + + $('#hide_pins_link').click(function(e) { + e.preventDefault(); + var showhide = [ + 'Show pins', 'Hide pins', + 'Dangos pinnau', 'Cuddio pinnau', + "Vis nåler", "Gjem nåler" + ]; + for (var i=0; i Date: Wed, 17 Aug 2011 13:21:14 +0100 Subject: When on around page with JS, have click on map show hidden form and fetch category/council. --- web/js/map-OpenLayers.js | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'web/js/map-OpenLayers.js') diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index f8bd9c31e..eb6873ba6 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -79,7 +79,8 @@ function fixmystreet_onload() { }) }; if (fixmystreet.page == 'around') { - pin_layer_options.strategies = [ new OpenLayers.Strategy.BBOX() ]; + fixmystreet.bbox_strategy = new OpenLayers.Strategy.BBOX(); + pin_layer_options.strategies = [ fixmystreet.bbox_strategy ]; pin_layer_options.protocol = new OpenLayers.Protocol.HTTP({ url: '/ajax', params: fixmystreet.all_pins ? { all_pins: 1 } : { }, @@ -92,20 +93,16 @@ function fixmystreet_onload() { fixmystreet.markers.addFeatures( markers ); if (fixmystreet.page == 'around' || fixmystreet.page == 'reports' || fixmystreet.page == 'my') { fixmystreet.markers.events.register( 'featureselected', fixmystreet.markers, function(evt) { - window.location = '/report/' + evt.feature.attributes.id; + if (evt.feature.attributes.id) { + window.location = '/report/' + evt.feature.attributes.id; + } OpenLayers.Event.stop(evt); }); var select = new OpenLayers.Control.SelectFeature( fixmystreet.markers ); fixmystreet.map.addControl( select ); select.activate(); } else if (fixmystreet.page == 'new') { - var drag = new OpenLayers.Control.DragFeature( fixmystreet.markers, { - onComplete: function(feature, e) { - fixmystreet_update_pin( feature.geometry.clone() ); - } - } ); - fixmystreet.map.addControl( drag ); - drag.activate(); + fixmystreet_activate_drag(); } fixmystreet.map.addLayer(fixmystreet.markers); @@ -287,13 +284,29 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { trigger: function(e) { var lonlat = fixmystreet.map.getLonLatFromViewPortPx(e.xy); if (fixmystreet.page == 'new') { + /* Already have a purple pin */ fixmystreet.markers.features[0].move(lonlat); + } else { + var markers = fms_markers_list( [ [ lonlat.lat, lonlat.lon, 'purple' ] ], false ); + fixmystreet.markers.removeAllFeatures(); + fixmystreet.markers.addFeatures( markers ); + fixmystreet_activate_drag(); + fixmystreet.bbox_strategy.deactivate(); } fixmystreet_update_pin(lonlat); if (fixmystreet.page == 'new') { return; } - document.getElementById('mapForm').submit(); + $.getJSON('/report/new/ajax', { + latitude: $('#fixmystreet\\.latitude').val(), + longitude: $('#fixmystreet\\.longitude').val() + }, function(data) { + $('#councils_text').html(data.councils_text); + $('#form_category_row').html(data.category); + }); + $('#side-form').show('slow'); + $('#side').hide('slow'); + fixmystreet.page = 'new'; } }); @@ -307,3 +320,14 @@ function fixmystreet_update_pin(lonlat) { document.getElementById('fixmystreet.latitude').value = lonlat.lat || lonlat.y; document.getElementById('fixmystreet.longitude').value = lonlat.lon || lonlat.x; } + +function fixmystreet_activate_drag() { + var drag = new OpenLayers.Control.DragFeature( fixmystreet.markers, { + onComplete: function(feature, e) { + fixmystreet_update_pin( feature.geometry.clone() ); + } + } ); + fixmystreet.map.addControl( drag ); + drag.activate(); +} + -- cgit v1.2.3 From 723b9e94ab6057e80a66adbc0d0e2fb315e59f79 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Wed, 17 Aug 2011 14:14:57 +0100 Subject: Don't need animation, used for testing. --- web/js/map-OpenLayers.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'web/js/map-OpenLayers.js') diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index eb6873ba6..2e6c77f12 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -304,8 +304,8 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { $('#councils_text').html(data.councils_text); $('#form_category_row').html(data.category); }); - $('#side-form').show('slow'); - $('#side').hide('slow'); + $('#side-form').show(); + $('#side').hide(); fixmystreet.page = 'new'; } }); -- cgit v1.2.3 From f38b8e985697c35a62374a2f02dce2d681ef58cd Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Wed, 17 Aug 2011 19:35:03 +0100 Subject: Stop back button breakage. --- web/js/map-OpenLayers.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'web/js/map-OpenLayers.js') diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index 2e6c77f12..d3914a128 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -41,6 +41,17 @@ $(function(){ return false; }); + $(window).hashchange(function(){ + if (location.hash) return; + // Okay, back to around view. + fixmystreet.bbox_strategy.activate(); + fixmystreet.markers.refresh( { force: true } ); + fixmystreet.drag.deactivate(); + $('#side-form').hide(); + $('#side').show(); + fixmystreet.page = 'around'; + }); + // Vector layers must be added onload as IE sucks if ($.browser.msie) { $(window).load(fixmystreet_onload); @@ -288,10 +299,10 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { fixmystreet.markers.features[0].move(lonlat); } else { var markers = fms_markers_list( [ [ lonlat.lat, lonlat.lon, 'purple' ] ], false ); + fixmystreet.bbox_strategy.deactivate(); fixmystreet.markers.removeAllFeatures(); fixmystreet.markers.addFeatures( markers ); fixmystreet_activate_drag(); - fixmystreet.bbox_strategy.deactivate(); } fixmystreet_update_pin(lonlat); if (fixmystreet.page == 'new') { @@ -307,6 +318,7 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { $('#side-form').show(); $('#side').hide(); fixmystreet.page = 'new'; + location.hash = 'report'; } }); @@ -322,12 +334,12 @@ function fixmystreet_update_pin(lonlat) { } function fixmystreet_activate_drag() { - var drag = new OpenLayers.Control.DragFeature( fixmystreet.markers, { + fixmystreet.drag = new OpenLayers.Control.DragFeature( fixmystreet.markers, { onComplete: function(feature, e) { fixmystreet_update_pin( feature.geometry.clone() ); } } ); - fixmystreet.map.addControl( drag ); - drag.activate(); + fixmystreet.map.addControl( fixmystreet.drag ); + fixmystreet.drag.activate(); } -- cgit v1.2.3