private computeYPosition()

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;
                }
            });
        });
    }