From ba4b76ff7c0669a05d154d6b7e4d3672d6c65e44 Mon Sep 17 00:00:00 2001 From: etimberg Date: Fri, 10 Feb 2017 20:37:31 -0500 Subject: [PATCH] when axes are in the wrong place, update the config position --- src/core/core.controller.js | 20 +++++++++++++++++--- test/scale.logarithmic.tests.js | 29 ++++++++++++++--------------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 0d4c128bad7..4dd0c431cb5 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -56,6 +56,10 @@ module.exports = function(Chart) { chart.tooltip._options = newOptions.tooltips; } + function positionIsHorizontal(position) { + return position === 'top' || position === 'bottom'; + } + helpers.extend(Chart.prototype, /** @lends Chart */ { /** * @private @@ -220,16 +224,21 @@ module.exports = function(Chart) { if (options.scales) { items = items.concat( (options.scales.xAxes || []).map(function(xAxisOptions) { - return {options: xAxisOptions, dtype: 'category'}; + return {options: xAxisOptions, dtype: 'category', dposition: 'bottom'}; }), (options.scales.yAxes || []).map(function(yAxisOptions) { - return {options: yAxisOptions, dtype: 'linear'}; + return {options: yAxisOptions, dtype: 'linear', dposition: 'left'}; }) ); } if (options.scale) { - items.push({options: options.scale, dtype: 'radialLinear', isDefault: true}); + items.push({ + options: options.scale, + dtype: 'radialLinear', + isDefault: true, + dposition: 'chartArea' + }); } helpers.each(items, function(item) { @@ -240,6 +249,11 @@ module.exports = function(Chart) { return; } + if (positionIsHorizontal(scaleOptions.position) !== + positionIsHorizontal(item.dposition)) { + scaleOptions.position = item.dposition; + } + var scale = new scaleClass({ id: scaleOptions.id, options: scaleOptions, diff --git a/test/scale.logarithmic.tests.js b/test/scale.logarithmic.tests.js index 016737c71ee..4562aa384f5 100644 --- a/test/scale.logarithmic.tests.js +++ b/test/scale.logarithmic.tests.js @@ -690,22 +690,21 @@ describe('Logarithmic Scale tests', function() { it('should get the correct pixel value for a point', function() { var chart = window.acquireChart({ - type: 'bar', + type: 'line', data: { datasets: [{ xAxisID: 'xScale', // for the horizontal scale yAxisID: 'yScale', - data: [10, 5, 1, 25, 78] + data: [{x: 10, y: 10}, {x: 5, y: 5}, {x: 1, y: 1}, {x: 25, y: 25}, {x: 78, y: 78}] }], - labels: [] }, options: { scales: { - yAxes: [{ + xAxes: [{ id: 'xScale', - type: 'logarithmic', - position: 'bottom' - }, { + type: 'logarithmic' + }], + yAxes: [{ id: 'yScale', type: 'logarithmic' }] @@ -714,24 +713,24 @@ describe('Logarithmic Scale tests', function() { }); var xScale = chart.scales.xScale; - expect(xScale.getPixelForValue(80, 0, 0)).toBeCloseToPixel(482); // right - paddingRight + expect(xScale.getPixelForValue(80, 0, 0)).toBeCloseToPixel(495); // right - paddingRight expect(xScale.getPixelForValue(1, 0, 0)).toBeCloseToPixel(37); // left + paddingLeft - expect(xScale.getPixelForValue(10, 0, 0)).toBeCloseToPixel(270); // halfway + expect(xScale.getPixelForValue(10, 0, 0)).toBeCloseToPixel(278); // halfway expect(xScale.getPixelForValue(0, 0, 0)).toBeCloseToPixel(37); // 0 is invalid, put it on the left. - expect(xScale.getValueForPixel(481.5)).toBeCloseToPixel(80); + expect(xScale.getValueForPixel(495)).toBeCloseToPixel(80); expect(xScale.getValueForPixel(48)).toBeCloseTo(1, 1e-4); - expect(xScale.getValueForPixel(270)).toBeCloseTo(10, 1e-4); + expect(xScale.getValueForPixel(278)).toBeCloseTo(10, 1e-4); var yScale = chart.scales.yScale; expect(yScale.getPixelForValue(80, 0, 0)).toBeCloseToPixel(32); // top + paddingTop - expect(yScale.getPixelForValue(1, 0, 0)).toBeCloseToPixel(456); // bottom - paddingBottom - expect(yScale.getPixelForValue(10, 0, 0)).toBeCloseToPixel(234); // halfway + expect(yScale.getPixelForValue(1, 0, 0)).toBeCloseToPixel(484); // bottom - paddingBottom + expect(yScale.getPixelForValue(10, 0, 0)).toBeCloseToPixel(246); // halfway expect(yScale.getPixelForValue(0, 0, 0)).toBeCloseToPixel(32); // 0 is invalid. force it on top expect(yScale.getValueForPixel(32)).toBeCloseTo(80, 1e-4); - expect(yScale.getValueForPixel(456)).toBeCloseTo(1, 1e-4); - expect(yScale.getValueForPixel(234)).toBeCloseTo(10, 1e-4); + expect(yScale.getValueForPixel(484)).toBeCloseTo(1, 1e-4); + expect(yScale.getValueForPixel(246)).toBeCloseTo(10, 1e-4); }); it('should get the correct pixel value for a point when 0 values are present', function() {