1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
function terminal(terminal_txt, terminal_id) {
let lines = terminal_txt.split("\n")
let td = d3.select("div#"+terminal_id)
.append("pre")
.selectAll("span")
.data(lines)
.enter()
.append("span")
// ENUM
let OUTPUT = 1
let COMMENT = 2
let COMMAND = 3
let match = (line, type) => {
if (line.match(/^[a-z]+#/)) {
return type == COMMAND
}
if (line.match(/^#( |$)/)) {
return type == COMMENT
}
return type == OUTPUT
}
// prompt# command
td.filter((line) => match(line, COMMAND))
.selectAll("span")
.data((line) => line.match(/^([^#]*)#(.*)$/).slice(1,3))
.enter()
.append("span")
.attr("class", (d, i) => (i == 0 ? "prompt" : "command"))
.text((d, i) => (i == 0 ? d+"#" : d+"\n"))
// output
td.filter((line) => match(line, OUTPUT))
.attr("class", "output")
.text((line) => line+"\n")
// comments; not '#2 ...'
td.filter((line) => match(line, COMMENT))
.attr("class", "comment")
.text((line) => line+"\n")
}
|