[Pkg-javascript-commits] [less.js] 66/285: remove dependency injection from functions files apart from when needed for environment
Jonas Smedegaard
dr at jones.dk
Mon Oct 26 23:23:39 UTC 2015
This is an automated email from the git hooks/post-receive script.
js pushed a commit to annotated tag v2.0.0
in repository less.js.
commit fe5e2bf7cb2a4f59f31fa4bd1e21cf099c0a82f7
Author: Luke Page <luke.a.page at gmail.com>
Date: Sun Aug 24 18:33:03 2014 +0100
remove dependency injection from functions files apart from when needed for environment
---
lib/less/functions/color-blending.js | 126 ++++-----
lib/less/functions/color.js | 493 +++++++++++++++++-----------------
lib/less/functions/data-uri.js | 14 +-
lib/less/functions/default.js | 6 +-
lib/less/functions/function-caller.js | 9 +-
lib/less/functions/index.js | 31 +--
lib/less/functions/math.js | 69 +++--
lib/less/functions/number.js | 140 +++++-----
lib/less/functions/string.js | 57 ++--
lib/less/functions/svg.js | 14 +-
lib/less/functions/types.js | 130 ++++-----
lib/less/non-node-index.js | 2 +-
12 files changed, 559 insertions(+), 532 deletions(-)
diff --git a/lib/less/functions/color-blending.js b/lib/less/functions/color-blending.js
index c24b549..ed2fa07 100644
--- a/lib/less/functions/color-blending.js
+++ b/lib/less/functions/color-blending.js
@@ -1,74 +1,74 @@
-module.exports = function(functions, tree) {
+var Color = require("../tree/color.js"),
+ functionRegistry = require("./function-registry.js");
- // Color Blending
- // ref: http://www.w3.org/TR/compositing-1
+// Color Blending
+// ref: http://www.w3.org/TR/compositing-1
- function colorBlend(mode, color1, color2) {
- var ab = color1.alpha, cb, // backdrop
- as = color2.alpha, cs, // source
- ar, cr, r = []; // result
+function colorBlend(mode, color1, color2) {
+ var ab = color1.alpha, cb, // backdrop
+ as = color2.alpha, cs, // source
+ ar, cr, r = []; // result
- ar = as + ab * (1 - as);
- for (var i = 0; i < 3; i++) {
- cb = color1.rgb[i] / 255;
- cs = color2.rgb[i] / 255;
- cr = mode(cb, cs);
- if (ar) {
- cr = (as * cs + ab * (cb
- - as * (cb + cs - cr))) / ar;
- }
- r[i] = cr * 255;
+ ar = as + ab * (1 - as);
+ for (var i = 0; i < 3; i++) {
+ cb = color1.rgb[i] / 255;
+ cs = color2.rgb[i] / 255;
+ cr = mode(cb, cs);
+ if (ar) {
+ cr = (as * cs + ab * (cb -
+ as * (cb + cs - cr))) / ar;
}
-
- return new(tree.Color)(r, ar);
+ r[i] = cr * 255;
}
- var colorBlendModeFunctions = {
- multiply: function(cb, cs) {
- return cb * cs;
- },
- screen: function(cb, cs) {
- return cb + cs - cb * cs;
- },
- overlay: function(cb, cs) {
- cb *= 2;
- return (cb <= 1)
- ? colorBlendModeFunctions.multiply(cb, cs)
- : colorBlendModeFunctions.screen(cb - 1, cs);
- },
- softlight: function(cb, cs) {
- var d = 1, e = cb;
- if (cs > 0.5) {
- e = 1;
- d = (cb > 0.25) ? Math.sqrt(cb)
- : ((16 * cb - 12) * cb + 4) * cb;
- }
- return cb - (1 - 2 * cs) * e * (d - cb);
- },
- hardlight: function(cb, cs) {
- return colorBlendModeFunctions.overlay(cs, cb);
- },
- difference: function(cb, cs) {
- return Math.abs(cb - cs);
- },
- exclusion: function(cb, cs) {
- return cb + cs - 2 * cb * cs;
- },
+ return new(Color)(r, ar);
+}
- // non-w3c functions:
- average: function(cb, cs) {
- return (cb + cs) / 2;
- },
- negation: function(cb, cs) {
- return 1 - Math.abs(cb + cs - 1);
+var colorBlendModeFunctions = {
+ multiply: function(cb, cs) {
+ return cb * cs;
+ },
+ screen: function(cb, cs) {
+ return cb + cs - cb * cs;
+ },
+ overlay: function(cb, cs) {
+ cb *= 2;
+ return (cb <= 1)
+ ? colorBlendModeFunctions.multiply(cb, cs)
+ : colorBlendModeFunctions.screen(cb - 1, cs);
+ },
+ softlight: function(cb, cs) {
+ var d = 1, e = cb;
+ if (cs > 0.5) {
+ e = 1;
+ d = (cb > 0.25) ? Math.sqrt(cb)
+ : ((16 * cb - 12) * cb + 4) * cb;
}
- };
+ return cb - (1 - 2 * cs) * e * (d - cb);
+ },
+ hardlight: function(cb, cs) {
+ return colorBlendModeFunctions.overlay(cs, cb);
+ },
+ difference: function(cb, cs) {
+ return Math.abs(cb - cs);
+ },
+ exclusion: function(cb, cs) {
+ return cb + cs - 2 * cb * cs;
+ },
- for (var f in colorBlendModeFunctions) {
- if (colorBlendModeFunctions.hasOwnProperty(f)) {
- colorBlend[f] = colorBlend.bind(null, colorBlendModeFunctions[f]);
- }
+ // non-w3c functions:
+ average: function(cb, cs) {
+ return (cb + cs) / 2;
+ },
+ negation: function(cb, cs) {
+ return 1 - Math.abs(cb + cs - 1);
}
-
- functions.functionRegistry.addMultiple(colorBlend);
};
+
+for (var f in colorBlendModeFunctions) {
+ if (colorBlendModeFunctions.hasOwnProperty(f)) {
+ colorBlend[f] = colorBlend.bind(null, colorBlendModeFunctions[f]);
+ }
+}
+
+functionRegistry.addMultiple(colorBlend);
diff --git a/lib/less/functions/color.js b/lib/less/functions/color.js
index 1b493bc..c08aee8 100644
--- a/lib/less/functions/color.js
+++ b/lib/less/functions/color.js
@@ -1,272 +1,277 @@
-module.exports = function(functions, tree) {
- function clamp(val) {
- return Math.min(1, Math.max(0, val));
+var Dimension = require("../tree/dimension.js"),
+ Color = require("../tree/color.js"),
+ Quoted = require("../tree/quoted.js"),
+ Anonymous = require("../tree/anonymous.js"),
+ functionRegistry = require("./function-registry.js"),
+ colorFunctions;
+
+function clamp(val) {
+ return Math.min(1, Math.max(0, val));
+}
+function hsla(color) {
+ return colorFunctions.hsla(color.h, color.s, color.l, color.a);
+}
+function number(n) {
+ if (n instanceof Dimension) {
+ return parseFloat(n.unit.is('%') ? n.value / 100 : n.value);
+ } else if (typeof(n) === 'number') {
+ return n;
+ } else {
+ throw {
+ error: "RuntimeError",
+ message: "color functions take numbers as parameters"
+ };
}
- function hsla(color) {
- return colorFunctions.hsla(color.h, color.s, color.l, color.a);
+}
+function scaled(n, size) {
+ if (n instanceof Dimension && n.unit.is('%')) {
+ return parseFloat(n.value * size / 100);
+ } else {
+ return number(n);
}
- function number(n) {
- if (n instanceof tree.Dimension) {
- return parseFloat(n.unit.is('%') ? n.value / 100 : n.value);
- } else if (typeof(n) === 'number') {
- return n;
- } else {
- throw {
- error: "RuntimeError",
- message: "color functions take numbers as parameters"
- };
- }
- }
- function scaled(n, size) {
- if (n instanceof tree.Dimension && n.unit.is('%')) {
- return parseFloat(n.value * size / 100);
- } else {
- return number(n);
+}
+colorFunctions = {
+ rgb: function (r, g, b) {
+ return colorFunctions.rgba(r, g, b, 1.0);
+ },
+ rgba: function (r, g, b, a) {
+ var rgb = [r, g, b].map(function (c) { return scaled(c, 255); });
+ a = number(a);
+ return new(Color)(rgb, a);
+ },
+ hsl: function (h, s, l) {
+ return colorFunctions.hsla(h, s, l, 1.0);
+ },
+ hsla: function (h, s, l, a) {
+ function hue(h) {
+ h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
+ if (h * 6 < 1) { return m1 + (m2 - m1) * h * 6; }
+ else if (h * 2 < 1) { return m2; }
+ else if (h * 3 < 2) { return m1 + (m2 - m1) * (2/3 - h) * 6; }
+ else { return m1; }
}
- }
- var colorFunctions = {
- rgb: function (r, g, b) {
- return colorFunctions.rgba(r, g, b, 1.0);
- },
- rgba: function (r, g, b, a) {
- var rgb = [r, g, b].map(function (c) { return scaled(c, 255); });
- a = number(a);
- return new(tree.Color)(rgb, a);
- },
- hsl: function (h, s, l) {
- return colorFunctions.hsla(h, s, l, 1.0);
- },
- hsla: function (h, s, l, a) {
- function hue(h) {
- h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
- if (h * 6 < 1) { return m1 + (m2 - m1) * h * 6; }
- else if (h * 2 < 1) { return m2; }
- else if (h * 3 < 2) { return m1 + (m2 - m1) * (2/3 - h) * 6; }
- else { return m1; }
- }
- h = (number(h) % 360) / 360;
- s = clamp(number(s)); l = clamp(number(l)); a = clamp(number(a));
+ h = (number(h) % 360) / 360;
+ s = clamp(number(s)); l = clamp(number(l)); a = clamp(number(a));
- var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
- var m1 = l * 2 - m2;
+ var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
+ var m1 = l * 2 - m2;
- return colorFunctions.rgba(hue(h + 1/3) * 255,
- hue(h) * 255,
- hue(h - 1/3) * 255,
- a);
- },
+ return colorFunctions.rgba(hue(h + 1/3) * 255,
+ hue(h) * 255,
+ hue(h - 1/3) * 255,
+ a);
+ },
- hsv: function(h, s, v) {
- return colorFunctions.hsva(h, s, v, 1.0);
- },
+ hsv: function(h, s, v) {
+ return colorFunctions.hsva(h, s, v, 1.0);
+ },
- hsva: function(h, s, v, a) {
- h = ((number(h) % 360) / 360) * 360;
- s = number(s); v = number(v); a = number(a);
+ hsva: function(h, s, v, a) {
+ h = ((number(h) % 360) / 360) * 360;
+ s = number(s); v = number(v); a = number(a);
- var i, f;
- i = Math.floor((h / 60) % 6);
- f = (h / 60) - i;
+ var i, f;
+ i = Math.floor((h / 60) % 6);
+ f = (h / 60) - i;
- var vs = [v,
- v * (1 - s),
- v * (1 - f * s),
- v * (1 - (1 - f) * s)];
- var perm = [[0, 3, 1],
- [2, 0, 1],
- [1, 0, 3],
- [1, 2, 0],
- [3, 1, 0],
- [0, 1, 2]];
+ var vs = [v,
+ v * (1 - s),
+ v * (1 - f * s),
+ v * (1 - (1 - f) * s)];
+ var perm = [[0, 3, 1],
+ [2, 0, 1],
+ [1, 0, 3],
+ [1, 2, 0],
+ [3, 1, 0],
+ [0, 1, 2]];
- return colorFunctions.rgba(vs[perm[i][0]] * 255,
- vs[perm[i][1]] * 255,
- vs[perm[i][2]] * 255,
- a);
- },
+ return colorFunctions.rgba(vs[perm[i][0]] * 255,
+ vs[perm[i][1]] * 255,
+ vs[perm[i][2]] * 255,
+ a);
+ },
- hue: function (color) {
- return new(tree.Dimension)(color.toHSL().h);
- },
- saturation: function (color) {
- return new(tree.Dimension)(color.toHSL().s * 100, '%');
- },
- lightness: function (color) {
- return new(tree.Dimension)(color.toHSL().l * 100, '%');
- },
- hsvhue: function(color) {
- return new(tree.Dimension)(color.toHSV().h);
- },
- hsvsaturation: function (color) {
- return new(tree.Dimension)(color.toHSV().s * 100, '%');
- },
- hsvvalue: function (color) {
- return new(tree.Dimension)(color.toHSV().v * 100, '%');
- },
- red: function (color) {
- return new(tree.Dimension)(color.rgb[0]);
- },
- green: function (color) {
- return new(tree.Dimension)(color.rgb[1]);
- },
- blue: function (color) {
- return new(tree.Dimension)(color.rgb[2]);
- },
- alpha: function (color) {
- return new(tree.Dimension)(color.toHSL().a);
- },
- luma: function (color) {
- return new(tree.Dimension)(color.luma() * color.alpha * 100, '%');
- },
- luminance: function (color) {
- var luminance =
- (0.2126 * color.rgb[0] / 255)
- + (0.7152 * color.rgb[1] / 255)
- + (0.0722 * color.rgb[2] / 255);
+ hue: function (color) {
+ return new(Dimension)(color.toHSL().h);
+ },
+ saturation: function (color) {
+ return new(Dimension)(color.toHSL().s * 100, '%');
+ },
+ lightness: function (color) {
+ return new(Dimension)(color.toHSL().l * 100, '%');
+ },
+ hsvhue: function(color) {
+ return new(Dimension)(color.toHSV().h);
+ },
+ hsvsaturation: function (color) {
+ return new(Dimension)(color.toHSV().s * 100, '%');
+ },
+ hsvvalue: function (color) {
+ return new(Dimension)(color.toHSV().v * 100, '%');
+ },
+ red: function (color) {
+ return new(Dimension)(color.rgb[0]);
+ },
+ green: function (color) {
+ return new(Dimension)(color.rgb[1]);
+ },
+ blue: function (color) {
+ return new(Dimension)(color.rgb[2]);
+ },
+ alpha: function (color) {
+ return new(Dimension)(color.toHSL().a);
+ },
+ luma: function (color) {
+ return new(Dimension)(color.luma() * color.alpha * 100, '%');
+ },
+ luminance: function (color) {
+ var luminance =
+ (0.2126 * color.rgb[0] / 255)
+ + (0.7152 * color.rgb[1] / 255)
+ + (0.0722 * color.rgb[2] / 255);
- return new(tree.Dimension)(luminance * color.alpha * 100, '%');
- },
- saturate: function (color, amount) {
- // filter: saturate(3.2);
- // should be kept as is, so check for color
- if (!color.rgb) {
- return null;
- }
- var hsl = color.toHSL();
+ return new(Dimension)(luminance * color.alpha * 100, '%');
+ },
+ saturate: function (color, amount) {
+ // filter: saturate(3.2);
+ // should be kept as is, so check for color
+ if (!color.rgb) {
+ return null;
+ }
+ var hsl = color.toHSL();
- hsl.s += amount.value / 100;
- hsl.s = clamp(hsl.s);
- return hsla(hsl);
- },
- desaturate: function (color, amount) {
- var hsl = color.toHSL();
+ hsl.s += amount.value / 100;
+ hsl.s = clamp(hsl.s);
+ return hsla(hsl);
+ },
+ desaturate: function (color, amount) {
+ var hsl = color.toHSL();
- hsl.s -= amount.value / 100;
- hsl.s = clamp(hsl.s);
- return hsla(hsl);
- },
- lighten: function (color, amount) {
- var hsl = color.toHSL();
+ hsl.s -= amount.value / 100;
+ hsl.s = clamp(hsl.s);
+ return hsla(hsl);
+ },
+ lighten: function (color, amount) {
+ var hsl = color.toHSL();
- hsl.l += amount.value / 100;
- hsl.l = clamp(hsl.l);
- return hsla(hsl);
- },
- darken: function (color, amount) {
- var hsl = color.toHSL();
+ hsl.l += amount.value / 100;
+ hsl.l = clamp(hsl.l);
+ return hsla(hsl);
+ },
+ darken: function (color, amount) {
+ var hsl = color.toHSL();
- hsl.l -= amount.value / 100;
- hsl.l = clamp(hsl.l);
- return hsla(hsl);
- },
- fadein: function (color, amount) {
- var hsl = color.toHSL();
+ hsl.l -= amount.value / 100;
+ hsl.l = clamp(hsl.l);
+ return hsla(hsl);
+ },
+ fadein: function (color, amount) {
+ var hsl = color.toHSL();
- hsl.a += amount.value / 100;
- hsl.a = clamp(hsl.a);
- return hsla(hsl);
- },
- fadeout: function (color, amount) {
- var hsl = color.toHSL();
+ hsl.a += amount.value / 100;
+ hsl.a = clamp(hsl.a);
+ return hsla(hsl);
+ },
+ fadeout: function (color, amount) {
+ var hsl = color.toHSL();
- hsl.a -= amount.value / 100;
- hsl.a = clamp(hsl.a);
- return hsla(hsl);
- },
- fade: function (color, amount) {
- var hsl = color.toHSL();
+ hsl.a -= amount.value / 100;
+ hsl.a = clamp(hsl.a);
+ return hsla(hsl);
+ },
+ fade: function (color, amount) {
+ var hsl = color.toHSL();
- hsl.a = amount.value / 100;
- hsl.a = clamp(hsl.a);
- return hsla(hsl);
- },
- spin: function (color, amount) {
- var hsl = color.toHSL();
- var hue = (hsl.h + amount.value) % 360;
+ hsl.a = amount.value / 100;
+ hsl.a = clamp(hsl.a);
+ return hsla(hsl);
+ },
+ spin: function (color, amount) {
+ var hsl = color.toHSL();
+ var hue = (hsl.h + amount.value) % 360;
- hsl.h = hue < 0 ? 360 + hue : hue;
+ hsl.h = hue < 0 ? 360 + hue : hue;
- return hsla(hsl);
- },
- //
- // Copyright (c) 2006-2009 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
- // http://sass-lang.com
- //
- mix: function (color1, color2, weight) {
- if (!weight) {
- weight = new(tree.Dimension)(50);
- }
- var p = weight.value / 100.0;
- var w = p * 2 - 1;
- var a = color1.toHSL().a - color2.toHSL().a;
+ return hsla(hsl);
+ },
+ //
+ // Copyright (c) 2006-2009 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
+ // http://sass-lang.com
+ //
+ mix: function (color1, color2, weight) {
+ if (!weight) {
+ weight = new(Dimension)(50);
+ }
+ var p = weight.value / 100.0;
+ var w = p * 2 - 1;
+ var a = color1.toHSL().a - color2.toHSL().a;
- var w1 = (((w * a == -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
- var w2 = 1 - w1;
+ var w1 = (((w * a == -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
+ var w2 = 1 - w1;
- var rgb = [color1.rgb[0] * w1 + color2.rgb[0] * w2,
- color1.rgb[1] * w1 + color2.rgb[1] * w2,
- color1.rgb[2] * w1 + color2.rgb[2] * w2];
+ var rgb = [color1.rgb[0] * w1 + color2.rgb[0] * w2,
+ color1.rgb[1] * w1 + color2.rgb[1] * w2,
+ color1.rgb[2] * w1 + color2.rgb[2] * w2];
- var alpha = color1.alpha * p + color2.alpha * (1 - p);
+ var alpha = color1.alpha * p + color2.alpha * (1 - p);
- return new(tree.Color)(rgb, alpha);
- },
- greyscale: function (color) {
- return colorFunctions.desaturate(color, new(tree.Dimension)(100));
- },
- contrast: function (color, dark, light, threshold) {
- // filter: contrast(3.2);
- // should be kept as is, so check for color
- if (!color.rgb) {
- return null;
- }
- if (typeof light === 'undefined') {
- light = colorFunctions.rgba(255, 255, 255, 1.0);
- }
- if (typeof dark === 'undefined') {
- dark = colorFunctions.rgba(0, 0, 0, 1.0);
- }
- //Figure out which is actually light and dark!
- if (dark.luma() > light.luma()) {
- var t = light;
- light = dark;
- dark = t;
- }
- if (typeof threshold === 'undefined') {
- threshold = 0.43;
- } else {
- threshold = number(threshold);
- }
- if (color.luma() < threshold) {
- return light;
- } else {
- return dark;
- }
- },
- argb: function (color) {
- return new(tree.Anonymous)(color.toARGB());
- },
- color: function(c) {
- if ((c instanceof tree.Quoted) &&
- (/^#([a-f0-9]{6}|[a-f0-9]{3})$/i.test(c.value))) {
- return new(tree.Color)(c.value.slice(1));
- }
- if ((c instanceof tree.Color) || (c = tree.Color.fromKeyword(c.value))) {
- c.keyword = undefined;
- return c;
- }
- throw {
- type: "Argument",
- message: "argument must be a color keyword or 3/6 digit hex e.g. #FFF"
- };
- },
- tint: function(color, amount) {
- return colorFunctions.mix(colorFunctions.rgb(255,255,255), color, amount);
- },
- shade: function(color, amount) {
- return colorFunctions.mix(colorFunctions.rgb(0, 0, 0), color, amount);
+ return new(Color)(rgb, alpha);
+ },
+ greyscale: function (color) {
+ return colorFunctions.desaturate(color, new(Dimension)(100));
+ },
+ contrast: function (color, dark, light, threshold) {
+ // filter: contrast(3.2);
+ // should be kept as is, so check for color
+ if (!color.rgb) {
+ return null;
+ }
+ if (typeof light === 'undefined') {
+ light = colorFunctions.rgba(255, 255, 255, 1.0);
}
- };
- functions.functionRegistry.addMultiple(colorFunctions);
+ if (typeof dark === 'undefined') {
+ dark = colorFunctions.rgba(0, 0, 0, 1.0);
+ }
+ //Figure out which is actually light and dark!
+ if (dark.luma() > light.luma()) {
+ var t = light;
+ light = dark;
+ dark = t;
+ }
+ if (typeof threshold === 'undefined') {
+ threshold = 0.43;
+ } else {
+ threshold = number(threshold);
+ }
+ if (color.luma() < threshold) {
+ return light;
+ } else {
+ return dark;
+ }
+ },
+ argb: function (color) {
+ return new(Anonymous)(color.toARGB());
+ },
+ color: function(c) {
+ if ((c instanceof Quoted) &&
+ (/^#([a-f0-9]{6}|[a-f0-9]{3})$/i.test(c.value))) {
+ return new(Color)(c.value.slice(1));
+ }
+ if ((c instanceof Color) || (c = Color.fromKeyword(c.value))) {
+ c.keyword = undefined;
+ return c;
+ }
+ throw {
+ type: "Argument",
+ message: "argument must be a color keyword or 3/6 digit hex e.g. #FFF"
+ };
+ },
+ tint: function(color, amount) {
+ return colorFunctions.mix(colorFunctions.rgb(255,255,255), color, amount);
+ },
+ shade: function(color, amount) {
+ return colorFunctions.mix(colorFunctions.rgb(0, 0, 0), color, amount);
+ }
};
+functionRegistry.addMultiple(colorFunctions);
diff --git a/lib/less/functions/data-uri.js b/lib/less/functions/data-uri.js
index c60be3a..47e1273 100644
--- a/lib/less/functions/data-uri.js
+++ b/lib/less/functions/data-uri.js
@@ -1,8 +1,12 @@
-module.exports = function(functions, tree, less) {
- functions.functionRegistry.add("data-uri", function(mimetypeNode, filePathNode) {
+module.exports = function(less) {
+ var Anonymous = require("../tree/anonymous.js"),
+ URL = require("../tree/url.js"),
+ functionRegistry = require("./function-registry.js");
+
+ functionRegistry.add("data-uri", function(mimetypeNode, filePathNode) {
if (!less.environment.supportsDataURI(this.env)) {
- return new tree.URL(filePathNode || mimetypeNode, this.currentFileInfo).eval(this.env);
+ return new URL(filePathNode || mimetypeNode, this.currentFileInfo).eval(this.env);
}
var mimetype = mimetypeNode.value;
@@ -56,7 +60,7 @@ module.exports = function(functions, tree, less) {
console.warn("Skipped data-uri embedding of %s because its size (%dKB) exceeds IE8-safe %dKB!", filePath, fileSizeInKB, DATA_URI_MAX_KB);
}
- return new tree.URL(filePathNode || mimetypeNode, this.currentFileInfo).eval(this.env);
+ return new URL(filePathNode || mimetypeNode, this.currentFileInfo).eval(this.env);
}
}
@@ -64,6 +68,6 @@ module.exports = function(functions, tree, less) {
: encodeURIComponent(buf);
var uri = "\"data:" + mimetype + ',' + buf + fragment + "\"";
- return new(tree.URL)(new(tree.Anonymous)(uri));
+ return new(URL)(new(Anonymous)(uri));
});
};
diff --git a/lib/less/functions/default.js b/lib/less/functions/default.js
index ee256c7..8b97e7a 100644
--- a/lib/less/functions/default.js
+++ b/lib/less/functions/default.js
@@ -1,4 +1,5 @@
-var Keyword = require("../tree/keyword.js");
+var Keyword = require("../tree/keyword.js"),
+ functionRegistry = require("./function-registry.js");
var defaultFunc = {
eval: function () {
@@ -20,4 +21,7 @@ var defaultFunc = {
this.value_ = this.error_ = null;
}
};
+
+functionRegistry.add("default", defaultFunc.eval.bind(defaultFunc));
+
module.exports = defaultFunc;
diff --git a/lib/less/functions/function-caller.js b/lib/less/functions/function-caller.js
index da86d51..753c148 100644
--- a/lib/less/functions/function-caller.js
+++ b/lib/less/functions/function-caller.js
@@ -1,7 +1,8 @@
-module.exports = function(functions) {
+var functionRegistry = require("./function-registry.js");
+
var functionCaller = function(name, env, currentFileInfo) {
this.name = name.toLowerCase();
- this.function = functions.functionRegistry.get(this.name);
+ this.function = functionRegistry.get(this.name);
this.env = env;
this.currentFileInfo = currentFileInfo;
};
@@ -11,5 +12,5 @@ functionCaller.prototype.isValid = function() {
functionCaller.prototype.call = function(args) {
return this.function.apply(this, args);
};
-return functionCaller;
-};
+
+module.exports = functionCaller;
diff --git a/lib/less/functions/index.js b/lib/less/functions/index.js
index 4600500..261b4bc 100644
--- a/lib/less/functions/index.js
+++ b/lib/less/functions/index.js
@@ -1,22 +1,19 @@
-module.exports = function(less, tree) {
- var functions = {};
- functions.functionRegistry = require("./function-registry.js");
- functions.functionCaller = require("./function-caller.js")(functions);
+module.exports = function(less) {
+ var functions = {
+ functionRegistry: require("./function-registry.js"),
+ functionCaller: require("./function-caller.js")
+ };
//register functions
- require("./color.js")(functions, tree);
- require("./color-blending.js")(functions, tree);
- require("./data-uri.js")(functions, tree, less);
-
- var defaultFunc = require("./default.js");
- functions.functionRegistry.add("default", defaultFunc.eval.bind(defaultFunc));
- tree.defaultFunc = defaultFunc;
-
- require("./math.js")(functions, tree);
- require("./number.js")(functions, tree);
- require("./string.js")(functions, tree);
- require("./svg.js")(functions, tree, less);
- require("./types.js")(functions, tree);
+ require("./default.js");
+ require("./color.js");
+ require("./color-blending.js");
+ require("./data-uri.js")(less);
+ require("./math.js");
+ require("./number.js");
+ require("./string.js");
+ require("./svg.js")(less);
+ require("./types.js");
return functions;
};
diff --git a/lib/less/functions/math.js b/lib/less/functions/math.js
index 4e56d8d..9474273 100644
--- a/lib/less/functions/math.js
+++ b/lib/less/functions/math.js
@@ -1,42 +1,41 @@
-module.exports = function(functions, tree) {
+var Dimension = require("../tree/dimension.js"),
+ functionRegistry = require("./function-registry.js");
- var mathFunctions = {
- // name, unit
- ceil: null,
- floor: null,
- sqrt: null,
- abs: null,
- tan: "",
- sin: "",
- cos: "",
- atan: "rad",
- asin: "rad",
- acos: "rad"
- };
+var mathFunctions = {
+ // name, unit
+ ceil: null,
+ floor: null,
+ sqrt: null,
+ abs: null,
+ tan: "",
+ sin: "",
+ cos: "",
+ atan: "rad",
+ asin: "rad",
+ acos: "rad"
+};
- function _math(fn, unit, n) {
- if (!(n instanceof tree.Dimension)) {
- throw { type: "Argument", message: "argument must be a number" };
- }
- if (unit == null) {
- unit = n.unit;
- } else {
- n = n.unify();
- }
- return new(tree.Dimension)(fn(parseFloat(n.value)), unit);
+function _math(fn, unit, n) {
+ if (!(n instanceof Dimension)) {
+ throw { type: "Argument", message: "argument must be a number" };
}
-
- for (var f in mathFunctions) {
- if (mathFunctions.hasOwnProperty(f)) {
- mathFunctions[f] = _math.bind(null, Math[f], mathFunctions[f]);
- }
+ if (unit == null) {
+ unit = n.unit;
+ } else {
+ n = n.unify();
}
+ return new(Dimension)(fn(parseFloat(n.value)), unit);
+}
- mathFunctions.round = function (n, f) {
- var fraction = typeof(f) === "undefined" ? 0 : f.value;
- return _math(function(num) { return num.toFixed(fraction); }, null, n);
- };
-
- functions.functionRegistry.addMultiple(mathFunctions);
+for (var f in mathFunctions) {
+ if (mathFunctions.hasOwnProperty(f)) {
+ mathFunctions[f] = _math.bind(null, Math[f], mathFunctions[f]);
+ }
+}
+mathFunctions.round = function (n, f) {
+ var fraction = typeof(f) === "undefined" ? 0 : f.value;
+ return _math(function(num) { return num.toFixed(fraction); }, null, n);
};
+
+functionRegistry.addMultiple(mathFunctions);
diff --git a/lib/less/functions/number.js b/lib/less/functions/number.js
index dc6fdfd..0eb84c9 100644
--- a/lib/less/functions/number.js
+++ b/lib/less/functions/number.js
@@ -1,74 +1,76 @@
-module.exports = function(functions, tree) {
- var minMax = function (isMin, args) {
- args = Array.prototype.slice.call(args);
- switch(args.length) {
- case 0: throw { type: "Argument", message: "one or more arguments required" };
- }
- var i, j, current, currentUnified, referenceUnified, unit, unitStatic, unitClone,
- order = [], // elems only contains original argument values.
- values = {}; // key is the unit.toString() for unified tree.Dimension values,
- // value is the index into the order array.
- for (i = 0; i < args.length; i++) {
- current = args[i];
- if (!(current instanceof tree.Dimension)) {
- if(Array.isArray(args[i].value)) {
- Array.prototype.push.apply(args, Array.prototype.slice.call(args[i].value));
- }
- continue;
- }
- currentUnified = current.unit.toString() === "" && unitClone !== undefined ? new(tree.Dimension)(current.value, unitClone).unify() : current.unify();
- unit = currentUnified.unit.toString() === "" && unitStatic !== undefined ? unitStatic : currentUnified.unit.toString();
- unitStatic = unit !== "" && unitStatic === undefined || unit !== "" && order[0].unify().unit.toString() === "" ? unit : unitStatic;
- unitClone = unit !== "" && unitClone === undefined ? current.unit.toString() : unitClone;
- j = values[""] !== undefined && unit !== "" && unit === unitStatic ? values[""] : values[unit];
- if (j === undefined) {
- if(unitStatic !== undefined && unit !== unitStatic) {
- throw{ type: "Argument", message: "incompatible types" };
- }
- values[unit] = order.length;
- order.push(current);
- continue;
- }
- referenceUnified = order[j].unit.toString() === "" && unitClone !== undefined ? new(tree.Dimension)(order[j].value, unitClone).unify() : order[j].unify();
- if ( isMin && currentUnified.value < referenceUnified.value ||
- !isMin && currentUnified.value > referenceUnified.value) {
- order[j] = current;
+var Dimension = require("../tree/dimension.js"),
+ Anonymous = require("../tree/anonymous.js"),
+ functionRegistry = require("./function-registry.js");
+
+var minMax = function (isMin, args) {
+ args = Array.prototype.slice.call(args);
+ switch(args.length) {
+ case 0: throw { type: "Argument", message: "one or more arguments required" };
+ }
+ var i, j, current, currentUnified, referenceUnified, unit, unitStatic, unitClone,
+ order = [], // elems only contains original argument values.
+ values = {}; // key is the unit.toString() for unified Dimension values,
+ // value is the index into the order array.
+ for (i = 0; i < args.length; i++) {
+ current = args[i];
+ if (!(current instanceof Dimension)) {
+ if(Array.isArray(args[i].value)) {
+ Array.prototype.push.apply(args, Array.prototype.slice.call(args[i].value));
}
+ continue;
}
- if (order.length == 1) {
- return order[0];
- }
- args = order.map(function (a) { return a.toCSS(this.env); }).join(this.env.compress ? "," : ", ");
- return new(tree.Anonymous)((isMin ? "min" : "max") + "(" + args + ")");
- };
- functions.functionRegistry.addMultiple({
- min: function () {
- return minMax(true, arguments);
- },
- max: function () {
- return minMax(false, arguments);
- },
- convert: function (val, unit) {
- return val.convertTo(unit.value);
- },
- pi: function () {
- return new(tree.Dimension)(Math.PI);
- },
- mod: function(a, b) {
- return new(tree.Dimension)(a.value % b.value, a.unit);
- },
- pow: function(x, y) {
- if (typeof x === "number" && typeof y === "number") {
- x = new(tree.Dimension)(x);
- y = new(tree.Dimension)(y);
- } else if (!(x instanceof tree.Dimension) || !(y instanceof tree.Dimension)) {
- throw { type: "Argument", message: "arguments must be numbers" };
+ currentUnified = current.unit.toString() === "" && unitClone !== undefined ? new(Dimension)(current.value, unitClone).unify() : current.unify();
+ unit = currentUnified.unit.toString() === "" && unitStatic !== undefined ? unitStatic : currentUnified.unit.toString();
+ unitStatic = unit !== "" && unitStatic === undefined || unit !== "" && order[0].unify().unit.toString() === "" ? unit : unitStatic;
+ unitClone = unit !== "" && unitClone === undefined ? current.unit.toString() : unitClone;
+ j = values[""] !== undefined && unit !== "" && unit === unitStatic ? values[""] : values[unit];
+ if (j === undefined) {
+ if(unitStatic !== undefined && unit !== unitStatic) {
+ throw{ type: "Argument", message: "incompatible types" };
}
-
- return new(tree.Dimension)(Math.pow(x.value, y.value), x.unit);
- },
- percentage: function (n) {
- return new(tree.Dimension)(n.value * 100, '%');
+ values[unit] = order.length;
+ order.push(current);
+ continue;
+ }
+ referenceUnified = order[j].unit.toString() === "" && unitClone !== undefined ? new(Dimension)(order[j].value, unitClone).unify() : order[j].unify();
+ if ( isMin && currentUnified.value < referenceUnified.value ||
+ !isMin && currentUnified.value > referenceUnified.value) {
+ order[j] = current;
}
- });
+ }
+ if (order.length == 1) {
+ return order[0];
+ }
+ args = order.map(function (a) { return a.toCSS(this.env); }).join(this.env.compress ? "," : ", ");
+ return new(Anonymous)((isMin ? "min" : "max") + "(" + args + ")");
};
+functionRegistry.addMultiple({
+ min: function () {
+ return minMax(true, arguments);
+ },
+ max: function () {
+ return minMax(false, arguments);
+ },
+ convert: function (val, unit) {
+ return val.convertTo(unit.value);
+ },
+ pi: function () {
+ return new(Dimension)(Math.PI);
+ },
+ mod: function(a, b) {
+ return new(Dimension)(a.value % b.value, a.unit);
+ },
+ pow: function(x, y) {
+ if (typeof x === "number" && typeof y === "number") {
+ x = new(Dimension)(x);
+ y = new(Dimension)(y);
+ } else if (!(x instanceof Dimension) || !(y instanceof Dimension)) {
+ throw { type: "Argument", message: "arguments must be numbers" };
+ }
+
+ return new(Dimension)(Math.pow(x.value, y.value), x.unit);
+ },
+ percentage: function (n) {
+ return new(Dimension)(n.value * 100, '%');
+ }
+});
diff --git a/lib/less/functions/string.js b/lib/less/functions/string.js
index 9851c89..a954727 100644
--- a/lib/less/functions/string.js
+++ b/lib/less/functions/string.js
@@ -1,30 +1,33 @@
-module.exports = function(functions, tree) {
- functions.functionRegistry.addMultiple({
- e: function (str) {
- return new(tree.Anonymous)(str instanceof tree.JavaScript ? str.evaluated : str.value);
- },
- escape: function (str) {
- return new(tree.Anonymous)(encodeURI(str.value).replace(/=/g, "%3D").replace(/:/g, "%3A").replace(/#/g, "%23").replace(/;/g, "%3B").replace(/\(/g, "%28").replace(/\)/g, "%29"));
- },
- replace: function (string, pattern, replacement, flags) {
- var result = string.value;
+var Quoted = require("../tree/quoted.js"),
+ Anonymous = require("../tree/anonymous.js"),
+ JavaScript = require("../tree/javascript.js"),
+ functionRegistry = require("./function-registry.js");
- result = result.replace(new RegExp(pattern.value, flags ? flags.value : ''), replacement.value);
- return new(tree.Quoted)(string.quote || '', result, string.escaped);
- },
- '%': function (string /* arg, arg, ...*/) {
- var args = Array.prototype.slice.call(arguments, 1),
- result = string.value;
+functionRegistry.addMultiple({
+ e: function (str) {
+ return new(Anonymous)(str instanceof JavaScript ? str.evaluated : str.value);
+ },
+ escape: function (str) {
+ return new(Anonymous)(encodeURI(str.value).replace(/=/g, "%3D").replace(/:/g, "%3A").replace(/#/g, "%23").replace(/;/g, "%3B").replace(/\(/g, "%28").replace(/\)/g, "%29"));
+ },
+ replace: function (string, pattern, replacement, flags) {
+ var result = string.value;
- for (var i = 0; i < args.length; i++) {
- /*jshint loopfunc:true */
- result = result.replace(/%[sda]/i, function(token) {
- var value = token.match(/s/i) ? args[i].value : args[i].toCSS();
- return token.match(/[A-Z]$/) ? encodeURIComponent(value) : value;
- });
- }
- result = result.replace(/%%/g, '%');
- return new(tree.Quoted)(string.quote || '', result, string.escaped);
+ result = result.replace(new RegExp(pattern.value, flags ? flags.value : ''), replacement.value);
+ return new(Quoted)(string.quote || '', result, string.escaped);
+ },
+ '%': function (string /* arg, arg, ...*/) {
+ var args = Array.prototype.slice.call(arguments, 1),
+ result = string.value;
+
+ for (var i = 0; i < args.length; i++) {
+ /*jshint loopfunc:true */
+ result = result.replace(/%[sda]/i, function(token) {
+ var value = token.match(/s/i) ? args[i].value : args[i].toCSS();
+ return token.match(/[A-Z]$/) ? encodeURIComponent(value) : value;
+ });
}
- });
-};
+ result = result.replace(/%%/g, '%');
+ return new(Quoted)(string.quote || '', result, string.escaped);
+ }
+});
diff --git a/lib/less/functions/svg.js b/lib/less/functions/svg.js
index 0cd71d5..439a218 100644
--- a/lib/less/functions/svg.js
+++ b/lib/less/functions/svg.js
@@ -1,5 +1,11 @@
-module.exports = function(functions, tree, less) {
- functions.functionRegistry.add("svg-gradient", function(direction) {
+module.exports = function(less) {
+ var Dimension = require("../tree/dimension.js"),
+ Color = require("../tree/color.js"),
+ Anonymous = require("../tree/anonymous.js"),
+ URL = require("../tree/url.js"),
+ functionRegistry = require("./function-registry.js");
+
+ functionRegistry.add("svg-gradient", function(direction) {
function throwArgumentDescriptor() {
throw { type: "Argument", message: "svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position]" };
@@ -53,7 +59,7 @@ module.exports = function(functions, tree, less) {
position = undefined;
}
- if (!(color instanceof tree.Color) || (!((i === 0 || i+1 === stops.length) && position === undefined) && !(position instanceof tree.Dimension))) {
+ if (!(color instanceof Color) || (!((i === 0 || i+1 === stops.length) && position === undefined) && !(position instanceof Dimension))) {
throwArgumentDescriptor();
}
positionValue = position ? position.toCSS(renderEnv) : i === 0 ? "0%" : "100%";
@@ -72,6 +78,6 @@ module.exports = function(functions, tree, less) {
}
returner = "'data:image/svg+xml" + (useBase64 ? ";base64" : "") + "," + returner + "'";
- return new(tree.URL)(new(tree.Anonymous)(returner));
+ return new(URL)(new(Anonymous)(returner));
});
};
diff --git a/lib/less/functions/types.js b/lib/less/functions/types.js
index 0473438..dfb51b6 100644
--- a/lib/less/functions/types.js
+++ b/lib/less/functions/types.js
@@ -1,65 +1,71 @@
-var Keyword = require("../tree/keyword.js");
-module.exports = function(functions, tree) {
- var isa = function (n, Type) {
- return (n instanceof Type) ? Keyword.True : Keyword.False;
- },
- isunit = function (n, unit) {
- return (n instanceof tree.Dimension) && n.unit.is(unit.value || unit) ? Keyword.True : Keyword.False;
- };
- functions.functionRegistry.addMultiple({
- iscolor: function (n) {
- return isa(n, tree.Color);
- },
- isnumber: function (n) {
- return isa(n, tree.Dimension);
- },
- isstring: function (n) {
- return isa(n, tree.Quoted);
- },
- iskeyword: function (n) {
- return isa(n, tree.Keyword);
- },
- isurl: function (n) {
- return isa(n, tree.URL);
- },
- ispixel: function (n) {
- return isunit(n, 'px');
- },
- ispercentage: function (n) {
- return isunit(n, '%');
- },
- isem: function (n) {
- return isunit(n, 'em');
- },
- isunit: isunit,
- unit: function (val, unit) {
- if(!(val instanceof tree.Dimension)) {
- throw { type: "Argument", message: "the first argument to unit must be a number" + (val instanceof tree.Operation ? ". Have you forgotten parenthesis?" : "") };
- }
- if (unit) {
- if (unit instanceof tree.Keyword) {
- unit = unit.value;
- } else {
- unit = unit.toCSS();
- }
+var Keyword = require("../tree/keyword.js"),
+ Dimension = require("../tree/dimension.js"),
+ Color = require("../tree/color.js"),
+ Quoted = require("../tree/quoted.js"),
+ Anonymous = require("../tree/anonymous.js"),
+ URL = require("../tree/url.js"),
+ Operation = require("../tree/operation.js"),
+ functionRegistry = require("./function-registry.js");
+
+var isa = function (n, Type) {
+ return (n instanceof Type) ? Keyword.True : Keyword.False;
+ },
+ isunit = function (n, unit) {
+ return (n instanceof Dimension) && n.unit.is(unit.value || unit) ? Keyword.True : Keyword.False;
+ };
+functionRegistry.addMultiple({
+ iscolor: function (n) {
+ return isa(n, Color);
+ },
+ isnumber: function (n) {
+ return isa(n, Dimension);
+ },
+ isstring: function (n) {
+ return isa(n, Quoted);
+ },
+ iskeyword: function (n) {
+ return isa(n, Keyword);
+ },
+ isurl: function (n) {
+ return isa(n, URL);
+ },
+ ispixel: function (n) {
+ return isunit(n, 'px');
+ },
+ ispercentage: function (n) {
+ return isunit(n, '%');
+ },
+ isem: function (n) {
+ return isunit(n, 'em');
+ },
+ isunit: isunit,
+ unit: function (val, unit) {
+ if(!(val instanceof Dimension)) {
+ throw { type: "Argument", message: "the first argument to unit must be a number" + (val instanceof Operation ? ". Have you forgotten parenthesis?" : "") };
+ }
+ if (unit) {
+ if (unit instanceof Keyword) {
+ unit = unit.value;
} else {
- unit = "";
+ unit = unit.toCSS();
}
- return new(tree.Dimension)(val.value, unit);
- },
- "get-unit": function (n) {
- return new(tree.Anonymous)(n.unit);
- },
- extract: function(values, index) {
- index = index.value - 1; // (1-based index)
- // handle non-array values as an array of length 1
- // return 'undefined' if index is invalid
- return Array.isArray(values.value) ?
- values.value[index] : Array(values)[index];
- },
- length: function(values) {
- var n = Array.isArray(values.value) ? values.value.length : 1;
- return new tree.Dimension(n);
+ } else {
+ unit = "";
}
- });
-};
+ return new(Dimension)(val.value, unit);
+ },
+ "get-unit": function (n) {
+ return new(Anonymous)(n.unit);
+ },
+ extract: function(values, index) {
+ index = index.value - 1; // (1-based index)
+ // handle non-array values as an array of length 1
+ // return 'undefined' if index is invalid
+ return Array.isArray(values.value) ?
+ values.value[index] : Array(values)[index];
+ },
+ length: function(values) {
+ var n = Array.isArray(values.value) ? values.value.length : 1;
+ return new Dimension(n);
+ }
+});
diff --git a/lib/less/non-node-index.js b/lib/less/non-node-index.js
index 2f5bcb0..a14c1c3 100644
--- a/lib/less/non-node-index.js
+++ b/lib/less/non-node-index.js
@@ -6,7 +6,7 @@ var less = {
less.tree = require('./tree/index.js');
less.visitor = require('./visitor/index.js')(less, less.tree);
less.Parser = (require('./parser'))(less, less.tree, less.visitor);
-less.functions = (require('./functions/index.js'))(less, less.tree);
+less.functions = require('./functions/index.js')(less);
less.contexts = require("./contexts.js");
less.tree.sourceMapOutput = require('./source-map-output.js')(less);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/less.js.git
More information about the Pkg-javascript-commits
mailing list