site/node_modules/d3-shape/src/link.js
2024-10-14 08:09:33 +02:00

74 lines
1.8 KiB
JavaScript

import {slice} from "./array.js";
import constant from "./constant.js";
import {bumpX, bumpY, bumpRadial} from "./curve/bump.js";
import {withPath} from "./path.js";
import {x as pointX, y as pointY} from "./point.js";
function linkSource(d) {
return d.source;
}
function linkTarget(d) {
return d.target;
}
export function link(curve) {
let source = linkSource,
target = linkTarget,
x = pointX,
y = pointY,
context = null,
output = null,
path = withPath(link);
function link() {
let buffer;
const argv = slice.call(arguments);
const s = source.apply(this, argv);
const t = target.apply(this, argv);
if (context == null) output = curve(buffer = path());
output.lineStart();
argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));
argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));
output.lineEnd();
if (buffer) return output = null, buffer + "" || null;
}
link.source = function(_) {
return arguments.length ? (source = _, link) : source;
};
link.target = function(_) {
return arguments.length ? (target = _, link) : target;
};
link.x = function(_) {
return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), link) : x;
};
link.y = function(_) {
return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), link) : y;
};
link.context = function(_) {
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;
};
return link;
}
export function linkHorizontal() {
return link(bumpX);
}
export function linkVertical() {
return link(bumpY);
}
export function linkRadial() {
const l = link(bumpRadial);
l.angle = l.x, delete l.x;
l.radius = l.y, delete l.y;
return l;
}