Using a renderIntent lib function instead of this identifier

A 'this' identifier is quite useless with compressed JavaScript,
and in fact it turned out to fail in advanced mode when trying
to access a feature's renderIntent property with it. The added
renderIntent lib function as a Call expression does the job
well.
This commit is contained in:
ahocevar
2013-08-28 18:00:09 +02:00
parent 526dbebadc
commit 0fbf07fef1
7 changed files with 32 additions and 64 deletions

View File

@@ -99,6 +99,7 @@ ol.expr.functions = {
EXTENT: 'extent',
FID: 'fid',
GEOMETRY_TYPE: 'geometryType',
RENDER_INTENT: 'renderIntent',
INTERSECTS: 'intersects',
CONTAINS: 'contains',
DWITHIN: 'dwithin',
@@ -252,6 +253,17 @@ ol.expr.lib[ol.expr.functions.GEOMETRY_TYPE] = function(type) {
};
/**
* Determine if a feature's renderIntent matches the given one.
* @param {string} renderIntent Render intent.
* @return {boolean} The feature's renderIntent matches the given one.
* @this {ol.Feature}
*/
ol.expr.lib[ol.expr.functions.RENDER_INTENT] = function(renderIntent) {
return this.renderIntent == renderIntent;
};
ol.expr.lib[ol.expr.functions.INTERSECTS] = function(geom, opt_projection,
opt_attribute) {
throw new Error('Spatial function not implemented: ' +

View File

@@ -10,7 +10,6 @@ goog.provide('ol.expr.Math');
goog.provide('ol.expr.MathOp');
goog.provide('ol.expr.Member');
goog.provide('ol.expr.Not');
goog.provide('ol.expr.ThisIdentifier');
@@ -625,24 +624,3 @@ ol.expr.Not.prototype.evaluate = function(opt_scope, opt_fns, opt_this) {
ol.expr.Not.prototype.getArgument = function() {
return this.argument_;
};
/**
* An identifier for the 'this' keyword.
*
* @constructor
* @extends {ol.expr.Expression}
*/
ol.expr.ThisIdentifier = function() {};
goog.inherits(ol.expr.ThisIdentifier, ol.expr.Expression);
goog.addSingletonGetter(ol.expr.ThisIdentifier);
/**
* @inheritDoc
*/
ol.expr.ThisIdentifier.prototype.evaluate =
function(opt_scope, opt_fns, opt_this) {
return opt_this;
};

View File

@@ -516,8 +516,7 @@ ol.expr.Lexer.prototype.scanIdentifier_ = function(code) {
if (id.length === 1) {
type = ol.expr.TokenType.IDENTIFIER;
} else if (this.isKeyword_(id)) {
type = (id === 'this') ?
ol.expr.TokenType.THIS_IDENTIFIER : ol.expr.TokenType.KEYWORD;
type = ol.expr.TokenType.KEYWORD;
} else if (id === 'null') {
type = ol.expr.TokenType.NULL_LITERAL;
} else if (id === 'true' || id === 'false') {

View File

@@ -30,7 +30,6 @@ goog.require('ol.expr.Math');
goog.require('ol.expr.MathOp');
goog.require('ol.expr.Member');
goog.require('ol.expr.Not');
goog.require('ol.expr.ThisIdentifier');
goog.require('ol.expr.Token');
goog.require('ol.expr.TokenType');
goog.require('ol.expr.UnexpectedToken');
@@ -199,16 +198,6 @@ ol.expr.Parser.prototype.createMemberExpression_ = function(object,
};
/**
* Create a 'this' identifier.
* @return {ol.expr.ThisIdentifier} The 'this' identifier.
* @private
*/
ol.expr.Parser.prototype.createThisIdentifier_ = function() {
return ol.expr.ThisIdentifier.getInstance();
};
/**
* Create a unary expression. The only true unary operator supported here is
* "!". For +/-, we apply the operator to literal expressions and return
@@ -445,8 +434,6 @@ ol.expr.Parser.prototype.parsePrimaryExpression_ = function(lexer) {
expr = this.createLiteral_(token.value === 'true');
} else if (type === ol.expr.TokenType.NULL_LITERAL) {
expr = this.createLiteral_(null);
} else if (type === ol.expr.TokenType.THIS_IDENTIFIER) {
expr = this.createThisIdentifier_();
} else {
throw new ol.expr.UnexpectedToken(token);
}