From f2100f6846a8cf40477fbf80a16f3ef47d0532dd Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 28 Jan 2017 15:19:27 +0100 Subject: [PATCH] Accept ol.StyleFunction in ol.Feature#setStyle() --- src/ol/feature.js | 12 +++++++++--- test/spec/ol/feature.test.js | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/ol/feature.js b/src/ol/feature.js index 2272f2a9b7..3aab9bb187 100644 --- a/src/ol/feature.js +++ b/src/ol/feature.js @@ -172,7 +172,7 @@ ol.Feature.prototype.getGeometryName = function() { * Get the feature's style. Will return what was provided to the * {@link ol.Feature#setStyle} method. * @return {ol.style.Style|Array.| - * ol.FeatureStyleFunction} The feature style. + * ol.FeatureStyleFunction|ol.StyleFunction} The feature style. * @api stable */ ol.Feature.prototype.getStyle = function() { @@ -233,7 +233,7 @@ ol.Feature.prototype.setGeometry = function(geometry) { * of styles, or a function that takes a resolution and returns an array of * styles. If it is `null` the feature has no style (a `null` style). * @param {ol.style.Style|Array.| - * ol.FeatureStyleFunction} style Style for this feature. + * ol.FeatureStyleFunction|ol.StyleFunction} style Style for this feature. * @api stable * @fires ol.events.Event#event:change */ @@ -291,7 +291,13 @@ ol.Feature.createStyleFunction = function(obj) { var styleFunction; if (typeof obj === 'function') { - styleFunction = obj; + if (obj.length == 2) { + styleFunction = function(resolution) { + return /** @type {ol.StyleFunction} */ (obj)(this, resolution); + }; + } else { + styleFunction = obj; + } } else { /** * @type {Array.} diff --git a/test/spec/ol/feature.test.js b/test/spec/ol/feature.test.js index 0e2b1c4a69..f0ef1b6269 100644 --- a/test/spec/ol/feature.test.js +++ b/test/spec/ol/feature.test.js @@ -303,7 +303,7 @@ describe('ol.Feature', function() { var style = new ol.style.Style(); var styleFunction = function(feature, resolution) { - return null; + return resolution; }; it('accepts a single style', function() { @@ -321,9 +321,20 @@ describe('ol.Feature', function() { }); it('accepts a style function', function() { + var feature = new ol.Feature(); + function featureStyleFunction(resolution) { + return styleFunction(this, resolution); + } + feature.setStyle(featureStyleFunction); + expect(feature.getStyleFunction()).to.be(featureStyleFunction); + expect(feature.getStyleFunction()(42)).to.be(42); + }); + + it('accepts a layer style function', function() { var feature = new ol.Feature(); feature.setStyle(styleFunction); - expect(feature.getStyleFunction()).to.be(styleFunction); + expect(feature.getStyleFunction()).to.not.be(styleFunction); + expect(feature.getStyleFunction()(42)).to.be(42); }); it('accepts null', function() {