when axes are in the wrong place, update the config position

This commit is contained in:
etimberg 2017-02-10 20:37:31 -05:00 committed by Evert Timberg
parent fed42e218a
commit 8dafbc02c0
3 changed files with 50 additions and 18 deletions

View File

@ -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,10 @@ 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,

View File

@ -105,6 +105,26 @@ describe('Chart', function() {
expect(options.hover.mode).toBe('dataset');
expect(options.title.position).toBe('bottom');
});
it('should override axis positions that are incorrect', function() {
var chart = acquireChart({
type: 'line',
options: {
scales: {
xAxes: [{
position: 'left',
}],
yAxes: [{
position: 'bottom'
}]
}
}
});
var scaleOptions = chart.options.scales;
expect(scaleOptions.xAxes[0].position).toBe('bottom');
expect(scaleOptions.yAxes[0].position).toBe('left');
});
});
describe('config.options.responsive: false', function() {

View File

@ -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() {