rgb to hsl test broken
by J. Jones
HTML
<button id='foo' onclick='test()'>clear console</button>
<div id="console">console log type thing</div>
<p>
JavaScript
$(document).ready(function(){
function clearConsole() {
$('#console').html(" ");
}
function log(msg) {
var oldmsg = $('#console').html();
var newmsg = msg + "<br>" + oldmsg;
$('#console').html(newmsg);
}
});
var g_ = Object;
g_.hexDigits = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
function test() {
log("test starting");
clearConsole();
var color = "#000080";
log("color is:"+color);
var r = hex2rgb(color);
log("rgb is:"+r);
var hsl = rgb2hsl(r);
log("hsl is:"+hsl);
var r2 = hsl2rgb(hsl);
log("r2 is:"+r2);
var h = rgb2hex(r2);
log("hex is:"+h);
if ( color !== h ) {
log("NOT matched! " + color + " vs " + h );
}
}
// returns h,s,l in range of 0-1
function rgb2hsl(rgbin) {
var rgb = rgbin.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
log("rgb2hsl:matched:"+rgb);
var dred = rgb[1]/255.0;
var dgreen = rgb[2]/255.0;
var dblue = rgb[3]/255.0;
log("rgb2hsl:dred:"+dred+",dgreen:"+dgreen+",dblue:"+dblue);
return rgbToHsl(dred,dgreen,dblue);
}
function rgbToHsl(r, g, b){
r /= 255, g /= 255, b /= 255;
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
if(max == min){
h = s = 0; // achromatic
}else{
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch(max){
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h /= 6;
}
var ret = "hsl("+h+", "+s+", "+l+")";
log("rgbToHsl returning: " + ret );
return ret;
}
function hsl2rgb(hslin) {
log("hsl2rgb:hsl:" + hslin );
var hsl = hslin.match(/^hsl\(([\.\d]+),\s*([\.\d]+),\s*([\.\d]+)\)$/);
log("hsl matched is: " + hsl );
var dhue = parseFloat(hsl[1]);
var dsat = parseFloat(hsl[2]);
var dlightness = parseFloat(hsl[3]);
...