function drawASBox(data, container) {
const asBox = container.append("div").classed("asBox", true);
const header = asBox.append("header");
header.append("h2").text(data.as.number);
header.append("p").text(data.as.name);
asBox
.append("p")
.classed("year", true)
.text("Sistema autónomo atribuido en " + data.as.since);
function appendTextWithNumber(element, number, text) {
element
.append("span")
.classed("number", true)
.text(number.toLocaleString("es-BO"));
element
.append("span")
.classed("text", true)
.text(text);
}
const ipv4 = asBox.append("p").classed("ipv4", true);
appendTextWithNumber(ipv4, data.ipv4.number, " direcciones IPv4");
const probes = asBox.append("div").classed("probes", true);
const title = probes.append("p").classed("title", true);
appendTextWithNumber(title, data.probesNumber, " sondas RIPE Atlas");
function drawProbes(data, getText) {
const ul = probes.append("ul");
const li = ul
.selectAll("li")
.data(data)
.enter()
.append("li");
li.append("span").text(getText);
const svg = li.append("svg").attr("height", 24);
svg
.append("g")
.attr("transform", "translate(10,1)")
.selectAll("g")
.data(d => d.probes)
.enter()
.append("g")
.attr("transform", (d, i) => "translate(" + i * 24 + ",0) scale(0.5)")
.append("a")
.attr("href", d => "https://atlas.ripe.net/probes/" + d.id)
.append("path")
.attr("d", iconPath)
.attr("fill", d => status[d.status].color)
.attr("stroke", "#333");
}
function drawProbesByStatus() {
drawProbes(data.probesByStatus, d => status[d.status].nombre);
}
function drawProbesByYear() {
drawProbes(data.probesByYear, d => d.year);
}
drawProbesByStatus();
return asBox.node();
}