result = (from, fromBase, toBase) => {
var scrollable = d3.create("div")
.style("overflow-x", "scroll")
var input = formattedFrom(from, toBase)
for (var i in input) {
if (toDecimal(input[i]) >= fromBase) {
scrollable
.append("p")
.style("color", "#b3261e")
.text(`"${input[i]}" não existe na base ${fromBase}`)
return scrollable.node()
}
}
var result = scrollable
.append("p")
.style("text-align", "center")
result
.append("span")
.text("(")
result
.selectAll(".from")
.data(chunckedFrom(from, toBase))
.enter()
.append("span")
.style("color", (_, i) => i % 2 == 0 ? "#b3261e" : "#085786")
.text(d => d.join(""))
result
.append("span")
.html(`)<sub>${fromBase}</sub> = (`)
result
.selectAll(".to")
.data(chunckedTo(from, fromBase, toBase).map(fromDecimal))
.enter()
.append("span")
.style("color", (_, i) => i % 2 == 0 ? "#b3261e" : "#085786")
.text(d => d.join(""))
result
.append("span")
.html(`)<sub>${toBase}</sub>`)
var top = chunckedFrom(from, toBase), down = chunckedTo(from, fromBase, toBase)
if (chunkSize(toBase) < chunkSize(fromBase)) {
var temp = top
top = down
down = temp
}
var table = scrollable.append("table")
function append(chunks) {
var tr = table.append("tr")
for (var c in chunks) {
var colspan = top[0].length / chunks[c].length
tr.selectAll(`.td${c}`)
.data(chunks[c])
.enter()
.append("td")
.attr("colspan", colspan)
.style("color", c % 2 == 0 ? "#b3261e" : "#085786")
.style("font-weight", (_, i) => top[c][i] == 1 || colspan > 1 ? "900" : "normal")
.html(d => d)
}
}
append(top)
append(indexes(0, down.length).map(_ => chunkConverter(fromBase, toBase).map(x => `2<sup>${Math.log2(x)}</sup>`)))
append(indexes(0, down.length).map(_ => chunkConverter(fromBase, toBase)))
append(down.map(toDecimal))
if (fromBase <= 10 && toBase <= 10) return scrollable.node()
var details = scrollable.append("details")
details
.append("summary")
.text("Ver tabela de conversão")
table = details.append("table")
var tr = table.append("tr"), b = fromBase > 10 ? fromBase : toBase
tr.append("th")
.text(`Base ${10}`)
tr.append("th")
.text(`Base ${b}`)
for (var i = 0; i < b - 10; i++) {
tr = table.append("tr")
tr.append("td")
.text(`${10 + i}`)
tr.append("td")
.text(`${alphabet[i]}`)
}
return scrollable.node()
}