function createList() {
const container = d3.select(DOM.element("div"));
const maxIPv4Width = 400;
const barHeight = 24;
const largestIpv4NumberOfAddresses = rows.reduce((a, c) => {
const maxInRow = c.ipv4.reduce((b, d) => {
if (d.numberOfAddresses > b) b = d.numberOfAddresses;
return b;
}, 0);
if (maxInRow > a) a = maxInRow;
return a;
}, 0);
const row = container
.selectAll("div")
.data(rows)
.enter()
.append("div")
.classed("row", true);
function createHeader(row) {
const header = row.append("header");
const h2 = header.append("h2").text(d => d.name);
const p = header.append("p").text(d => d.handle);
return header;
}
const header = createHeader(row);
function createIpv4(row) {
const section = row.append("section").classed("ipv4", true);
const h3 = section.append("h3").text("IPv4 prefixes");
const ul = section.append("ul");
const li = ul
.selectAll("li")
.data(d => d.ipv4.sort((a, b) => a.prefixLength > b.prefixLength))
.enter()
.append("li");
li.text(d => d.handle + " (" + d.numberOfAddresses + ")");
const svg = li
.append("svg")
.attr("height", barHeight)
.attr("width", "100%");
svg
.append("g")
.attr("transform", "translate(10,1)")
.append("rect")
.attr("x", 0)
.attr("y", 0)
.attr(
"width",
d =>
(d.numberOfAddresses / largestIpv4NumberOfAddresses) *
maxIPv4Width
)
.attr("height", barHeight)
.attr("fill", "red" );
return section;
}
const ipv4 = createIpv4(row);
return container.node();
}