diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-07-13 22:20:01 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-07-14 01:07:00 +0100 |
commit | aa0a3912b17bdab7ea0df09873236c1978d8a682 (patch) | |
tree | b28edc3b77464065758b5c15239a7677dc7404ee | |
parent | f61b6d3be37074f3bbe543bf291865e550572040 (diff) |
Work correctly for alt-click/cmd-click etc.
-rw-r--r-- | web/cobrands/fixmystreet/fixmystreet.js | 9 | ||||
-rw-r--r-- | web/js/map-OpenLayers.js | 33 |
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') { |