diff options
Diffstat (limited to 'web/cobrands/bromley/js.js')
-rw-r--r-- | web/cobrands/bromley/js.js | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/web/cobrands/bromley/js.js b/web/cobrands/bromley/js.js new file mode 100644 index 000000000..8ff314189 --- /dev/null +++ b/web/cobrands/bromley/js.js @@ -0,0 +1,75 @@ +if (window.Heatmap) { + // We do want heatmap page to run on load... Bit cheeky + OpenLayers.Strategy.FixMyStreetNoLoad = OpenLayers.Strategy.FixMyStreet; + OpenLayers.Strategy.FixMyStreetHeatmap = OpenLayers.Class(OpenLayers.Strategy.FixMyStreet, { + // Same as update, but doesn't check layer visibility (as running when markers invisible) + update: function(options) { + var mapBounds = this.getMapBounds(); + if (mapBounds !== null && ((options && options.force) || + (this.layer.calculateInRange() && this.invalidBounds(mapBounds)))) { + this.calculateBounds(mapBounds); + this.resolution = this.layer.map.getResolution(); + this.triggerRead(options); + } + }, + CLASS_NAME: 'OpenLayers.Strategy.FixMyStreetHeatmap' + }); +} + +fixmystreet.protocol_params.wards = 'wards'; +fixmystreet.protocol_params.start_date = 'start_date'; +fixmystreet.protocol_params.end_date = 'end_date'; + +$(function(){ + if (!window.Heatmap) { + return; + } + + var heat_layer = new Heatmap.Layer("Heatmap"); + heat_layer.setOpacity(0.7); + heat_layer.setVisibility(false); + + var s = new OpenLayers.Strategy.FixMyStreetHeatmap(); + s.setLayer(heat_layer); + s.activate(); + // Now it's listening on heat layer, set it to update markers layer + s.layer = fixmystreet.markers; + + function create_heat_layer() { + heat_layer.points = []; + for (var i = 0; i < fixmystreet.markers.features.length; i++) { + var m = fixmystreet.markers.features[i]; + var ll = new OpenLayers.LonLat(m.geometry.x, m.geometry.y); + heat_layer.addSource(new Heatmap.Source(ll)); + } + heat_layer.redraw(); + } + + fixmystreet.markers.events.register('loadend', null, create_heat_layer); + create_heat_layer(); + fixmystreet.map.addLayer(heat_layer); + + $('#heatmap_yes').on('click', function() { + fixmystreet.markers.setVisibility(false); + heat_layer.setVisibility(true); + }); + + $('#heatmap_no').on('click', function() { + heat_layer.setVisibility(false); + fixmystreet.markers.setVisibility(true); + }); + + $('#sort').closest('.report-list-filters').hide(); + + $("#wards, #start_date, #end_date").on("change.filters", 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() { + if (!fixmystreet.markers.getVisibility()) { + // If not visible, still want to trigger change for heatmap + fixmystreet.markers.events.triggerEvent("refresh", {force: true}); + } + }); + +}); |