diff --git a/app/scripts/utils/Colors.js b/app/scripts/utils/Colors.js index b7270a6..4c56348 100644 --- a/app/scripts/utils/Colors.js +++ b/app/scripts/utils/Colors.js @@ -1,4 +1,5 @@ -var _ = require('lodash'); +var _ = require('lodash'), + math = require('./Math'); /* Color @@ -98,6 +99,8 @@ class Colors { return 60 * (b - r) / d + 120; case b: return 60 * (r - g) / d + 240; + default: + break; } }()); if (h < 0) { @@ -171,6 +174,7 @@ class Colors { (_.intersection(_.keys(attr), ['r', 'g', 'b']).length > 0)) { return null; } + if (_.intersection(_.keys(attr), ['r', 'g', 'b']).length > 0) { type = 'rgb'; } @@ -180,11 +184,13 @@ class Colors { else { return null; } + _.each(attr, function (val, key, list) { if (val === null) { return delete list[key]; } }); + switch (type) { case 'rgb': rgb = _.pick(attr, 'r', 'g', 'b'); @@ -203,20 +209,18 @@ class Colors { else { out = this.hsl; } + break; + default: + break; } return out; } static constrain (attr, amount, limit, direction) { - var math, test, val; - math = [attr, direction, amount].join(' '); - val = eval(math); - test = (limit[1] >= val && val >= limit[0]); - if (test) { - val; + var val = math.expr(attr + direction + amount), + test = (limit[1] >= val && val >= limit[0]); - } - else { + if (!test) { if (val < limit[0]) { val = limit[0]; } @@ -224,6 +228,7 @@ class Colors { val = limit[1]; } } + return Math.abs(val); } diff --git a/app/scripts/utils/Math.js b/app/scripts/utils/Math.js new file mode 100644 index 0000000..d6fe904 --- /dev/null +++ b/app/scripts/utils/Math.js @@ -0,0 +1,49 @@ +module.exports = { + expr (expr) { + + var chars = expr.split(''); + var n = [], op = [], index = 0, oplast = true; + + n[index] = ''; + + // Parse the expression + for (var c = 0; c < chars.length; c++) { + + if (isNaN(parseInt(chars[c], 10)) && chars[c] !== '.' && !oplast) { + op[index] = chars[c]; + index++; + n[index] = ''; + oplast = true; + } + else { + n[index] += chars[c]; + oplast = false; + } + } + + // Calculate the expression + expr = parseFloat(n[0]); + for (var o = 0; o < op.length; o++) { + var num = parseFloat(n[o + 1]); + + switch (op[o]) { + case '+': + expr = expr + num; + break; + case '-': + expr = expr - num; + break; + case '*': + expr = expr * num; + break; + case '/': + expr = expr / num; + break; + default: + break; + } + } + + return expr; + } +};