// 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;