Sha256: a3c385ee8020b32fb9822673cec178a00e81132758ef37886b7a1df153fd2fba
Contents?: true
Size: 1.93 KB
Versions: 5
Compression:
Stored size: 1.93 KB
Contents
var Node = require("./node"), Variable = require("./variable"); var JsEvalNode = function() { }; JsEvalNode.prototype = new Node(); JsEvalNode.prototype.evaluateJavaScript = function (expression, context) { var result, that = this, evalContext = {}; if (context.javascriptEnabled !== undefined && !context.javascriptEnabled) { throw { message: "You are using JavaScript, which has been disabled.", filename: this.currentFileInfo.filename, index: this.index }; } expression = expression.replace(/@\{([\w-]+)\}/g, function (_, name) { return that.jsify(new Variable('@' + name, that.index, that.currentFileInfo).eval(context)); }); try { expression = new Function('return (' + expression + ')'); } catch (e) { throw { message: "JavaScript evaluation error: " + e.message + " from `" + expression + "`" , filename: this.currentFileInfo.filename, index: this.index }; } var variables = context.frames[0].variables(); for (var k in variables) { if (variables.hasOwnProperty(k)) { /*jshint loopfunc:true */ evalContext[k.slice(1)] = { value: variables[k].value, toJS: function () { return this.value.eval(context).toCSS(); } }; } } try { result = expression.call(evalContext); } catch (e) { throw { message: "JavaScript evaluation error: '" + e.name + ': ' + e.message.replace(/["]/g, "'") + "'" , filename: this.currentFileInfo.filename, index: this.index }; } return result; }; JsEvalNode.prototype.jsify = function (obj) { if (Array.isArray(obj.value) && (obj.value.length > 1)) { return '[' + obj.value.map(function (v) { return v.toCSS(); }).join(', ') + ']'; } else { return obj.toCSS(); } }; module.exports = JsEvalNode;
Version data entries
5 entries across 5 versions & 2 rubygems