// from http://bl.ocks.org/3687826 module.exports = function(config) { var columns = []; var dg = function(selection) { if (columns.length == 0) columns = d3.keys(selection.data()[0][0]); // header selection.selectAll(".header") .data([true]) .enter().append("div") .attr("class", "header") var header = selection.select(".header") .selectAll(".cell") .data(columns); header.enter().append("div") .attr("class", function(d,i) { return "col-" + i; }) .classed("cell", true) selection.selectAll(".header .cell") .text(function(d) { return d; }); header.exit().remove(); // rows var rows = selection.selectAll(".row") .data(function(d) { return d; }) rows.enter().append("div") .attr("class", "row") rows.exit().remove(); var cells = selection.selectAll(".row").selectAll(".cell") .data(function(d) { return columns.map(function(col){return d[col];}) }) // cells cells.enter().append("div") .attr("class", function(d,i) { return "col-" + i; }) .classed("cell", true) cells.exit().remove(); selection.selectAll(".cell") .text(function(d) { return d; }); return dg; }; dg.columns = function(_) { if (!arguments.length) return columns; columns = _; return this; }; return dg; };