From a4df9a871b9f9ea9411961df5a887d13955d8eb4 Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Wed, 7 Nov 2012 11:43:18 +0100 Subject: [PATCH] when using BBOX or Fixed strategies, pass on the filter used in the request to the loadstart event. This is mostly important in the case of BBOX, since there is no other way to get the filter used in the request. An example use case is doing a hitCount request using the same filter to find out the true number of features matched on the server-side --- lib/OpenLayers/Layer.js | 5 ++++- lib/OpenLayers/Strategy/BBOX.js | 5 +++-- lib/OpenLayers/Strategy/Fixed.js | 2 +- tests/Strategy/BBOX.html | 3 ++- tests/Strategy/Fixed.html | 8 +++++++- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index f8ddfbe9fd..550c1894a5 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -86,7 +86,10 @@ OpenLayers.Layer = OpenLayers.Class({ * element - {DOMElement} A reference to layer.events.element. * * Supported map event types: - * loadstart - Triggered when layer loading starts. + * loadstart - Triggered when layer loading starts. When using Fixed or + * BBOX strategies, the event object includes a *filter* property + * holding the OpenLayers.Filter used when calling read on the + * protocol. * loadend - Triggered when layer loading ends. When using Fixed or BBOX * strategies, the event object includes a *response* property holding * an OpenLayers.Protocol.Response object. diff --git a/lib/OpenLayers/Strategy/BBOX.js b/lib/OpenLayers/Strategy/BBOX.js index 88b4c6e95f..8509ff1742 100644 --- a/lib/OpenLayers/Strategy/BBOX.js +++ b/lib/OpenLayers/Strategy/BBOX.js @@ -217,10 +217,11 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, { this.layer.protocol.abort(this.response); this.layer.events.triggerEvent("loadend"); } - this.layer.events.triggerEvent("loadstart"); + var filter = this.createFilter(); + this.layer.events.triggerEvent("loadstart", {filter: filter}); this.response = this.layer.protocol.read( OpenLayers.Util.applyDefaults({ - filter: this.createFilter(), + filter: filter, callback: this.merge, scope: this }, options)); diff --git a/lib/OpenLayers/Strategy/Fixed.js b/lib/OpenLayers/Strategy/Fixed.js index 6b38b0b9c9..3a4549275a 100644 --- a/lib/OpenLayers/Strategy/Fixed.js +++ b/lib/OpenLayers/Strategy/Fixed.js @@ -88,7 +88,7 @@ OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, { */ load: function(options) { var layer = this.layer; - layer.events.triggerEvent("loadstart"); + layer.events.triggerEvent("loadstart", {filter: layer.filter}); layer.protocol.read(OpenLayers.Util.applyDefaults({ callback: OpenLayers.Function.bind(this.merge, this, layer.map.getProjectionObject()), diff --git a/tests/Strategy/BBOX.html b/tests/Strategy/BBOX.html index ce9f2a7717..d45e8df068 100644 --- a/tests/Strategy/BBOX.html +++ b/tests/Strategy/BBOX.html @@ -112,7 +112,7 @@ function test_events(t) { - t.plan(6); + t.plan(7); var log = []; @@ -141,6 +141,7 @@ t.eq(log.length, 2, "2 events logged"); t.eq(log[0].type, "loadstart", "loadstart first"); + t.ok(log[0].filter.type === OpenLayers.Filter.Spatial.BBOX, "loadstart includes filter used"); t.eq(log[1].type, "loadend", "loadend second"); t.ok(log[1].response == response, "loadend includes response"); diff --git a/tests/Strategy/Fixed.html b/tests/Strategy/Fixed.html index 2f9f5b3adc..19505cbeeb 100644 --- a/tests/Strategy/Fixed.html +++ b/tests/Strategy/Fixed.html @@ -62,7 +62,7 @@ function test_events(t) { - t.plan(6); + t.plan(7); var log = []; @@ -70,6 +70,11 @@ var map = new OpenLayers.Map("map"); var layer = new OpenLayers.Layer.Vector(null, { + filter: new OpenLayers.Filter.Comparison({ + type: '==', + property: 'foo', + value: 'bar' + }), strategies: [new OpenLayers.Strategy.Fixed()], protocol: new OpenLayers.Protocol({ read: function(config) { @@ -92,6 +97,7 @@ t.eq(log.length, 2, "2 events logged"); t.eq(log[0].type, "loadstart", "loadstart first"); + t.eq(log[0].filter, layer.filter, "filter passed on as argument to loadstart"); t.eq(log[1].type, "loadend", "loadend second"); t.ok(log[1].response == response, "loadend includes response");