Skip to content

Commit

Permalink
Fixed #2912, JS error on drawing hidden waterfall
Browse files Browse the repository at this point in the history
  • Loading branch information
TorsteinHonsi committed Sep 17, 2014
1 parent d446f38 commit fe70adb
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 72 deletions.
54 changes: 18 additions & 36 deletions js/highcharts-more.src.js
Expand Up @@ -1511,6 +1511,9 @@ defaultPlotOptions.waterfall = merge(defaultPlotOptions.column, {
lineColor: '#333',
dashStyle: 'dot',
borderColor: '#333',
dataLabels: {
inside: true
},
states: {
hover: {
lineWidthPlus: 0 // #3126
Expand All @@ -1529,17 +1532,6 @@ seriesTypes.waterfall = extendClass(seriesTypes.column, {

pointValKey: 'y',

/**
* Init waterfall series, force stacking
*/
init: function (chart, options) {
// force stacking
options.stacking = true;

seriesTypes.column.prototype.init.call(this, chart, options);
},


/**
* Translate data points from raw values
*/
Expand All @@ -1554,10 +1546,12 @@ seriesTypes.waterfall = extendClass(seriesTypes.column, {
shapeArgs,
stack,
y,
yValue,
previousY,
previousIntermediate,
stackPoint,
range,
threshold = options.threshold,
stacking = options.stacking,
tooltipY;

// run column series translate
Expand All @@ -1569,35 +1563,38 @@ seriesTypes.waterfall = extendClass(seriesTypes.column, {
for (i = 0, len = points.length; i < len; i++) {
// cache current point object
point = points[i];
yValue = this.processedYData[i];
shapeArgs = point.shapeArgs;

// get current stack
stack = series.getStack(i);
stackPoint = stack.points[series.index + ',' + i];
stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey];
range = stack ?
stack[point.x].points[series.index + ',' + i] :
[0, yValue];

// override point value for sums
if (isNaN(point.y)) {
point.y = series.yData[i];
point.y = yValue;
}

// up points
y = mathMax(previousY, previousY + point.y) + stackPoint[0];
y = mathMax(previousY, previousY + point.y) + range[0];
shapeArgs.y = yAxis.translate(y, 0, 1);


// sum points
if (point.isSum) {
shapeArgs.y = yAxis.translate(stackPoint[1], 0, 1);
shapeArgs.height = yAxis.translate(stackPoint[0], 0, 1) - shapeArgs.y;
shapeArgs.y = yAxis.translate(range[1], 0, 1);
shapeArgs.height = yAxis.translate(range[0], 0, 1) - shapeArgs.y;

} else if (point.isIntermediateSum) {
shapeArgs.y = yAxis.translate(stackPoint[1], 0, 1);
shapeArgs.y = yAxis.translate(range[1], 0, 1);
shapeArgs.height = yAxis.translate(previousIntermediate, 0, 1) - shapeArgs.y;
previousIntermediate = stackPoint[1];
previousIntermediate = range[1];

// if it's not the sum point, update previous stack end position
} else {
previousY += stack.total;
previousY += yValue;
}

// negative points
Expand Down Expand Up @@ -1746,21 +1743,6 @@ seriesTypes.waterfall = extendClass(seriesTypes.column, {
*/
getExtremes: noop,

/**
* Return stack for given index
*/
getStack: function (i) {
var axis = this.yAxis,
stacks = axis.stacks,
key = this.stackKey;

if (this.processedYData[i] < this.options.threshold) {
key = '-' + key;
}

return stacks[key][i];
},

drawGraph: Series.prototype.drawGraph
});

Expand Down
54 changes: 18 additions & 36 deletions js/parts-more/WaterfallSeries.js
Expand Up @@ -8,6 +8,9 @@ defaultPlotOptions.waterfall = merge(defaultPlotOptions.column, {
lineColor: '#333',
dashStyle: 'dot',
borderColor: '#333',
dataLabels: {
inside: true
},
states: {
hover: {
lineWidthPlus: 0 // #3126
Expand All @@ -26,17 +29,6 @@ seriesTypes.waterfall = extendClass(seriesTypes.column, {

pointValKey: 'y',

/**
* Init waterfall series, force stacking
*/
init: function (chart, options) {
// force stacking
options.stacking = true;

seriesTypes.column.prototype.init.call(this, chart, options);
},


/**
* Translate data points from raw values
*/
Expand All @@ -51,10 +43,12 @@ seriesTypes.waterfall = extendClass(seriesTypes.column, {
shapeArgs,
stack,
y,
yValue,
previousY,
previousIntermediate,
stackPoint,
range,
threshold = options.threshold,
stacking = options.stacking,
tooltipY;

// run column series translate
Expand All @@ -66,35 +60,38 @@ seriesTypes.waterfall = extendClass(seriesTypes.column, {
for (i = 0, len = points.length; i < len; i++) {
// cache current point object
point = points[i];
yValue = this.processedYData[i];
shapeArgs = point.shapeArgs;

// get current stack
stack = series.getStack(i);
stackPoint = stack.points[series.index + ',' + i];
stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey];
range = stack ?
stack[point.x].points[series.index + ',' + i] :
[0, yValue];

// override point value for sums
if (isNaN(point.y)) {
point.y = series.yData[i];
point.y = yValue;
}

// up points
y = mathMax(previousY, previousY + point.y) + stackPoint[0];
y = mathMax(previousY, previousY + point.y) + range[0];
shapeArgs.y = yAxis.translate(y, 0, 1);


// sum points
if (point.isSum) {
shapeArgs.y = yAxis.translate(stackPoint[1], 0, 1);
shapeArgs.height = yAxis.translate(stackPoint[0], 0, 1) - shapeArgs.y;
shapeArgs.y = yAxis.translate(range[1], 0, 1);
shapeArgs.height = yAxis.translate(range[0], 0, 1) - shapeArgs.y;

} else if (point.isIntermediateSum) {
shapeArgs.y = yAxis.translate(stackPoint[1], 0, 1);
shapeArgs.y = yAxis.translate(range[1], 0, 1);
shapeArgs.height = yAxis.translate(previousIntermediate, 0, 1) - shapeArgs.y;
previousIntermediate = stackPoint[1];
previousIntermediate = range[1];

// if it's not the sum point, update previous stack end position
} else {
previousY += stack.total;
previousY += yValue;
}

// negative points
Expand Down Expand Up @@ -243,21 +240,6 @@ seriesTypes.waterfall = extendClass(seriesTypes.column, {
*/
getExtremes: noop,

/**
* Return stack for given index
*/
getStack: function (i) {
var axis = this.yAxis,
stacks = axis.stacks,
key = this.stackKey;

if (this.processedYData[i] < this.options.threshold) {
key = '-' + key;
}

return stacks[key][i];
},

drawGraph: Series.prototype.drawGraph
});

Expand Down

0 comments on commit fe70adb

Please sign in to comment.