baz = function({n = 3, players = new Array(this.n).fill().map((d,i) => i)} = {}, options={}) {
const state = {
players: players
}
console.log("baz")
const [h, w] = [100,300]
const render = options.render || ((sel, data) => {
console.log("baz render")
sel.selectAll("text")
.data(data)
.join(enter => enter.append("text"),
update => update,
exit => exit.remove()
)
.text(d => d.players.join(", "))
return sel
})
const svg = d3.create("svg").attr("height", h).attr("width", w),
g = svg.append("g").attr("transform", `translate(${w/2} ${h/2})`)
const element = svg.node()
Object.defineProperty(element, "value", {
get: () => state,
set: function(v) {
console.log("element value", this.value)
state = v;
render(g, [v]);
}
})
Object.defineProperty(element, "takeTurn", {
get: () => state,
set: v => {
state = v;
render(g, [v]);
}
})
element.value = state
element.dispatchEvent(new Event("input", {bubbles: true}));
element.onclick = () => {
state.players.push(state.players.length)
element.value = state
element.dispatchEvent(new Event("input", {bubbles: true}));
}
return element
}