UNPKG

d3

Version:

A small, free JavaScript library for manipulating documents based on data.

48 lines (39 loc) 1.06 kB
/** * @param {number=} s * @param {number=} l */ d3.hsl = function(h, s, l) { return arguments.length == 1 ? d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : d3_hsl(+h, +s, +l); }; function d3_hsl(h, s, l) { return {h: h, s: s, l: l, toString: d3_hsl_format}; } /** @this d3_hsl */ function d3_hsl_format() { return "hsl(" + this.h + "," + this.s * 100 + "%," + this.l * 100 + "%)"; } function d3_hsl_rgb(h, s, l) { var m1, m2; /* Some simple corrections for h, s and l. */ h = h % 360; if (h < 0) h += 360; s = s < 0 ? 0 : s > 1 ? 1 : s; l = l < 0 ? 0 : l > 1 ? 1 : l; /* From FvD 13.37, CSS Color Module Level 3 */ m2 = l <= .5 ? l * (1 + s) : l + s - l * s; m1 = 2 * l - m2; function v(h) { if (h > 360) h -= 360; else if (h < 0) h += 360; if (h < 60) return m1 + (m2 - m1) * h / 60; if (h < 180) return m2; if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; return m1; } function vv(h) { return Math.round(v(h) * 255); } return d3_rgb(vv(h + 120), vv(h), vv(h - 120)); }