diff options
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin.pm | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Reports.pm | 3 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/Problem.pm | 1 | ||||
-rw-r--r-- | templates/web/base/maps/pin.html | 1 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/map.js | 6 | ||||
-rw-r--r-- | web/js/map-OpenLayers.js | 14 |
8 files changed, 22 insertions, 7 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm index c77e5ccac..a513ea33c 100644 --- a/perllib/FixMyStreet/App/Controller/Admin.pm +++ b/perllib/FixMyStreet/App/Controller/Admin.pm @@ -834,6 +834,7 @@ sub report_edit_display : Private { longitude => $problem->longitude, colour => $c->cobrand->pin_colour($problem, 'admin'), type => 'big', + draggable => 1, } ] : [], print_report => 1, diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm index a4a726c51..e285687bc 100644 --- a/perllib/FixMyStreet/App/Controller/Report.pm +++ b/perllib/FixMyStreet/App/Controller/Report.pm @@ -251,7 +251,7 @@ sub generate_map_tags : Private { latitude => $problem->latitude, longitude => $problem->longitude, pins => $problem->used_map - ? [ $problem->pin_data($c, 'report', type => 'big') ] + ? [ $problem->pin_data($c, 'report', type => 'big', draggable => 1) ] : [], ); diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index c332830b9..a1038e909 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -1430,6 +1430,7 @@ sub generate_map : Private { pins => [ { latitude => $latitude, longitude => $longitude, + draggable => 1, colour => 'green', # 'yellow', } ], ); diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm index 3fd53d630..3414f9a2f 100644 --- a/perllib/FixMyStreet/App/Controller/Reports.pm +++ b/perllib/FixMyStreet/App/Controller/Reports.pm @@ -783,7 +783,8 @@ sub ajax : Private { my @pins = map { my $p = $_; - [ $p->{latitude}, $p->{longitude}, $p->{colour}, $p->{id}, $p->{title} ] + # lat, lon, 'colour', ID, title, type/size, draggable + [ $p->{latitude}, $p->{longitude}, $p->{colour}, $p->{id}, $p->{title}, '', JSON->false ] } @{$c->stash->{pins}}; my $list_html = $c->render_fragment($template); diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm index f67e0b0f8..f2d221fa4 100644 --- a/perllib/FixMyStreet/DB/Result/Problem.pm +++ b/perllib/FixMyStreet/DB/Result/Problem.pm @@ -1017,6 +1017,7 @@ sub pin_data { id => $self->id, title => $title, problem => $self, + draggable => $opts{draggable}, type => $opts{type}, } }; diff --git a/templates/web/base/maps/pin.html b/templates/web/base/maps/pin.html index 7dfce0bb3..e2d1c0021 100644 --- a/templates/web/base/maps/pin.html +++ b/templates/web/base/maps/pin.html @@ -7,6 +7,7 @@ class="pin js-pin" data-lat="[% pin.latitude %]" data-lon="[% pin.longitude %]" data-colour="[% pin.colour %]" data-id="[% pin.id %]" data-title="[% pin.title | html %]" data-type="[% pin.type %]" + data-draggable="[% pin.draggable %]" [% ELSE -%] class="pin" [% END -%] diff --git a/web/cobrands/fixmystreet/map.js b/web/cobrands/fixmystreet/map.js index 7c3aeb55e..048e180b6 100644 --- a/web/cobrands/fixmystreet/map.js +++ b/web/cobrands/fixmystreet/map.js @@ -5,7 +5,8 @@ var fixmystreet = fixmystreet || {}; var map_data = document.getElementById('js-map-data'), map_keys = [ 'area', 'latitude', 'longitude', 'zoomToBounds', 'zoom', 'pin_prefix', 'pin_new_report_colour', 'numZoomLevels', 'zoomOffset', 'map_type', 'key', 'bodies' ], numeric = { zoom: 1, numZoomLevels: 1, zoomOffset: 1, id: 1 }, - pin_keys = [ 'lat', 'lon', 'colour', 'id', 'title', 'type' ]; + bool = { draggable: 1 }, + pin_keys = [ 'lat', 'lon', 'colour', 'id', 'title', 'type', 'draggable' ]; if (!map_data) { return; @@ -39,6 +40,9 @@ var fixmystreet = fixmystreet || {}; if (numeric[key]) { val = +val; } + if (bool[key]) { + val = !!val; + } arr.push(val); }); fixmystreet.pins.push(arr); diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index 7253d46c8..fd69e034d 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -198,13 +198,14 @@ $.extend(fixmystreet.utils, { } var id = pin[3] === undefined ? pin[3] : +pin[3]; var marker_size = (id === window.selected_problem_id) ? selected_size : size; + var draggable = (id === window.selected_problem_id) ? true : (pin[6] === false ? false : true); var marker = new OpenLayers.Feature.Vector(loc, { colour: pin[2], size: pin[5] || marker_size, faded: 0, id: id, title: pin[4] || '', - draggable: pin[6] === false ? false : true + draggable: draggable }); markers.push( marker ); } @@ -215,10 +216,13 @@ $.extend(fixmystreet.utils, { var size = fixmystreet.maps.marker_size(); var selected_size = fixmystreet.maps.selected_marker_size(); for (var i = 0; i < fixmystreet.markers.features.length; i++) { - if (fixmystreet.markers.features[i].attributes.id == window.selected_problem_id) { - fixmystreet.markers.features[i].attributes.size = selected_size; + var attr = fixmystreet.markers.features[i].attributes; + if (attr.id == window.selected_problem_id) { + attr.size = selected_size; + attr.draggable = true; } else { - fixmystreet.markers.features[i].attributes.size = size; + attr.size = size; + attr.draggable = false; } } fixmystreet.markers.redraw(); @@ -277,6 +281,8 @@ $.extend(fixmystreet.utils, { } } } ); + // Allow handled feature click propagation to other click handlers + drag.handlers.feature.stopClick = false; fixmystreet.map.addControl( drag ); drag.activate(); }, |