function makeScrubbableNumber(elements, low, high, precision) {
let diagram = this;
let positionToValue = d3.scaleLinear()
.clamp(true)
.domain([-100, +100])
.range([low, high]);
function updateNumbers() {
elements.text(() => {
let format = `.${precision}f`;
return d3.format(format)(value);
});
}
updateNumbers();
elements.call(d3.drag()
.subject(() => ({x: positionToValue.invert(value), y: 0}))
.on('drag', event => {
mutable value = positionToValue(event.x);
updateNumbers();
diagram.update();
}));
}