]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix issues with repeated labels in the category scale and added a test to cover this... 3191/head
authorEvert Timberg <evert.timberg+github@gmail.com>
Mon, 22 Aug 2016 22:03:56 +0000 (18:03 -0400)
committerEvert Timberg <evert.timberg+github@gmail.com>
Mon, 22 Aug 2016 22:03:56 +0000 (18:03 -0400)
src/scales/scale.category.js
test/scale.category.tests.js

index bc1582202b88fa75a8e8b1a103353809e68784e8..35d5475e80f6e9c3404a82169407db20559f9940 100644 (file)
@@ -59,7 +59,7 @@ module.exports = function(Chart) {
                        // 1 is added because we need the length but we have the indexes
                        var offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
 
-                       if (value !== undefined) {
+                       if (value !== undefined && isNaN(index)) {
                                var labels = me.getLabels();
                                var idx = labels.indexOf(value);
                                index = idx !== -1 ? idx : index;
index b7fab63ebcba4215cb3d32ed84f12c143087eeb7..5307ba6527f6fc844ac000d2c9541b97c8299210 100644 (file)
@@ -225,6 +225,54 @@ describe('Category scale tests', function() {
                expect(scale.getValueForPixel(557)).toBe(4);
        });
 
+       it ('Should get the correct pixel for a value when there are repeated labels', function() {
+               var scaleID = 'myScale';
+
+               var mockData = {
+                       datasets: [{
+                               yAxisID: scaleID,
+                               data: [10, 5, 0, 25, 78]
+                       }],
+                       labels: ['tick1', 'tick1', 'tick3', 'tick3', 'tick_last']
+               };
+
+               var mockContext = window.createMockContext();
+               var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('category'));
+               config.gridLines.offsetGridLines = true;
+               var Constructor = Chart.scaleService.getScaleConstructor('category');
+               var scale = new Constructor({
+                       ctx: mockContext,
+                       options: config,
+                       chart: {
+                               data: mockData
+                       },
+                       id: scaleID
+               });
+
+               var minSize = scale.update(600, 100);
+
+               expect(scale.width).toBe(600);
+               expect(scale.height).toBe(28);
+               expect(scale.paddingTop).toBe(0);
+               expect(scale.paddingBottom).toBe(0);
+               expect(scale.paddingLeft).toBe(28);
+               expect(scale.paddingRight).toBe(48);
+               expect(scale.labelRotation).toBe(0);
+
+               expect(minSize).toEqual({
+                       width: 600,
+                       height: 28,
+               });
+
+               scale.left = 5;
+               scale.top = 5;
+               scale.right = 605;
+               scale.bottom = 33;
+
+               expect(scale.getPixelForValue('tick_1', 1, 0, false)).toBe(138);
+               expect(scale.getPixelForValue('tick_1', 1, 0, true)).toBe(190);
+       });
+
        it ('Should get the correct pixel for a value when horizontal and zoomed', function() {
                var scaleID = 'myScale';