diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/density-map.js | 8 | ||||
-rw-r--r-- | web/js/map-OpenLayers.js | 17 |
3 files changed, 20 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fc1255dc..e718a42a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - Remove on-map Permalink. - Darken front page step numbers, and improve nested heading structure. - Set report title autocomplete to off to prevent email autocompleting + - Add map filter debouncing to reduce server requests. #2675 - Admin improvements: - Add new roles system, to group permissions and apply to users. #2483 - Contact form emails now include user admin links. diff --git a/web/cobrands/fixmystreet/density-map.js b/web/cobrands/fixmystreet/density-map.js index cbbda8a27..d3516d09a 100644 --- a/web/cobrands/fixmystreet/density-map.js +++ b/web/cobrands/fixmystreet/density-map.js @@ -62,15 +62,15 @@ $(function(){ $('#sort').closest('.report-list-filters').hide(); - $("#wards, #start_date, #end_date").on("change.filters", function() { + $("#wards, #start_date, #end_date").on("change.filters", debounce(function() { // If the category or status has changed we need to re-fetch map markers fixmystreet.markers.events.triggerEvent("refresh", {force: true}); - }); - $("#filter_categories, #statuses").on("change.filters", function() { + }, 1000)); + $("#filter_categories, #statuses").on("change.filters", debounce(function() { if (!fixmystreet.markers.getVisibility()) { // If not visible, still want to trigger change for heatmap fixmystreet.markers.events.triggerEvent("refresh", {force: true}); } - }); + }, 1000)); }); diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index 1588bda2e..eb62904b0 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -10,6 +10,19 @@ if (!Object.keys) { }; } +function debounce(fn, delay) { + var timeout; + return function() { + var that = this, args = arguments; + var debounced = function() { + timeout = null; + fn.apply(that, args); + }; + clearTimeout(timeout); + timeout = setTimeout(debounced, delay); + }; +} + var fixmystreet = fixmystreet || {}; fixmystreet.utils = fixmystreet.utils || {}; @@ -428,10 +441,10 @@ $.extend(fixmystreet.utils, { } } - function categories_or_status_changed() { + var categories_or_status_changed = debounce(function() { // If the category or status has changed we need to re-fetch map markers fixmystreet.markers.refresh({force: true}); - } + }, 1000); function replace_query_parameter(qs, id, key) { var value, |