From de6074da8cd0c61d89f79ec672884a6507b6079f Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Wed, 2 Jan 2019 16:55:27 +0200 Subject: [PATCH] Cast getRightValue to number in the bar controller (#5947) --- src/controllers/controller.bar.js | 6 +-- test/specs/controller.bar.tests.js | 61 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index 760fd8887ef..41881600110 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -311,7 +311,7 @@ module.exports = DatasetController.extend({ var scale = me.getValueScale(); var isHorizontal = scale.isHorizontal(); var datasets = chart.data.datasets; - var value = scale.getRightValue(datasets[datasetIndex].data[index]); + var value = +scale.getRightValue(datasets[datasetIndex].data[index]); var minBarLength = scale.options.minBarLength; var stacked = scale.options.stacked; var stack = meta.stack; @@ -327,7 +327,7 @@ module.exports = DatasetController.extend({ imeta.controller.getValueScaleId() === scale.id && chart.isDatasetVisible(i)) { - ivalue = scale.getRightValue(datasets[i].data[index]); + ivalue = +scale.getRightValue(datasets[i].data[index]); if ((value < 0 && ivalue < 0) || (value >= 0 && ivalue > 0)) { start += ivalue; } @@ -337,7 +337,7 @@ module.exports = DatasetController.extend({ base = scale.getPixelForValue(start); head = scale.getPixelForValue(start + value); - size = (head - base) / 2; + size = head - base; if (minBarLength !== undefined && Math.abs(size) < minBarLength) { size = minBarLength; diff --git a/test/specs/controller.bar.tests.js b/test/specs/controller.bar.tests.js index 62ab0acd87a..4b33c939c61 100644 --- a/test/specs/controller.bar.tests.js +++ b/test/specs/controller.bar.tests.js @@ -1259,6 +1259,67 @@ describe('Chart.controllers.bar', function() { }); }); + it('should update elements when the scales are stacked and the y axis is logarithmic and data is strings', function() { + var chart = window.acquireChart({ + type: 'bar', + data: { + datasets: [{ + data: ['10', '100', '10', '100'], + label: 'dataset1' + }, { + data: ['100', '10', '0', '100'], + label: 'dataset2' + }], + labels: ['label1', 'label2', 'label3', 'label4'] + }, + options: { + legend: false, + title: false, + scales: { + xAxes: [{ + type: 'category', + display: false, + stacked: true, + barPercentage: 1, + }], + yAxes: [{ + type: 'logarithmic', + display: false, + stacked: true + }] + } + } + }); + + var meta0 = chart.getDatasetMeta(0); + + [ + {b: 512, w: 102, x: 64, y: 512}, + {b: 512, w: 102, x: 192, y: 118}, + {b: 512, w: 102, x: 320, y: 512}, + {b: 512, w: 102, x: 449, y: 118} + ].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: 512, w: 102, x: 64, y: 102}, + {b: 118, w: 102, x: 192, y: 102}, + {b: 512, w: 102, x: 320, y: 512}, + {b: 118, w: 102, x: 449, y: 0} + ].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 draw all bars', function() { var chart = window.acquireChart({ type: 'bar',