46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
if (typeof(require) !== 'undefined') { var tree = require('less/tree') }
|
|
|
|
tree.functions = {
|
|
rgb: function (r, g, b) {
|
|
return this.rgba(r, g, b, 1.0);
|
|
},
|
|
rgba: function (r, g, b, a) {
|
|
var rgb = [r, g, b].map(function (c) { return number(c) }),
|
|
a = number(a);
|
|
return new(tree.Color)(rgb, a);
|
|
},
|
|
hsl: function (h, s, l) {
|
|
return this.hsla(h, s, l, 1.0);
|
|
},
|
|
hsla: function (h, s, l, a) {
|
|
h = number(h); s = number(s);
|
|
l = number(l); a = number(a);
|
|
|
|
var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
|
|
var m1 = l * 2 - m2;
|
|
|
|
return this.rgba(hue(h + 1/3), hue(h), hue(h - 1/3), 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;
|
|
}
|
|
}
|
|
};
|
|
|
|
function number(n) {
|
|
if (n instanceof tree.Dimension) {
|
|
return parseFloat(n.value);
|
|
} else if (typeof(n) === 'number') {
|
|
return n;
|
|
} else {
|
|
throw {
|
|
error: "RuntimeError",
|
|
message: "color functions take numbers as parameters"
|
|
};
|
|
}
|
|
}
|