Some refactoring

This commit is contained in:
Zaid Abdulla committed 2018-12-26 00:22:07 -08:00
1 parent 3cfac28fb1
commit 957417837e
10 files changed
+142 -58

No files matched your search

+32
View File
@@ -205,6 +205,36 @@ function parseExpression(exp) {
return lang.ValueExpression.tryParse(exp);
}
function evaluateExpressions(ast, funcCallback) {
return map(ast, exp => {
if (exp[0] === "FUNC") {
return funcCallback(exp);
} else if (exp[0] === "*") {
let v = exp[1];
for (let i = 2; i < exp.length; ++i) v *= exp[i];
return v;
} else if (exp[0] === "/") {
let v = exp[1];
for (let i = 2; i < exp.length; ++i) v /= exp[i];
return v;
} else if (exp[0] === "+") {
let v = exp[1];
for (let i = 2; i < exp.length; ++i) v += exp[i];
return v;
} else if (exp[0] === "-") {
let v = exp[1];
for (let i = 2; i < exp.length; ++i) v -= exp[i];
return v;
} else if (exp[0] === "||") {
return exp.slice(1).join("");
}
});
}
function parseParameter(p) {
return lang.Parameter.tryParse(p);
}
function stringify(filter) {
function value(v) {
if (Array.isArray(v))
@@ -275,5 +305,7 @@ function map(filter, callback) {
exports.parse = parse;
exports.parseExpression = parseExpression;
exports.evaluateExpressions = evaluateExpressions;
exports.parseParameter = parseParameter;
exports.stringify = stringify;
exports.map = map;
+3 -22
View File
@@ -67,28 +67,9 @@ class Filter {
evaluateExpressions(now = Date.now()) {
if (!this.ast) return this;
let ast = filterParser.map(this.ast, exp => {
if (exp[0] === "FUNC" && exp[1] === "NOW") {
return now;
} else if (exp[0] === "*") {
let v = exp[1];
for (let i = 2; i < exp.length; ++i) v *= exp[i];
return v;
} else if (exp[0] === "/") {
let v = exp[1];
for (let i = 2; i < exp.length; ++i) v /= exp[i];
return v;
} else if (exp[0] === "+") {
let v = exp[1];
for (let i = 2; i < exp.length; ++i) v += exp[i];
return v;
} else if (exp[0] === "-") {
let v = exp[1];
for (let i = 2; i < exp.length; ++i) v -= exp[i];
return v;
} else if (exp[0] === "||") {
return exp.slice(1).join("");
}
let ast = filterParser.evaluateExpressions(this.ast, exp => {
if (exp[0] === "FUNC" && exp[1] === "NOW") return now;
});
if (ast === this.ast) return this;