You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					62 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					62 lines
				
				1.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								// 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;
							 |