|
(function() { |
|
var c_axis, c_line, c_y, h_axis, h_line, h_y, l_axis, l_line, l_y, palette, svg, x; |
|
|
|
palette = d3.range(256).map(function(i) { |
|
return d3.hsl(360 * i / 256, 1, 0.5); |
|
}); |
|
|
|
svg = d3.select('svg'); |
|
|
|
svg.selectAll('.colored_band').data(palette).enter().append('rect').attr('class', 'colored_band').attr('x', function(d, i) { |
|
return 32 + 3.5 * i; |
|
}).attr('y', 21).attr('width', 3.5).attr('height', 120).attr('fill', function(d) { |
|
return d; |
|
}); |
|
|
|
svg.selectAll('.hue_band').data(palette).enter().append('rect').attr('class', 'hue_band').attr('x', function(d, i) { |
|
return 32 + 3.5 * i; |
|
}).attr('y', 166).attr('width', 3.5).attr('height', 60).attr('fill', function(d) { |
|
var hcl; |
|
|
|
hcl = d3.hcl(d); |
|
hcl.c = 60; |
|
hcl.l = 60; |
|
return hcl; |
|
}); |
|
|
|
svg.selectAll('.chroma_band').data(palette).enter().append('rect').attr('class', 'chroma_band').attr('x', function(d, i) { |
|
return 32 + 3.5 * i; |
|
}).attr('y', 237).attr('width', 3.5).attr('height', 116).attr('fill', function(d) { |
|
var hcl; |
|
|
|
hcl = d3.hcl(d); |
|
hcl.l = hcl.c / 1.4; |
|
hcl.h = 80; |
|
hcl.c = 25; |
|
return hcl; |
|
}); |
|
|
|
svg.selectAll('.luminance_band').data(palette).enter().append('rect').attr('class', 'luminance_band').attr('x', function(d, i) { |
|
return 32 + 3.5 * i; |
|
}).attr('y', 364).attr('width', 3.5).attr('height', 116).attr('fill', function(d) { |
|
var hcl; |
|
|
|
hcl = d3.hcl(d); |
|
hcl.c = 0; |
|
return hcl; |
|
}); |
|
|
|
x = d3.scale.linear().domain([0, 255]).range([32, 928]); |
|
|
|
h_y = d3.scale.linear().domain([0, 360]).range([166 + 60, 166]); |
|
|
|
c_y = d3.scale.linear().domain([0, 150]).range([237 + 116, 237]); |
|
|
|
l_y = d3.scale.linear().domain([0, 100]).range([364 + 116, 364]); |
|
|
|
h_line = d3.svg.line().x(function(_, i) { |
|
return x(i); |
|
}).y(function(d) { |
|
var h; |
|
|
|
h = d3.hcl(d).h; |
|
return h_y(h > 0 ? h : h + 360); |
|
}); |
|
|
|
c_line = d3.svg.line().x(function(_, i) { |
|
return x(i); |
|
}).y(function(d) { |
|
return c_y(d3.hcl(d).c); |
|
}); |
|
|
|
l_line = d3.svg.line().x(function(_, i) { |
|
return x(i); |
|
}).y(function(d) { |
|
return l_y(d3.hcl(d).l); |
|
}); |
|
|
|
svg.append('path').datum(palette).attr('class', 'hue').attr('d', h_line); |
|
|
|
svg.append('path').datum(palette).attr('class', 'chroma').attr('d', c_line); |
|
|
|
svg.append('path').datum(palette).attr('class', 'luminance').attr('d', l_line); |
|
|
|
h_axis = d3.svg.axis().scale(h_y).tickValues([0, 360]).orient('right').tickSize(3, 5); |
|
|
|
c_axis = d3.svg.axis().scale(c_y).ticks(4).orient('right').tickSize(3, 5); |
|
|
|
l_axis = d3.svg.axis().scale(l_y).ticks(2).orient('right').tickSize(3, 5); |
|
|
|
svg.append('g').attr('class', 'axis').attr('transform', 'translate(932,0)').call(h_axis); |
|
|
|
svg.append('g').attr('class', 'axis').attr('transform', 'translate(932,0)').call(c_axis); |
|
|
|
svg.append('g').attr('class', 'axis').attr('transform', 'translate(932,0)').call(l_axis); |
|
|
|
}).call(this); |