private static scalePositionsByAxes()

in src/sankeyDiagram.ts [1331:1377]


    private static scalePositionsByAxes(
        sort: string,
        nodes: SankeyDiagramNode[],
        columns: SankeyDiagramColumn[],
        scale: SankeyDiagramScaleSettings,
        viewportHeight: number, ignoreSelfLinkWeight: boolean): void {
        let shiftByAxisY: number = SankeyDiagram.DefaultOffset,
            currentX: number = SankeyDiagram.DefaultPosition,
            index: number = SankeyDiagram.DefaultIndex;

        nodes.forEach((node: SankeyDiagramNode) => {
            let offsetByY: number = SankeyDiagram.DefaultOffset,
                availableHeight: number = SankeyDiagram.MinSize;

            if (currentX !== node.x) {
                currentX = node.x;
                shiftByAxisY = SankeyDiagram.DefaultOffset;
                index = SankeyDiagram.DefaultIndex;
            }

            if (columns[currentX]) {
                availableHeight = viewportHeight - columns[currentX].sumValueOfNodes * scale.y;

                offsetByY = availableHeight / columns[currentX].countOfNodes;
            }

            node.x *= scale.x;

            let selfLinkHeight: number = d3.max(node.links.filter(l => l.direction === SankeyLinkDirrections.SelfLink).map(l => l.weigth));

            if (!selfLinkHeight) {
                selfLinkHeight = 0;
            }
            if (ignoreSelfLinkWeight && selfLinkHeight > 0) {
                selfLinkHeight = node.width;
            }

            node.height = (Math.max(node.inputWeight, node.outputWeight, node.inputWeight + selfLinkHeight, node.outputWeight + selfLinkHeight)
            ) * scale.y;

            let backwardPsudoNodeSpace = SankeyDiagram.BackwardPsudoNodeMargin + d3.max([node.backwardWeight, node.selftLinkWeight / 2]) * scale.y;

            node.y = shiftByAxisY + offsetByY * index + backwardPsudoNodeSpace;
            shiftByAxisY += node.height;
            index++;
        });
    }