zpt
Version:
Zenon Page Templates - JS (ZPT-JS)
54 lines (41 loc) • 1.44 kB
JavaScript
/*
FunctionExpression class
*/
;
var evaluateHelper = require( '../evaluateHelper.js' );
var FunctionExpression = function( stringToApply, nameToApply, argsToApply ) {
var string = stringToApply;
var name = nameToApply;
var args = argsToApply;
var evaluate = function( scope ){
var evaluatedArgs = evaluateHelper.evaluateExpressionList( args, scope );
var element = scope.get( name );
return ! element? undefined: element.apply( element, evaluatedArgs );
};
var dependsOn = function(){
return [];
};
var toString = function(){
return string;
};
return {
evaluate: evaluate,
dependsOn: dependsOn,
toString: toString
};
};
FunctionExpression.build = function( string ) {
var expressionBuilder = require( '../expressionBuilder.js' );
var leftParent = string.indexOf( '(' );
if ( leftParent === -1 ) {
return undefined;
}
if ( ! expressionBuilder.endsWith( string, ')' ) ) {
throw 'Syntax error. Bad function call: ' + string;
}
var functionName = string.substring( 0, leftParent ).trim();
var argsString = string.substring( leftParent + 1, string.length - 1 );
var args = expressionBuilder.getArgumentsFromString( argsString );
return new FunctionExpression( string, functionName, args );
};
module.exports = FunctionExpression;