mouse = {
var N = vector.length;
return function(canvas) {
var down = false;
canvas.on("mouseup mousedown mousemove", function() {
if (d3.event.type == "mousedown") down = true;
if (d3.event.type == "mouseup") down = false;
if (down) {
let [x, y] = d3.mouse(this);
x = Math.round(xscale.invert(x));
y = yscale.invert(y);
var mean = keep_mean_zero ? d3.mean(vector) : 0;
for (let j = 0; j < N; j++) {
let dist = Math.abs(x - j) / N;
if (circular && dist > 1 / 2) dist = 1 - dist;
let W = 2 + 10000 * dist ** 2;
vector[j] = (y + vector[j] * W) / (1 + W) - mean;
}
draw();
}
});
};
}