Carga
Carga
This commit is contained in:
@@ -0,0 +1,193 @@
|
||||
import U from '../../Core/Utilities.js';
|
||||
var defined = U.defined, relativeLength = U.relativeLength;
|
||||
var SankeyColumnComposition;
|
||||
(function (SankeyColumnComposition) {
|
||||
/* *
|
||||
*
|
||||
* Declarations
|
||||
*
|
||||
* */
|
||||
/**
|
||||
* SankeyColumn Composition
|
||||
* @private
|
||||
* @function Highcharts.SankeyColumn#compose
|
||||
*
|
||||
* @param {Array<SankeyPoint>} points
|
||||
* The array of nodes
|
||||
* @param {SankeySeries} series
|
||||
* Series connected to column
|
||||
* @return {ArrayComposition} SankeyColumnArray
|
||||
*/
|
||||
function compose(points, series) {
|
||||
var sankeyColumnArray = points;
|
||||
sankeyColumnArray.sankeyColumn =
|
||||
new SankeyColumnAdditions(sankeyColumnArray, series);
|
||||
return sankeyColumnArray;
|
||||
}
|
||||
SankeyColumnComposition.compose = compose;
|
||||
/* *
|
||||
*
|
||||
* Classes
|
||||
*
|
||||
* */
|
||||
var SankeyColumnAdditions = /** @class */ (function () {
|
||||
function SankeyColumnAdditions(points, series) {
|
||||
this.points = points;
|
||||
this.series = series;
|
||||
}
|
||||
/**
|
||||
* Calculate translation factor used in column and nodes distribution
|
||||
* @private
|
||||
* @function Highcharts.SankeyColumn#getTranslationFactor
|
||||
*
|
||||
* @param {SankeySeries} series
|
||||
* The Series
|
||||
* @return {number} TranslationFactor
|
||||
* Translation Factor
|
||||
*/
|
||||
SankeyColumnAdditions.prototype.getTranslationFactor = function (series) {
|
||||
var column = this.points, nodes = column.slice(), chart = series.chart, minLinkWidth = series.options.minLinkWidth || 0;
|
||||
var skipPoint, factor = 0, i, remainingHeight = ((chart.plotSizeY || 0) -
|
||||
(series.options.borderWidth || 0) -
|
||||
(column.length - 1) * series.nodePadding);
|
||||
// Because the minLinkWidth option doesn't obey the direct
|
||||
// translation, we need to run translation iteratively, check
|
||||
// node heights, remove those nodes affected by minLinkWidth,
|
||||
// check again, etc.
|
||||
while (column.length) {
|
||||
factor = remainingHeight / column.sankeyColumn.sum();
|
||||
skipPoint = false;
|
||||
i = column.length;
|
||||
while (i--) {
|
||||
if (column[i].getSum() * factor < minLinkWidth) {
|
||||
column.splice(i, 1);
|
||||
remainingHeight -= minLinkWidth;
|
||||
skipPoint = true;
|
||||
}
|
||||
}
|
||||
if (!skipPoint) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Re-insert original nodes
|
||||
column.length = 0;
|
||||
nodes.forEach(function (node) {
|
||||
column.push(node);
|
||||
});
|
||||
return factor;
|
||||
};
|
||||
/**
|
||||
* Get the top position of the column in pixels
|
||||
* @private
|
||||
* @function Highcharts.SankeyColumn#top
|
||||
*
|
||||
* @param {number} factor
|
||||
* The Translation Factor
|
||||
* @return {number} top
|
||||
* The top position of the column
|
||||
*/
|
||||
SankeyColumnAdditions.prototype.top = function (factor) {
|
||||
var series = this.series;
|
||||
var nodePadding = series.nodePadding;
|
||||
var height = this.points.reduce(function (height, node) {
|
||||
if (height > 0) {
|
||||
height += nodePadding;
|
||||
}
|
||||
var nodeHeight = Math.max(node.getSum() * factor, series.options.minLinkWidth || 0);
|
||||
height += nodeHeight;
|
||||
return height;
|
||||
}, 0);
|
||||
return ((series.chart.plotSizeY || 0) - height) / 2;
|
||||
};
|
||||
/**
|
||||
* Get the left position of the column in pixels
|
||||
* @private
|
||||
* @function Highcharts.SankeyColumn#top
|
||||
*
|
||||
* @param {number} factor
|
||||
* The Translation Factor
|
||||
* @return {number} left
|
||||
* The left position of the column
|
||||
*/
|
||||
SankeyColumnAdditions.prototype.left = function (factor) {
|
||||
var series = this.series, chart = series.chart, equalNodes = series.options.equalNodes;
|
||||
var maxNodesLength = chart.inverted ?
|
||||
chart.plotHeight : chart.plotWidth, nodePadding = series.nodePadding;
|
||||
var width = this.points.reduce(function (width, node) {
|
||||
if (width > 0) {
|
||||
width += nodePadding;
|
||||
}
|
||||
var nodeWidth = equalNodes ?
|
||||
maxNodesLength / node.series.nodes.length - nodePadding :
|
||||
Math.max(node.getSum() * factor, series.options.minLinkWidth || 0);
|
||||
width += nodeWidth;
|
||||
return width;
|
||||
}, 0);
|
||||
return ((chart.plotSizeX || 0) - Math.round(width)) / 2;
|
||||
};
|
||||
/**
|
||||
* Calculate sum of all nodes inside specific column
|
||||
* @private
|
||||
* @function Highcharts.SankeyColumn#sum
|
||||
*
|
||||
* @param {ArrayComposition} this
|
||||
* Sankey Column Array
|
||||
*
|
||||
* @return {number} sum
|
||||
* Sum of all nodes inside column
|
||||
*/
|
||||
SankeyColumnAdditions.prototype.sum = function () {
|
||||
return this.points.reduce(function (sum, node) {
|
||||
return sum + node.getSum();
|
||||
}, 0);
|
||||
};
|
||||
/**
|
||||
* Get the offset in pixels of a node inside the column
|
||||
* @private
|
||||
* @function Highcharts.SankeyColumn#offset
|
||||
*
|
||||
* @param {SankeyPoint} node
|
||||
* Sankey node
|
||||
* @param {number} factor
|
||||
* Translation Factor
|
||||
* @return {number} offset
|
||||
* Offset of a node inside column
|
||||
*/
|
||||
SankeyColumnAdditions.prototype.offset = function (node, factor) {
|
||||
var column = this.points, series = this.series, nodePadding = series.nodePadding;
|
||||
var offset = 0, totalNodeOffset;
|
||||
if (series.is('organization') && node.hangsFrom) {
|
||||
return {
|
||||
absoluteTop: node.hangsFrom.nodeY
|
||||
};
|
||||
}
|
||||
for (var i = 0; i < column.length; i++) {
|
||||
var sum = column[i].getSum();
|
||||
var height = Math.max(sum * factor, series.options.minLinkWidth || 0);
|
||||
var directionOffset = node.options[series.chart.inverted ?
|
||||
'offsetHorizontal' :
|
||||
'offsetVertical'], optionOffset = node.options.offset || 0;
|
||||
if (sum) {
|
||||
totalNodeOffset = height + nodePadding;
|
||||
}
|
||||
else {
|
||||
// If node sum equals 0 nodePadding is missed #12453
|
||||
totalNodeOffset = 0;
|
||||
}
|
||||
if (column[i] === node) {
|
||||
return {
|
||||
relativeTop: offset + (defined(directionOffset) ?
|
||||
// directionOffset is a percent
|
||||
// of the node height
|
||||
relativeLength(directionOffset, height) :
|
||||
relativeLength(optionOffset, totalNodeOffset))
|
||||
};
|
||||
}
|
||||
offset += totalNodeOffset;
|
||||
}
|
||||
};
|
||||
return SankeyColumnAdditions;
|
||||
}());
|
||||
SankeyColumnComposition.SankeyColumnAdditions = SankeyColumnAdditions;
|
||||
})(SankeyColumnComposition || (SankeyColumnComposition = {}));
|
||||
export default SankeyColumnComposition;
|
||||
Reference in New Issue
Block a user