zpt
Version:
Zenon Page Templates - JS (ZPT-JS)
86 lines (67 loc) • 2.28 kB
JavaScript
/*
InExpression class
*/
;
var context = require( '../../context.js' );
var ExpressionTokenizer = require( '../expressionTokenizer.js' );
var expressionsUtils = require( '../expressionsUtils.js' );
var InExpression = function( stringToApply, expressionListToApply ) {
var string = stringToApply;
var expressionList = expressionListToApply;
var evaluate = function( scope ){
var expression0 = expressionList[ 0 ];
var evaluated0 = expression0.evaluate( scope );
for ( var i = 1; i < expressionList.length; i++ ) {
var expression = expressionList[ i ];
var evaluated = expression.evaluate( scope );
if ( Array.isArray( evaluated ) ){
for ( var j = 0; j < evaluated.length; j++ ) {
if ( evaluated0 == evaluated[ j ] ){
return true;
}
}
continue;
}
if ( evaluated0 == evaluated ){
return true;
}
}
return false;
};
var dependsOn = function( depsDataItem, scope ){
return expressionsUtils.buildDependsOnList( depsDataItem, scope, expressionList );
};
var toString = function(){
return string;
};
return {
evaluate: evaluate,
dependsOn: dependsOn,
toString: toString
};
};
InExpression.removePrefix = true;
InExpression.getPrefix = function() {
return context.getConf().inExpression;
};
InExpression.getId = InExpression.getPrefix;
InExpression.build = function( s ) {
var expressionBuilder = require( '../expressionBuilder.js' );
var string = s.trim();
if ( string.length === 0 ) {
throw 'In expression void.';
}
var segments = new ExpressionTokenizer(
string,
context.getConf().expressionDelimiter,
false
);
if ( segments.countTokens() === 1 ) {
throw 'Only one element in in expression "' + string + '", please add at least one more.';
}
return new InExpression(
string,
expressionBuilder.buildList( segments )
);
};
module.exports = InExpression;