zpt
Version:
Zenon Page Templates - JS (ZPT-JS)
67 lines (50 loc) • 1.8 kB
JavaScript
/*
QueryExpression class
*/
;
var context = require( '../../context.js' );
var expressionsUtils = require( '../expressionsUtils.js' );
var QueryExpression = function( stringToApply, expressionToApply ) {
var string = stringToApply;
var expression = expressionToApply;
var evaluate = function( scope ){
try {
var evaluated = expression.evaluate( scope );
var elementList = window.document.querySelectorAll( evaluated );
// elementList with length 1
if ( elementList.length === 1 ){
return elementList[ 0 ].innerText;
}
// elementList with length > 1
var texts = [];
for ( var i = 0; i < elementList.length; ++i ){
texts.push( elementList[ i ].innerText );
}
return texts;
} catch ( e ){
return 'Query expression error in "' + string + '": ' + e;
}
};
var dependsOn = function( depsDataItem, scope ){
return expressionsUtils.buildDependsOnList( depsDataItem, scope, expression );
};
var toString = function(){
return string;
};
return {
evaluate: evaluate,
dependsOn: dependsOn,
toString: toString
};
};
QueryExpression.removePrefix = true;
QueryExpression.getPrefix = function() {
return context.getConf().queryExpression;
};
QueryExpression.getId = QueryExpression.getPrefix;
QueryExpression.build = function( string ) {
var expressionBuilder = require( '../expressionBuilder.js' );
var expression = expressionBuilder.build( string );
return new QueryExpression( string, expression );
};
module.exports = QueryExpression;