in src/sankeyDiagram.ts [1381:1460]
private computeYPosition(
nodes: SankeyDiagramNode[],
scale: number,
selfLinksWeight: boolean): void {
// let uniqueNodes = SankeyDiagram.getUniqueNodes(nodes);
nodes.forEach((node: SankeyDiagramNode) => {
node.links = SankeyDiagram.getUniqueLinks(node.links);
node.links = node.links.sort((firstLink: SankeyDiagramLink, secondLink: SankeyDiagramLink) => {
let firstY: number,
secondY: number;
firstY = firstLink.source === node
? firstLink.destination.y
: firstLink.source.y;
secondY = secondLink.source === node
? secondLink.destination.y
: secondLink.source.y;
return firstY - secondY;
});
let shiftByAxisYOfLeftLink: number = SankeyDiagram.DefaultOffset,
shiftByAxisYOfRightLink: number = SankeyDiagram.DefaultOffset;
node.links = node.links.sort((a: SankeyDiagramLink, b: SankeyDiagramLink) => {
return a.direction < b.direction ? 1 : a.direction > b.direction ? -1 : 0;
});
node.links.forEach((link: SankeyDiagramLink) => {
let shiftByAxisY: number = SankeyDiagram.DefaultOffset;
link.height = link.weigth * scale;
let fixedLinkHeight: number = link.height;
if (selfLinksWeight && link.direction === SankeyLinkDirrections.SelfLink) {
fixedLinkHeight = node.width;
}
if (link.source.x < node.x || link.destination.x < node.x) {
if (link.direction !== SankeyLinkDirrections.Backward)
shiftByAxisY = shiftByAxisYOfLeftLink;
if (link.direction !== SankeyLinkDirrections.Backward)
shiftByAxisYOfLeftLink += fixedLinkHeight;
else
shiftByAxisYOfRightLink += fixedLinkHeight;
}
else {
if (link.source.x > node.x || link.destination.x > node.x) {
if (link.direction !== SankeyLinkDirrections.Backward)
shiftByAxisY = shiftByAxisYOfRightLink;
if (link.direction !== SankeyLinkDirrections.Backward) {
shiftByAxisYOfRightLink += fixedLinkHeight;
}
else {
shiftByAxisYOfLeftLink += fixedLinkHeight;
}
}
if (link.source === link.destination) {
shiftByAxisYOfRightLink += fixedLinkHeight;
shiftByAxisYOfLeftLink += fixedLinkHeight;
}
}
if (link.source === node) {
if (link.direction === SankeyLinkDirrections.Forward)
link.dySource = shiftByAxisY;
else
link.dyDestination = shiftByAxisY;
}
if (link.destination === node) {
if (link.direction === SankeyLinkDirrections.Forward)
link.dyDestination = shiftByAxisY;
else
link.dySource = shiftByAxisY;
}
});
});
}