aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Admin.pm1
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm2
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm1
-rw-r--r--perllib/FixMyStreet/App/Controller/Reports.pm3
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm1
-rw-r--r--templates/web/base/maps/pin.html1
-rw-r--r--web/cobrands/fixmystreet/map.js6
-rw-r--r--web/js/map-OpenLayers.js14
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();
},