diff --git a/examples/style-rules.js b/examples/style-rules.js index 07a3a35a5c..143a10caf9 100644 --- a/examples/style-rules.js +++ b/examples/style-rules.js @@ -49,7 +49,7 @@ var style = new ol.style.Style({rules: [ }), new ol.style.Text({ color: '#bada55', - text: new ol.Expression('label'), + text: ol.expression.parse('label'), fontFamily: 'Calibri,sans-serif', fontSize: 14 }) diff --git a/examples/vector-layer.js b/examples/vector-layer.js index afd596c286..62ee037394 100644 --- a/examples/vector-layer.js +++ b/examples/vector-layer.js @@ -1,8 +1,7 @@ -goog.require('ol.Expression'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); -goog.require('ol.filter.Filter'); +goog.require('ol.expression'); goog.require('ol.layer.TileLayer'); goog.require('ol.layer.Vector'); goog.require('ol.parser.GeoJSON'); @@ -19,6 +18,11 @@ var raster = new ol.layer.TileLayer({ source: new ol.source.MapQuestOpenAerial() }); +// TODO: discuss scale dependent rules +ol.expression.register('resolution', function() { + return map.getView().getView2D().getResolution(); +}); + var vector = new ol.layer.Vector({ source: new ol.source.Vector({ projection: ol.proj.get('EPSG:4326') @@ -32,13 +36,11 @@ var vector = new ol.layer.Vector({ ] }), new ol.style.Rule({ - filter: new ol.filter.Filter(function() { - return map.getView().getResolution() < 5000; - }), + filter: 'resolution() < 5000', symbolizers: [ new ol.style.Text({ color: '#bada55', - text: new ol.Expression('name'), + text: ol.expression.parse('name'), fontFamily: 'Calibri,sans-serif', fontSize: 12 }) diff --git a/src/ol/expression/expression.exports b/src/ol/expression/expression.exports index 8f9155e23f..e3702d1e8b 100644 --- a/src/ol/expression/expression.exports +++ b/src/ol/expression/expression.exports @@ -1 +1,2 @@ @exportSymbol ol.expression.parse +@exportSymbol ol.expression.register diff --git a/src/ol/expression/expression.js b/src/ol/expression/expression.js index a5b444336d..388317e9d3 100644 --- a/src/ol/expression/expression.js +++ b/src/ol/expression/expression.js @@ -32,7 +32,7 @@ ol.expression.evaluateFeature = function(expr, opt_feature) { /** - * Parse an expression + * Parse an expression. * @param {string} source The expression source (e.g. `'foo + 2'`). * @return {ol.expression.Expression} An expression instance that can be * evaluated within some scope to provide a value. @@ -43,6 +43,18 @@ ol.expression.parse = function(source) { }; +/** + * Register a library function to be used in expressions. + * @param {string} name The function name (e.g. 'myFunc'). + * @param {function(this:ol.Feature)} func The function to be called in an + * expression. This function will be called with a feature as the `this` + * argument when the expression is evaluated in the context of a features. + */ +ol.expression.register = function(name, func) { + ol.expression.lib[name] = func; +}; + + /** * Determines whether an expression is a call expression that calls one of the * `ol.expression.lib` functions.