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