{
const svg = d3.create("svg")
.attr("viewBox", [0, 0, width, height])
.style("font", "9px sans-serif");
var rectSize = 30;
const data = d3.range(17);
for(var row=0; row<data.length; row++) {
const parts = svg.append("g")
.selectAll('.element')
.data(data)
.join("g")
.attr("class", "element")
.attr("transform", (d,i) => `translate(${i*rectSize},${row*rectSize})`);
parts.append('rect')
.attr('fill', (d,i) => (i+row) % 2 ? '#A0D733' : '#4FBB81')
.attr('width', rectSize)
.attr('height', rectSize)
}
var series = [0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1]
for(var row=0; row<data.length-1; row++) {
const parts = svg.append("g")
.selectAll('.element')
.data(data)
.join("g")
.attr("class", "element")
.attr("opacity", (d,i) => (i < data.length - 1) ? 1 : 0)
.attr("transform", (d,i) => `translate(${i*rectSize},${row*rectSize})`);
const size = 20;
const offset = 4;
parts.append('path')
.attr('transform', `translate(${rectSize},${rectSize-offset})`)
.attr('fill' , (d,i) => series[i] ? '#CF0099' : 'white')
.attr('d', d3.symbol().type(d3.symbolDiamond).size(size));
parts.append('path')
.attr('transform', `translate(${rectSize},${rectSize+offset})`)
.attr('fill' , (d,i) => series[i] ? '#CF0099' : 'white')
.attr('d', d3.symbol().type(d3.symbolDiamond).size(size));
parts.append('path')
.attr('transform', `translate(${rectSize+offset},${rectSize}) rotate(-90)`)
.attr('fill' , (d,i) => series[i] ? '#CF0099' : 'white')
.attr('d', d3.symbol().type(d3.symbolDiamond).size(size));
parts.append('path')
.attr('transform', `translate(${rectSize-offset},${rectSize}) rotate(90)`)
.attr('fill' , (d,i) => series[i] ? '#CF0099' : 'white')
.attr('d', d3.symbol().type(d3.symbolDiamond).size(size));
series = arrayRotate(series, true);
}
return svg.node();
}