diff --git a/lib/OpenLayers/Control/SLDSelect.js b/lib/OpenLayers/Control/SLDSelect.js index 758ccee47a..a894eeb854 100644 --- a/lib/OpenLayers/Control/SLDSelect.js +++ b/lib/OpenLayers/Control/SLDSelect.js @@ -533,12 +533,13 @@ OpenLayers.Control.SLDSelect = OpenLayers.Class(OpenLayers.Control, { } var selectionLayer = this.createSelectionLayer(layer); - var sld = this.createSLD(layer, filters, geometryAttributes); this.events.triggerEvent("selected", { layer: layer, filters: filters }); + + var sld = this.createSLD(layer, filters, geometryAttributes); selectionLayer.mergeNewParams({SLD_BODY: sld}); delete this._queue; diff --git a/tests/Control/SLDSelect.html b/tests/Control/SLDSelect.html index 74935539f1..03b871c5af 100644 --- a/tests/Control/SLDSelect.html +++ b/tests/Control/SLDSelect.html @@ -100,6 +100,62 @@ map.destroy(); } + function test_filterModificationOnSelected(t) { + t.plan(1); + var parser = new OpenLayers.Format.WFSDescribeFeatureType(); + var map = new OpenLayers.Map('map'); + var layer = new OpenLayers.Layer.WMS('Foo', 'http://foo', {LAYERS: 'AAA64'}); + map.addLayer(layer); + + var text = + '' + + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + + OpenLayers.Control.SLDSelect.prototype.wfsCache[layer.id] = parser.read(text); + var control = new OpenLayers.Control.SLDSelect(OpenLayers.Handler.RegularPolygon, + {layers: [layer], clearOnDeactivate: true, handlerOptions: {irregular: true} }); + + var testEvent = function(evt) { + // manipulate filter + var bbox = OpenLayers.Bounds.fromString('1,2,3,4'); + evt.filters[0].value = bbox; + }; + control.events.register("selected", this, testEvent); + map.addControl(control); + var geometry = OpenLayers.Geometry.Polygon.createRegularPolygon( + new OpenLayers.Geometry.Point(0, 0), 5, 4); + control.select(geometry); + control.events.unregister("selected", this, testEvent); + + var expected_sld = 'AAA64defaultgeometry1,2 3,4#FF00002'; + + t.xml_eq(map.layers[1].params.SLD_BODY, expected_sld, "Filter / SLD manipulated in select-callback correctly"); + + } + function test_multiselect(t) { t.plan(2);