Skip to content

Commit

Permalink
Undo fix for #3585 since it has broken the stacked bar charts when th…
Browse files Browse the repository at this point in the history
…e axis has a user defined minimum value.
  • Loading branch information
etimberg committed Mar 18, 2017
1 parent 1ca0ffb commit 807b723
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 21 deletions.
20 changes: 8 additions & 12 deletions src/controllers/controller.bar.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,9 @@ module.exports = function(Chart) {
var me = this;
var meta = me.getMeta();
var yScale = me.getScaleForId(meta.yAxisID);
var base = yScale.getBaseValue();
var original = base;
var base = 0;

if ((yScale.options.stacked === true) ||
if (yScale.options.stacked === true ||
(yScale.options.stacked === undefined && meta.stack !== undefined)) {
var chart = me.chart;
var datasets = chart.data.datasets;
Expand All @@ -127,7 +126,7 @@ module.exports = function(Chart) {
if (currentDsMeta.bar && currentDsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i) &&
meta.stack === currentDsMeta.stack) {
var currentVal = Number(currentDs.data[index]);
base += value < 0 ? Math.min(currentVal, original) : Math.max(currentVal, original);
base += value < 0 ? Math.min(currentVal, 0) : Math.max(currentVal, 0);
}
}

Expand Down Expand Up @@ -227,9 +226,8 @@ module.exports = function(Chart) {

if (yScale.options.stacked ||
(yScale.options.stacked === undefined && meta.stack !== undefined)) {
var base = yScale.getBaseValue();
var sumPos = base,
sumNeg = base;
var sumPos = 0,
sumNeg = 0;

for (var i = 0; i < datasetIndex; i++) {
var ds = me.chart.data.datasets[i];
Expand Down Expand Up @@ -418,7 +416,6 @@ module.exports = function(Chart) {
var meta = me.getMeta();
var xScale = me.getScaleForId(meta.xAxisID);
var base = xScale.getBaseValue();
var originalBase = base;

if (xScale.options.stacked ||
(xScale.options.stacked === undefined && meta.stack !== undefined)) {
Expand All @@ -432,7 +429,7 @@ module.exports = function(Chart) {
if (currentDsMeta.bar && currentDsMeta.xAxisID === xScale.id && chart.isDatasetVisible(i) &&
meta.stack === currentDsMeta.stack) {
var currentVal = Number(currentDs.data[index]);
base += value < 0 ? Math.min(currentVal, originalBase) : Math.max(currentVal, originalBase);
base += value < 0 ? Math.min(currentVal, 0) : Math.max(currentVal, 0);
}
}

Expand Down Expand Up @@ -512,9 +509,8 @@ module.exports = function(Chart) {

if (xScale.options.stacked ||
(xScale.options.stacked === undefined && meta.stack !== undefined)) {
var base = xScale.getBaseValue();
var sumPos = base,
sumNeg = base;
var sumPos = 0,
sumNeg = 0;

for (var i = 0; i < datasetIndex; i++) {
var ds = me.chart.data.datasets[i];
Expand Down
77 changes: 68 additions & 9 deletions test/specs/controller.bar.tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -849,6 +849,65 @@ describe('Bar controller tests', function() {
});
});

it('should update elements when the scales are stacked and the y axis has a user definined minimum', function() {
var chart = window.acquireChart({
type: 'bar',
data: {
datasets: [{
data: [50, 20, 10, 100],
label: 'dataset1'
}, {
data: [50, 80, 90, 0],
label: 'dataset2'
}],
labels: ['label1', 'label2', 'label3', 'label4']
},
options: {
scales: {
xAxes: [{
type: 'category'
}],
yAxes: [{
type: 'linear',
stacked: true,
ticks: {
min: 50,
max: 100
}
}]
}
}
});

var meta0 = chart.getDatasetMeta(0);

[
{b: 936, w: 83, x: 87, y: 484},
{b: 936, w: 83, x: 202, y: 755},
{b: 936, w: 83, x: 318, y: 846},
{b: 936, w: 83, x: 434, y: 32}
].forEach(function(values, i) {
expect(meta0.data[i]._model.base).toBeCloseToPixel(values.b);
expect(meta0.data[i]._model.width).toBeCloseToPixel(values.w);
expect(meta0.data[i]._model.x).toBeCloseToPixel(values.x);
expect(meta0.data[i]._model.y).toBeCloseToPixel(values.y);
});

var meta1 = chart.getDatasetMeta(1);

[
{b: 484, w: 83, x: 87, y: 32},
{b: 755, w: 83, x: 202, y: 32},
{b: 846, w: 83, x: 318, y: 32},
{b: 32, w: 83, x: 434, y: 32}
].forEach(function(values, i) {
expect(meta1.data[i]._model.base).toBeCloseToPixel(values.b);
expect(meta1.data[i]._model.width).toBeCloseToPixel(values.w);
expect(meta1.data[i]._model.x).toBeCloseToPixel(values.x);
expect(meta1.data[i]._model.y).toBeCloseToPixel(values.y);
});
});

it('should update elements when only the category scale is stacked', function() {
var chart = window.acquireChart({
type: 'bar',
Expand Down Expand Up @@ -1119,7 +1178,7 @@ describe('Bar controller tests', function() {
}],
yAxes: [{
type: 'logarithmic',
stacked: true
stacked: true,
}]
}
}
Expand All @@ -1128,10 +1187,10 @@ describe('Bar controller tests', function() {
var meta0 = chart.getDatasetMeta(0);

[
{b: 484, w: 92, x: 94, y: 379},
{b: 484, w: 92, x: 208, y: 122},
{b: 484, w: 92, x: 322, y: 379},
{b: 484, w: 92, x: 436, y: 122}
{b: 484, w: 92, x: 94, y: 484},
{b: 484, w: 92, x: 208, y: 136},
{b: 484, w: 92, x: 322, y: 484},
{b: 484, w: 92, x: 436, y: 136}
].forEach(function(values, i) {
expect(meta0.data[i]._model.base).toBeCloseToPixel(values.b);
expect(meta0.data[i]._model.width).toBeCloseToPixel(values.w);
Expand All @@ -1142,10 +1201,10 @@ describe('Bar controller tests', function() {
var meta1 = chart.getDatasetMeta(1);

[
{b: 379, w: 92, x: 94, y: 109},
{b: 122, w: 92, x: 208, y: 109},
{b: 379, w: 92, x: 322, y: 379},
{b: 122, w: 92, x: 436, y: 25}
{b: 484, w: 92, x: 94, y: 122},
{b: 136, w: 92, x: 208, y: 122},
{b: 484, w: 92, x: 322, y: 484},
{b: 136, w: 92, x: 436, y: 32}
].forEach(function(values, i) {
expect(meta1.data[i]._model.base).toBeCloseToPixel(values.b);
expect(meta1.data[i]._model.width).toBeCloseToPixel(values.w);
Expand Down

0 comments on commit 807b723

Please sign in to comment.