web-deploy/node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hsl.js

55 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

2024-04-26 18:37:00 +01:00
// HSL to RGB converter. Both methods adapted from:
// http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
function hslToRgb(h, s, l) {
var r, g, b;
// normalize hue orientation b/w 0 and 360 degrees
h %= 360;
if (h < 0) { h += 360; }
h = ~~h / 360;
if (s < 0) { s = 0; } else if (s > 100) { s = 100; }
s = ~~s / 100;
if (l < 0) { l = 0; } else if (l > 100) { l = 100; }
l = ~~l / 100;
if (s === 0) {
r = g = b = l; // achromatic
} else {
var q = l < 0.5
? l * (1 + s)
: l + s - l * s;
var p = 2 * l - q;
r = hueToRgb(p, q, h + 1 / 3);
g = hueToRgb(p, q, h);
b = hueToRgb(p, q, h - 1 / 3);
}
return [~~(r * 255), ~~(g * 255), ~~(b * 255)];
}
function hueToRgb(p, q, t) {
if (t < 0) { t += 1; }
if (t > 1) { t -= 1; }
if (t < 1 / 6) { return p + (q - p) * 6 * t; }
if (t < 1 / 2) { return q; }
if (t < 2 / 3) { return p + (q - p) * (2 / 3 - t) * 6; }
return p;
}
function shortenHsl(hue, saturation, lightness) {
var asRgb = hslToRgb(hue, saturation, lightness);
var redAsHex = asRgb[0].toString(16);
var greenAsHex = asRgb[1].toString(16);
var blueAsHex = asRgb[2].toString(16);
return '#'
+ ((redAsHex.length == 1 ? '0' : '') + redAsHex)
+ ((greenAsHex.length == 1 ? '0' : '') + greenAsHex)
+ ((blueAsHex.length == 1 ? '0' : '') + blueAsHex);
}
module.exports = shortenHsl;