From a2b55b04e87ab369794959af648c3e388e7c3291 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Tue, 12 Nov 2013 22:03:16 -0700 Subject: [PATCH] Rename layerFilter option to layers and accept array --- examples/modify-features.js | 9 +++++---- examples/select-features.js | 6 +++--- src/objectliterals.jsdoc | 4 ++-- src/ol/interaction/selectinteraction.js | 20 ++++++++++++------- .../ol/interaction/selectinteraction.test.js | 2 +- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/examples/modify-features.js b/examples/modify-features.js index c3ef96c9c9..bec884a647 100644 --- a/examples/modify-features.js +++ b/examples/modify-features.js @@ -92,13 +92,14 @@ var vector = new ol.layer.Vector({ }) }); -var selectInteraction = new ol.interaction.Select({ - layerFilter: function(layer) { return layer.get('id') == 'vector'; } +var select = new ol.interaction.Select({ + layers: [vector] }); +var modify = new ol.interaction.Modify(); + var map = new ol.Map({ - interactions: ol.interaction.defaults().extend( - [selectInteraction, new ol.interaction.Modify()]), + interactions: ol.interaction.defaults().extend([select, modify]), layers: [raster, vector], renderer: ol.RendererHint.CANVAS, target: 'map', diff --git a/examples/select-features.js b/examples/select-features.js index 09166ff064..5e487ab494 100644 --- a/examples/select-features.js +++ b/examples/select-features.js @@ -47,12 +47,12 @@ var vector = new ol.layer.Vector({ }) }); -var selectInteraction = new ol.interaction.Select({ - layerFilter: function(layer) { return layer.get('id') == 'vector'; } +var select = new ol.interaction.Select({ + layers: [vector] }); var map = new ol.Map({ - interactions: ol.interaction.defaults().extend([selectInteraction]), + interactions: ol.interaction.defaults().extend([select]), layers: [raster, vector], renderer: ol.RendererHint.CANVAS, target: 'map', diff --git a/src/objectliterals.jsdoc b/src/objectliterals.jsdoc index e107198442..5669bbb55f 100644 --- a/src/objectliterals.jsdoc +++ b/src/objectliterals.jsdoc @@ -395,8 +395,8 @@ * modifier (e.g. shift key) that determines if the interaction is active * (i.e. selection occurs) or not. By default, a click with no modifier keys * toggles the selection. - * @property {undefined|function(ol.layer.Layer):boolean} layerFilter Filter - * function to restrict selection to a subset of layers. + * @property {undefined|Array.|function(ol.layer.Layer):boolean} layers + * Layers or filter function to restrict selection to a subset of layers. * @todo stability experimental */ diff --git a/src/ol/interaction/selectinteraction.js b/src/ol/interaction/selectinteraction.js index eafea029ed..41ecf96085 100644 --- a/src/ol/interaction/selectinteraction.js +++ b/src/ol/interaction/selectinteraction.js @@ -1,6 +1,7 @@ goog.provide('ol.interaction.Select'); goog.require('goog.array'); +goog.require('goog.asserts'); goog.require('ol.Feature'); goog.require('ol.events.ConditionType'); goog.require('ol.events.condition'); @@ -34,12 +35,19 @@ ol.interaction.Select = function(opt_options) { this.addCondition_ = goog.isDef(options.addCondition) ? options.addCondition : ol.events.condition.shiftKeyOnly; + var layerFilter = options.layers; + if (!goog.isDef(layerFilter)) { + layerFilter = goog.functions.TRUE; + } else if (goog.isArray(layerFilter)) { + layerFilter = function(layer) {return options.layers.indexOf(layer) > -1;}; + } + goog.asserts.assertFunction(layerFilter); + /** - * @type {null|function(ol.layer.Layer):boolean} + * @type {function(ol.layer.Layer):boolean} * @private */ - this.layerFilter_ = goog.isDef(options.layerFilter) ? - options.layerFilter : null; + this.layerFilter_ = layerFilter; goog.base(this); }; @@ -53,10 +61,8 @@ ol.interaction.Select.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { if (this.condition_(mapBrowserEvent)) { var map = mapBrowserEvent.map; - var layers = map.getLayerGroup().getLayersArray(); - if (!goog.isNull(this.layerFilter_)) { - layers = goog.array.filter(layers, this.layerFilter_); - } + var layers = goog.array.filter( + map.getLayerGroup().getLayersArray(), this.layerFilter_); var clear = !this.addCondition_(mapBrowserEvent); var that = this; diff --git a/test/spec/ol/interaction/selectinteraction.test.js b/test/spec/ol/interaction/selectinteraction.test.js index cedd9211f1..5c412af9dd 100644 --- a/test/spec/ol/interaction/selectinteraction.test.js +++ b/test/spec/ol/interaction/selectinteraction.test.js @@ -30,7 +30,7 @@ describe('ol.interaction.Select', function() { vector = new ol.layer.Vector({source: new ol.source.Vector({})}); vector.addFeatures(features); select = new ol.interaction.Select({ - layerFilter: function(layer) { return layer === vector; } + layers: [vector] }); map.getInteractions().push(select); });