diff --git a/src/ol/expr/expression.js b/src/ol/expr/expression.js index 8a60e5b2ad..3739ffc54b 100644 --- a/src/ol/expr/expression.js +++ b/src/ol/expr/expression.js @@ -1,4 +1,5 @@ goog.provide('ol.expr'); +goog.provide('ol.expr.functions'); goog.require('ol.Extent'); goog.require('ol.Feature'); @@ -83,43 +84,55 @@ ol.expr.isLibCall = function(expr) { * Library of well-known functions. These are available to expressions parsed * with `ol.expr.parse`. * - * @type {Object} + * @type {Object.} */ -ol.expr.lib = { +ol.expr.lib = {}; + + +/** + * Enumeration of library function names. + * + * @enum {string} + */ +ol.expr.functions = { + EXTENT: 'extent', + GEOMETRY_TYPE: 'geometryType' +}; + + +/** + * Determine if a feature's extent intersects the provided extent. + * @param {number} minX Minimum x-coordinate value. + * @param {number} maxX Maximum x-coordinate value. + * @param {number} minY Minimum y-coordinate value. + * @param {number} maxY Maximum y-coordinate value. + * @return {boolean} The provided extent intersects the feature's extent. + * @this {ol.Feature} + */ +ol.expr.lib[ol.expr.functions.EXTENT] = function(minX, maxX, minY, maxY) { + var intersects = false; + var geometry = this.getGeometry(); + if (geometry) { + intersects = ol.extent.intersects(geometry.getBounds(), + [minX, maxX, minY, maxY]); + } + return intersects; +}; - /** - * Determine if a feature's extent intersects the provided extent. - * @param {number} minX Minimum x-coordinate value. - * @param {number} maxX Maximum x-coordinate value. - * @param {number} minY Minimum y-coordinate value. - * @param {number} maxY Maximum y-coordinate value. - * @return {boolean} The provided extent intersects the feature's extent. - * @this {ol.Feature} - */ - 'extent': function(minX, maxX, minY, maxY) { - var intersects = false; - var geometry = this.getGeometry(); - if (geometry) { - intersects = ol.extent.intersects(geometry.getBounds(), - [minX, maxX, minY, maxY]); } - return intersects; - }, - - - /** - * Determine if a feature's default geometry is of the given type. - * @param {ol.geom.GeometryType} type Geometry type. - * @return {boolean} The feature's default geometry is of the given type. - * @this {ol.Feature} - */ - 'geometryType': function(type) { - var same = false; - var geometry = this.getGeometry(); - if (geometry) { - same = geometry.getType() === type; - } - return same; } +/** + * Determine if a feature's default geometry is of the given type. + * @param {ol.geom.GeometryType} type Geometry type. + * @return {boolean} The feature's default geometry is of the given type. + * @this {ol.Feature} + */ +ol.expr.lib[ol.expr.functions.GEOMETRY_TYPE] = function(type) { + var same = false; + var geometry = this.getGeometry(); + if (geometry) { + same = geometry.getType() === type; + } + return same; }; diff --git a/src/ol/layer/vectorlayer.js b/src/ol/layer/vectorlayer.js index 3487f187d8..264c4c9fa4 100644 --- a/src/ol/layer/vectorlayer.js +++ b/src/ol/layer/vectorlayer.js @@ -9,6 +9,7 @@ goog.require('ol.expr'); goog.require('ol.expr.Literal'); goog.require('ol.expr.Logical'); goog.require('ol.expr.LogicalOp'); +goog.require('ol.expr.functions'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.SharedVertices'); goog.require('ol.layer.Layer'); @@ -93,14 +94,14 @@ ol.layer.FeatureCache.prototype.getFeaturesObject = function(opt_expr) { } else { // check for geometryType or extent expression var name = ol.expr.isLibCall(opt_expr); - if (name === 'geometryType') { + if (name === ol.expr.functions.GEOMETRY_TYPE) { var args = /** @type {ol.expr.Call} */ (opt_expr).getArgs(); goog.asserts.assert(args.length === 1); goog.asserts.assert(args[0] instanceof ol.expr.Literal); var type = /** @type {ol.expr.Literal } */ (args[0]).evaluate(); goog.asserts.assertString(type); features = this.geometryTypeIndex_[type]; - } else if (name === 'extent') { + } else if (name === ol.expr.functions.EXTENT) { var args = /** @type {ol.expr.Call} */ (opt_expr).getArgs(); goog.asserts.assert(args.length === 4); var extent = []; @@ -120,13 +121,13 @@ ol.layer.FeatureCache.prototype.getFeaturesObject = function(opt_expr) { for (var i = 0; i <= 1; ++i) { expr = expressions[i]; name = ol.expr.isLibCall(expr); - if (name === 'geometryType') { + if (name === ol.expr.functions.GEOMETRY_TYPE) { args = /** @type {ol.expr.Call} */ (expr).getArgs(); goog.asserts.assert(args.length === 1); goog.asserts.assert(args[0] instanceof ol.expr.Literal); type = /** @type {ol.expr.Literal } */ (args[0]).evaluate(); goog.asserts.assertString(type); - } else if (name === 'extent') { + } else if (name === ol.expr.functions.EXTENT) { args = /** @type {ol.expr.Call} */ (expr).getArgs(); goog.asserts.assert(args.length === 4); extent = [];