aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--web/cobrands/fixmystreet/density-map.js8
-rw-r--r--web/js/map-OpenLayers.js17
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,