aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew-github@dracos.co.uk>2016-07-13 22:20:01 +0100
committerMatthew Somerville <matthew-github@dracos.co.uk>2016-07-14 01:07:00 +0100
commitaa0a3912b17bdab7ea0df09873236c1978d8a682 (patch)
treeb28edc3b77464065758b5c15239a7677dc7404ee
parentf61b6d3be37074f3bbe543bf291865e550572040 (diff)
Work correctly for alt-click/cmd-click etc.
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js9
-rw-r--r--web/js/map-OpenLayers.js33
2 files changed, 39 insertions, 3 deletions
diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js
index 43954a1cc..acdfc869d 100644
--- a/web/cobrands/fixmystreet/fixmystreet.js
+++ b/web/cobrands/fixmystreet/fixmystreet.js
@@ -684,7 +684,12 @@ $.extend(fixmystreet.set_up, {
ajax_history: function() {
$('#map_sidebar').on('click', '.item-list--reports a', function(e) {
+ if (e.metaKey || e.ctrlKey) {
+ return;
+ }
+
e.preventDefault();
+
var reportPageUrl = $(this).attr('href');
var reportId = parseInt(reportPageUrl.replace(/^.*\/([0-9]+)$/, '$1'), 10);
@@ -714,6 +719,10 @@ $.extend(fixmystreet.set_up, {
});
$('#map_sidebar').on('click', '.js-back-to-report-list', function(e) {
+ if (e.metaKey || e.ctrlKey) {
+ return;
+ }
+
e.preventDefault();
var reportListUrl = $(this).attr('href');
fixmystreet.display.reports_list(reportListUrl, function() {
diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js
index e1f152820..992037a2f 100644
--- a/web/js/map-OpenLayers.js
+++ b/web/js/map-OpenLayers.js
@@ -202,9 +202,36 @@ var fixmystreet = fixmystreet || {};
}
}
- function marker_click(problem_id) {
+ function marker_click(problem_id, evt) {
var $a = $('.item-list--reports a[href$="/' + problem_id + '"]');
- $a[0] && $a[0].click();
+ if (!$a[0]) {
+ return;
+ }
+
+ // All of this, just so that ctrl/cmd-click on a pin works?!
+ var event;
+ if (window.MouseEvent) {
+ event = new MouseEvent('click', evt);
+ $a[0].dispatchEvent(event);
+ } else if (document.createEvent) {
+ event = document.createEvent("MouseEvents");
+ event.initMouseEvent(
+ 'click', true, true, window, 1,
+ 0, 0, 0, 0,
+ evt.ctrlKey, evt.altKey, evt.shiftKey, evt.metaKey,
+ 0, null);
+ $a[0].dispatchEvent(event);
+ } else if (document.createEventObject) {
+ event = document.createEventObject();
+ event.metaKey = evt.metaKey;
+ event.ctrlKey = evt.ctrlKey;
+ if (e.metaKey === undefined) {
+ e.metaKey = e.ctrlKey;
+ }
+ $a[0].fireEvent("onclick", event);
+ } else {
+ $a[0].click();
+ }
}
function categories_or_status_changed() {
@@ -331,7 +358,7 @@ var fixmystreet = fixmystreet || {};
// Override clickFeature so that we can use it even though
// hover is true. http://gis.stackexchange.com/a/155675
clickFeature: function (feature) {
- marker_click(feature.attributes.id);
+ marker_click(feature.attributes.id, this.handlers.feature.evt);
},
overFeature: function (feature) {
if (fixmystreet.latest_map_hover_event != 'overFeature') {