mirror of
https://github.com/chartjs/Chart.js.git
synced 2025-12-08 20:36:08 +00:00
Remove unnecessary padding usages and update category scale tests
This commit is contained in:
parent
5dd1c77cf5
commit
48cb8b78e7
@ -73,9 +73,8 @@ module.exports = function(Chart) {
|
||||
}
|
||||
|
||||
if (me.isHorizontal()) {
|
||||
var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
|
||||
var valueWidth = innerWidth / offsetAmt;
|
||||
var widthOffset = (valueWidth * (index - me.minIndex)) + me.paddingLeft;
|
||||
var valueWidth = me.width / offsetAmt;
|
||||
var widthOffset = (valueWidth * (index - me.minIndex));
|
||||
|
||||
if (me.options.gridLines.offsetGridLines && includeOffset || me.maxIndex === me.minIndex && includeOffset) {
|
||||
widthOffset += (valueWidth / 2);
|
||||
@ -83,9 +82,8 @@ module.exports = function(Chart) {
|
||||
|
||||
return me.left + Math.round(widthOffset);
|
||||
}
|
||||
var innerHeight = me.height - (me.paddingTop + me.paddingBottom);
|
||||
var valueHeight = innerHeight / offsetAmt;
|
||||
var heightOffset = (valueHeight * (index - me.minIndex)) + me.paddingTop;
|
||||
var valueHeight = me.height / offsetAmt;
|
||||
var heightOffset = (valueHeight * (index - me.minIndex));
|
||||
|
||||
if (me.options.gridLines.offsetGridLines && includeOffset) {
|
||||
heightOffset += (valueHeight / 2);
|
||||
@ -101,15 +99,13 @@ module.exports = function(Chart) {
|
||||
var value;
|
||||
var offsetAmt = Math.max((me.ticks.length - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
|
||||
var horz = me.isHorizontal();
|
||||
var innerDimension = horz ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.paddingBottom);
|
||||
var valueDimension = innerDimension / offsetAmt;
|
||||
var valueDimension = (horz ? me.width : me.height) / offsetAmt;
|
||||
|
||||
pixel -= horz ? me.left : me.top;
|
||||
|
||||
if (me.options.gridLines.offsetGridLines) {
|
||||
pixel -= (valueDimension / 2);
|
||||
}
|
||||
pixel -= horz ? me.paddingLeft : me.paddingTop;
|
||||
|
||||
if (pixel <= 0) {
|
||||
value = 0;
|
||||
|
||||
@ -132,31 +132,25 @@ module.exports = function(Chart) {
|
||||
// This must be called after fit has been run so that
|
||||
// this.left, this.top, this.right, and this.bottom have been defined
|
||||
var me = this;
|
||||
var paddingLeft = me.paddingLeft;
|
||||
var paddingBottom = me.paddingBottom;
|
||||
var start = me.start;
|
||||
|
||||
var rightValue = +me.getRightValue(value);
|
||||
var pixel;
|
||||
var innerDimension;
|
||||
var range = me.end - start;
|
||||
|
||||
if (me.isHorizontal()) {
|
||||
innerDimension = me.width - (paddingLeft + me.paddingRight);
|
||||
pixel = me.left + (innerDimension / range * (rightValue - start));
|
||||
return Math.round(pixel + paddingLeft);
|
||||
pixel = me.left + (me.width / range * (rightValue - start));
|
||||
return Math.round(pixel);
|
||||
}
|
||||
innerDimension = me.height - (me.paddingTop + paddingBottom);
|
||||
pixel = (me.bottom - paddingBottom) - (innerDimension / range * (rightValue - start));
|
||||
|
||||
pixel = me.bottom - (me.height / range * (rightValue - start));
|
||||
return Math.round(pixel);
|
||||
},
|
||||
getValueForPixel: function(pixel) {
|
||||
var me = this;
|
||||
var isHorizontal = me.isHorizontal();
|
||||
var paddingLeft = me.paddingLeft;
|
||||
var paddingBottom = me.paddingBottom;
|
||||
var innerDimension = isHorizontal ? me.width - (paddingLeft + me.paddingRight) : me.height - (me.paddingTop + paddingBottom);
|
||||
var offset = (isHorizontal ? pixel - me.left - paddingLeft : me.bottom - paddingBottom - pixel) / innerDimension;
|
||||
var innerDimension = isHorizontal ? me.width : me.height;
|
||||
var offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;
|
||||
return me.start + ((me.end - me.start) * offset);
|
||||
},
|
||||
getPixelForTick: function(index) {
|
||||
|
||||
@ -162,46 +162,42 @@ module.exports = function(Chart) {
|
||||
var start = me.start;
|
||||
var newVal = +me.getRightValue(value);
|
||||
var range;
|
||||
var paddingTop = me.paddingTop;
|
||||
var paddingBottom = me.paddingBottom;
|
||||
var paddingLeft = me.paddingLeft;
|
||||
var opts = me.options;
|
||||
var tickOpts = opts.ticks;
|
||||
|
||||
if (me.isHorizontal()) {
|
||||
range = helpers.log10(me.end) - helpers.log10(start); // todo: if start === 0
|
||||
if (newVal === 0) {
|
||||
pixel = me.left + paddingLeft;
|
||||
pixel = me.left;
|
||||
} else {
|
||||
innerDimension = me.width - (paddingLeft + me.paddingRight);
|
||||
innerDimension = me.width;
|
||||
pixel = me.left + (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));
|
||||
pixel += paddingLeft;
|
||||
}
|
||||
} else {
|
||||
// Bottom - top since pixels increase downward on a screen
|
||||
innerDimension = me.height - (paddingTop + paddingBottom);
|
||||
innerDimension = me.height;
|
||||
if (start === 0 && !tickOpts.reverse) {
|
||||
range = helpers.log10(me.end) - helpers.log10(me.minNotZero);
|
||||
if (newVal === start) {
|
||||
pixel = me.bottom - paddingBottom;
|
||||
pixel = me.bottom;
|
||||
} else if (newVal === me.minNotZero) {
|
||||
pixel = me.bottom - paddingBottom - innerDimension * 0.02;
|
||||
pixel = me.bottom - innerDimension * 0.02;
|
||||
} else {
|
||||
pixel = me.bottom - paddingBottom - innerDimension * 0.02 - (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));
|
||||
pixel = me.bottom - innerDimension * 0.02 - (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));
|
||||
}
|
||||
} else if (me.end === 0 && tickOpts.reverse) {
|
||||
range = helpers.log10(me.start) - helpers.log10(me.minNotZero);
|
||||
if (newVal === me.end) {
|
||||
pixel = me.top + paddingTop;
|
||||
pixel = me.top;
|
||||
} else if (newVal === me.minNotZero) {
|
||||
pixel = me.top + paddingTop + innerDimension * 0.02;
|
||||
pixel = me.top + innerDimension * 0.02;
|
||||
} else {
|
||||
pixel = me.top + paddingTop + innerDimension * 0.02 + (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));
|
||||
pixel = me.top + innerDimension * 0.02 + (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));
|
||||
}
|
||||
} else {
|
||||
range = helpers.log10(me.end) - helpers.log10(start);
|
||||
innerDimension = me.height - (paddingTop + paddingBottom);
|
||||
pixel = (me.bottom - paddingBottom) - (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));
|
||||
innerDimension = me.height;
|
||||
pixel = me.bottom - (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));
|
||||
}
|
||||
}
|
||||
return pixel;
|
||||
@ -212,11 +208,11 @@ module.exports = function(Chart) {
|
||||
var value, innerDimension;
|
||||
|
||||
if (me.isHorizontal()) {
|
||||
innerDimension = me.width - (me.paddingLeft + me.paddingRight);
|
||||
value = me.start * Math.pow(10, (pixel - me.left - me.paddingLeft) * range / innerDimension);
|
||||
innerDimension = me.width;
|
||||
value = me.start * Math.pow(10, (pixel - me.left) * range / innerDimension);
|
||||
} else { // todo: if start === 0
|
||||
innerDimension = me.height - (me.paddingTop + me.paddingBottom);
|
||||
value = Math.pow(10, (me.bottom - me.paddingBottom - pixel) * range / innerDimension) / me.start;
|
||||
innerDimension = me.height;
|
||||
value = Math.pow(10, (me.bottom - pixel) * range / innerDimension) / me.start;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
@ -240,7 +240,7 @@ module.exports = function(Chart) {
|
||||
me.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, 1);
|
||||
} else {
|
||||
// Determine the smallest needed unit of the time
|
||||
var innerWidth = me.isHorizontal() ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.paddingBottom);
|
||||
var innerWidth = me.isHorizontal() ? me.width : me.height;
|
||||
|
||||
// Crude approximation of what the label length might be
|
||||
var tempFirstLabel = me.tickFormatFunction(me.firstTick, 0, []);
|
||||
@ -409,14 +409,11 @@ module.exports = function(Chart) {
|
||||
var decimal = offset !== 0 ? offset / me.scaleSizeInUnits : offset;
|
||||
|
||||
if (me.isHorizontal()) {
|
||||
var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
|
||||
var valueOffset = (innerWidth * decimal) + me.paddingLeft;
|
||||
|
||||
var valueOffset = (me.width * decimal);
|
||||
return me.left + Math.round(valueOffset);
|
||||
}
|
||||
var innerHeight = me.height - (me.paddingTop + me.paddingBottom);
|
||||
var heightOffset = (innerHeight * decimal) + me.paddingTop;
|
||||
|
||||
var heightOffset = (me.height * decimal);
|
||||
return me.top + Math.round(heightOffset);
|
||||
}
|
||||
},
|
||||
@ -425,8 +422,8 @@ module.exports = function(Chart) {
|
||||
},
|
||||
getValueForPixel: function(pixel) {
|
||||
var me = this;
|
||||
var innerDimension = me.isHorizontal() ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.paddingBottom);
|
||||
var offset = (pixel - (me.isHorizontal() ? me.left + me.paddingLeft : me.top + me.paddingTop)) / innerDimension;
|
||||
var innerDimension = me.isHorizontal() ? me.width : me.height;
|
||||
var offset = (pixel - (me.isHorizontal() ? me.left : me.top)) / innerDimension;
|
||||
offset *= me.scaleSizeInUnits;
|
||||
return me.firstTick.clone().add(moment.duration(offset, me.tickUnit).asSeconds(), 'seconds');
|
||||
},
|
||||
|
||||
@ -161,305 +161,226 @@ describe('Category scale tests', function() {
|
||||
});
|
||||
|
||||
it ('Should get the correct pixel for a value when horizontal', function() {
|
||||
var scaleID = 'myScale';
|
||||
|
||||
var mockData = {
|
||||
datasets: [{
|
||||
yAxisID: scaleID,
|
||||
data: [10, 5, 0, 25, 78]
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', '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
|
||||
var chart = window.acquireChart({
|
||||
type: 'line',
|
||||
data: {
|
||||
datasets: [{
|
||||
xAxisID: 'xScale0',
|
||||
yAxisID: 'yScale0',
|
||||
data: [10, 5, 0, 25, 78]
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick_last']
|
||||
},
|
||||
id: scaleID
|
||||
options: {
|
||||
scales: {
|
||||
xAxes: [{
|
||||
id: 'xScale0',
|
||||
type: 'category',
|
||||
position: 'bottom'
|
||||
}],
|
||||
yAxes: [{
|
||||
id: 'yScale0',
|
||||
type: 'linear'
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var minSize = scale.update(600, 100);
|
||||
var xScale = chart.scales.xScale0;
|
||||
expect(xScale.getPixelForValue(0, 0, 0, false)).toBeCloseToPixel(33);
|
||||
expect(xScale.getPixelForValue(0, 0, 0, true)).toBeCloseToPixel(33);
|
||||
expect(xScale.getValueForPixel(33)).toBe(0);
|
||||
|
||||
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(xScale.getPixelForValue(0, 4, 0, false)).toBeCloseToPixel(487);
|
||||
expect(xScale.getPixelForValue(0, 4, 0, true)).toBeCloseToPixel(487);
|
||||
expect(xScale.getValueForPixel(487)).toBe(4);
|
||||
|
||||
expect(minSize).toEqual({
|
||||
width: 600,
|
||||
height: 28,
|
||||
});
|
||||
xScale.options.gridLines.offsetGridLines = true;
|
||||
|
||||
scale.left = 5;
|
||||
scale.top = 5;
|
||||
scale.right = 605;
|
||||
scale.bottom = 33;
|
||||
expect(xScale.getPixelForValue(0, 0, 0, false)).toBeCloseToPixel(33);
|
||||
expect(xScale.getPixelForValue(0, 0, 0, true)).toBeCloseToPixel(78);
|
||||
expect(xScale.getValueForPixel(33)).toBe(0);
|
||||
expect(xScale.getValueForPixel(78)).toBe(0);
|
||||
|
||||
expect(scale.getPixelForValue(0, 0, 0, false)).toBe(33);
|
||||
expect(scale.getPixelForValue(0, 0, 0, true)).toBe(85);
|
||||
expect(scale.getValueForPixel(33)).toBe(0);
|
||||
expect(scale.getValueForPixel(85)).toBe(0);
|
||||
|
||||
expect(scale.getPixelForValue(0, 4, 0, false)).toBe(452);
|
||||
expect(scale.getPixelForValue(0, 4, 0, true)).toBe(505);
|
||||
expect(scale.getValueForPixel(453)).toBe(4);
|
||||
expect(scale.getValueForPixel(505)).toBe(4);
|
||||
|
||||
config.gridLines.offsetGridLines = false;
|
||||
|
||||
expect(scale.getPixelForValue(0, 0, 0, false)).toBe(33);
|
||||
expect(scale.getPixelForValue(0, 0, 0, true)).toBe(33);
|
||||
expect(scale.getValueForPixel(33)).toBe(0);
|
||||
|
||||
expect(scale.getPixelForValue(0, 4, 0, false)).toBe(557);
|
||||
expect(scale.getPixelForValue(0, 4, 0, true)).toBe(557);
|
||||
expect(scale.getValueForPixel(557)).toBe(4);
|
||||
expect(xScale.getPixelForValue(0, 4, 0, false)).toBeCloseToPixel(396);
|
||||
expect(xScale.getPixelForValue(0, 4, 0, true)).toBeCloseToPixel(441);
|
||||
expect(xScale.getValueForPixel(397)).toBe(4);
|
||||
expect(xScale.getValueForPixel(441)).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
|
||||
var chart = window.acquireChart({
|
||||
type: 'line',
|
||||
data: {
|
||||
datasets: [{
|
||||
xAxisID: 'xScale0',
|
||||
yAxisID: 'yScale0',
|
||||
data: [10, 5, 0, 25, 78]
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick_last']
|
||||
},
|
||||
id: scaleID
|
||||
options: {
|
||||
scales: {
|
||||
xAxes: [{
|
||||
id: 'xScale0',
|
||||
type: 'category',
|
||||
position: 'bottom'
|
||||
}],
|
||||
yAxes: [{
|
||||
id: 'yScale0',
|
||||
type: 'linear'
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
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);
|
||||
var xScale = chart.scales.xScale0;
|
||||
expect(xScale.getPixelForValue('tick_1', 0, 0, false)).toBeCloseToPixel(33);
|
||||
expect(xScale.getPixelForValue('tick_1', 1, 0, false)).toBeCloseToPixel(146);
|
||||
});
|
||||
|
||||
it ('Should get the correct pixel for a value when horizontal and zoomed', function() {
|
||||
var scaleID = 'myScale';
|
||||
|
||||
var mockData = {
|
||||
datasets: [{
|
||||
yAxisID: scaleID,
|
||||
data: [10, 5, 0, 25, 78]
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick_last']
|
||||
};
|
||||
|
||||
var mockContext = window.createMockContext();
|
||||
var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('category'));
|
||||
config.gridLines.offsetGridLines = true;
|
||||
config.ticks.min = 'tick2';
|
||||
config.ticks.max = 'tick4';
|
||||
|
||||
var Constructor = Chart.scaleService.getScaleConstructor('category');
|
||||
var scale = new Constructor({
|
||||
ctx: mockContext,
|
||||
options: config,
|
||||
chart: {
|
||||
data: mockData
|
||||
var chart = window.acquireChart({
|
||||
type: 'line',
|
||||
data: {
|
||||
datasets: [{
|
||||
xAxisID: 'xScale0',
|
||||
yAxisID: 'yScale0',
|
||||
data: [10, 5, 0, 25, 78]
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick_last']
|
||||
},
|
||||
id: scaleID
|
||||
options: {
|
||||
scales: {
|
||||
xAxes: [{
|
||||
id: 'xScale0',
|
||||
type: 'category',
|
||||
position: 'bottom',
|
||||
ticks: {
|
||||
min: 'tick2',
|
||||
max: 'tick4'
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
id: 'yScale0',
|
||||
type: 'linear'
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var minSize = scale.update(600, 100);
|
||||
var xScale = chart.scales.xScale0;
|
||||
expect(xScale.getPixelForValue(0, 1, 0, false)).toBeCloseToPixel(33);
|
||||
expect(xScale.getPixelForValue(0, 1, 0, true)).toBeCloseToPixel(33);
|
||||
|
||||
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(28);
|
||||
expect(scale.labelRotation).toBe(0);
|
||||
expect(xScale.getPixelForValue(0, 3, 0, false)).toBeCloseToPixel(496);
|
||||
expect(xScale.getPixelForValue(0, 3, 0, true)).toBeCloseToPixel(496);
|
||||
|
||||
expect(minSize).toEqual({
|
||||
width: 600,
|
||||
height: 28,
|
||||
});
|
||||
xScale.options.gridLines.offsetGridLines = true;
|
||||
|
||||
scale.left = 5;
|
||||
scale.top = 5;
|
||||
scale.right = 605;
|
||||
scale.bottom = 33;
|
||||
expect(xScale.getPixelForValue(0, 1, 0, false)).toBeCloseToPixel(33);
|
||||
expect(xScale.getPixelForValue(0, 1, 0, true)).toBeCloseToPixel(110);
|
||||
|
||||
expect(scale.getPixelForValue(0, 1, 0, false)).toBe(33);
|
||||
expect(scale.getPixelForValue(0, 1, 0, true)).toBe(124);
|
||||
|
||||
expect(scale.getPixelForValue(0, 3, 0, false)).toBe(396);
|
||||
expect(scale.getPixelForValue(0, 3, 0, true)).toBe(486);
|
||||
|
||||
config.gridLines.offsetGridLines = false;
|
||||
|
||||
expect(scale.getPixelForValue(0, 1, 0, false)).toBe(33);
|
||||
expect(scale.getPixelForValue(0, 1, 0, true)).toBe(33);
|
||||
|
||||
expect(scale.getPixelForValue(0, 3, 0, false)).toBe(577);
|
||||
expect(scale.getPixelForValue(0, 3, 0, true)).toBe(577);
|
||||
expect(xScale.getPixelForValue(0, 3, 0, false)).toBeCloseToPixel(342);
|
||||
expect(xScale.getPixelForValue(0, 3, 0, true)).toBeCloseToPixel(419);
|
||||
});
|
||||
|
||||
it ('should get the correct pixel for a value when vertical', function() {
|
||||
var scaleID = 'myScale';
|
||||
|
||||
var mockData = {
|
||||
datasets: [{
|
||||
yAxisID: scaleID,
|
||||
data: [10, 5, 0, 25, 78]
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick_last']
|
||||
};
|
||||
|
||||
var mockContext = window.createMockContext();
|
||||
var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('category'));
|
||||
config.gridLines.offsetGridLines = true;
|
||||
config.position = 'left';
|
||||
var Constructor = Chart.scaleService.getScaleConstructor('category');
|
||||
var scale = new Constructor({
|
||||
ctx: mockContext,
|
||||
options: config,
|
||||
chart: {
|
||||
data: mockData
|
||||
var chart = window.acquireChart({
|
||||
type: 'line',
|
||||
data: {
|
||||
datasets: [{
|
||||
xAxisID: 'xScale0',
|
||||
yAxisID: 'yScale0',
|
||||
data: ['3', '5', '1', '4', '2']
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick5'],
|
||||
yLabels: ['1', '2', '3', '4', '5']
|
||||
},
|
||||
id: scaleID
|
||||
options: {
|
||||
scales: {
|
||||
xAxes: [{
|
||||
id: 'xScale0',
|
||||
type: 'category',
|
||||
position: 'bottom',
|
||||
}],
|
||||
yAxes: [{
|
||||
id: 'yScale0',
|
||||
type: 'category',
|
||||
position: 'left'
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var minSize = scale.update(100, 200);
|
||||
var yScale = chart.scales.yScale0;
|
||||
expect(yScale.getPixelForValue(0, 0, 0, false)).toBe(32);
|
||||
expect(yScale.getPixelForValue(0, 0, 0, true)).toBe(32);
|
||||
expect(yScale.getValueForPixel(32)).toBe(0);
|
||||
|
||||
expect(scale.width).toBe(100);
|
||||
expect(scale.height).toBe(200);
|
||||
expect(scale.paddingTop).toBe(6);
|
||||
expect(scale.paddingBottom).toBe(6);
|
||||
expect(scale.paddingLeft).toBe(0);
|
||||
expect(scale.paddingRight).toBe(0);
|
||||
expect(scale.labelRotation).toBe(0);
|
||||
expect(yScale.getPixelForValue(0, 4, 0, false)).toBe(484);
|
||||
expect(yScale.getPixelForValue(0, 4, 0, true)).toBe(484);
|
||||
expect(yScale.getValueForPixel(484)).toBe(4);
|
||||
|
||||
expect(minSize).toEqual({
|
||||
width: 100,
|
||||
height: 200,
|
||||
});
|
||||
yScale.options.gridLines.offsetGridLines = true;
|
||||
|
||||
scale.left = 5;
|
||||
scale.top = 5;
|
||||
scale.right = 105;
|
||||
scale.bottom = 205;
|
||||
expect(yScale.getPixelForValue(0, 0, 0, false)).toBe(32);
|
||||
expect(yScale.getPixelForValue(0, 0, 0, true)).toBe(77);
|
||||
expect(yScale.getValueForPixel(32)).toBe(0);
|
||||
expect(yScale.getValueForPixel(77)).toBe(0);
|
||||
|
||||
expect(scale.getPixelForValue(0, 0, 0, false)).toBe(11);
|
||||
expect(scale.getPixelForValue(0, 0, 0, true)).toBe(30);
|
||||
expect(scale.getValueForPixel(11)).toBe(0);
|
||||
expect(scale.getValueForPixel(30)).toBe(0);
|
||||
|
||||
expect(scale.getPixelForValue(0, 4, 0, false)).toBe(161);
|
||||
expect(scale.getPixelForValue(0, 4, 0, true)).toBe(180);
|
||||
expect(scale.getValueForPixel(162)).toBe(4);
|
||||
|
||||
config.gridLines.offsetGridLines = false;
|
||||
|
||||
expect(scale.getPixelForValue(0, 0, 0, false)).toBe(11);
|
||||
expect(scale.getPixelForValue(0, 0, 0, true)).toBe(11);
|
||||
expect(scale.getValueForPixel(11)).toBe(0);
|
||||
|
||||
expect(scale.getPixelForValue(0, 4, 0, false)).toBe(199);
|
||||
expect(scale.getPixelForValue(0, 4, 0, true)).toBe(199);
|
||||
expect(scale.getValueForPixel(199)).toBe(4);
|
||||
expect(yScale.getPixelForValue(0, 4, 0, false)).toBe(394);
|
||||
expect(yScale.getPixelForValue(0, 4, 0, true)).toBe(439);
|
||||
expect(yScale.getValueForPixel(394)).toBe(4);
|
||||
expect(yScale.getValueForPixel(439)).toBe(4);
|
||||
});
|
||||
|
||||
it ('should get the correct pixel for a value when vertical and zoomed', function() {
|
||||
var scaleID = 'myScale';
|
||||
|
||||
var mockData = {
|
||||
datasets: [{
|
||||
yAxisID: scaleID,
|
||||
data: [10, 5, 0, 25, 78]
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick_last']
|
||||
};
|
||||
|
||||
var mockContext = window.createMockContext();
|
||||
var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('category'));
|
||||
config.gridLines.offsetGridLines = true;
|
||||
config.ticks.min = 'tick2';
|
||||
config.ticks.max = 'tick4';
|
||||
config.position = 'left';
|
||||
|
||||
var Constructor = Chart.scaleService.getScaleConstructor('category');
|
||||
var scale = new Constructor({
|
||||
ctx: mockContext,
|
||||
options: config,
|
||||
chart: {
|
||||
data: mockData
|
||||
var chart = window.acquireChart({
|
||||
type: 'line',
|
||||
data: {
|
||||
datasets: [{
|
||||
xAxisID: 'xScale0',
|
||||
yAxisID: 'yScale0',
|
||||
data: ['3', '5', '1', '4', '2']
|
||||
}],
|
||||
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick5'],
|
||||
yLabels: ['1', '2', '3', '4', '5']
|
||||
},
|
||||
id: scaleID
|
||||
options: {
|
||||
scales: {
|
||||
xAxes: [{
|
||||
id: 'xScale0',
|
||||
type: 'category',
|
||||
position: 'bottom',
|
||||
}],
|
||||
yAxes: [{
|
||||
id: 'yScale0',
|
||||
type: 'category',
|
||||
position: 'left',
|
||||
ticks: {
|
||||
min: '2',
|
||||
max: '4'
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var minSize = scale.update(100, 200);
|
||||
var yScale = chart.scales.yScale0;
|
||||
|
||||
expect(scale.width).toBe(70);
|
||||
expect(scale.height).toBe(200);
|
||||
expect(scale.paddingTop).toBe(6);
|
||||
expect(scale.paddingBottom).toBe(6);
|
||||
expect(scale.paddingLeft).toBe(0);
|
||||
expect(scale.paddingRight).toBe(0);
|
||||
expect(scale.labelRotation).toBe(0);
|
||||
expect(yScale.getPixelForValue(0, 1, 0, false)).toBe(32);
|
||||
expect(yScale.getPixelForValue(0, 1, 0, true)).toBe(32);
|
||||
|
||||
expect(minSize).toEqual({
|
||||
width: 70,
|
||||
height: 200,
|
||||
});
|
||||
expect(yScale.getPixelForValue(0, 3, 0, false)).toBe(484);
|
||||
expect(yScale.getPixelForValue(0, 3, 0, true)).toBe(484);
|
||||
|
||||
scale.left = 5;
|
||||
scale.top = 5;
|
||||
scale.right = 75;
|
||||
scale.bottom = 205;
|
||||
yScale.options.gridLines.offsetGridLines = true;
|
||||
|
||||
expect(scale.getPixelForValue(0, 1, 0, false)).toBe(11);
|
||||
expect(scale.getPixelForValue(0, 1, 0, true)).toBe(42);
|
||||
expect(yScale.getPixelForValue(0, 1, 0, false)).toBe(32);
|
||||
expect(yScale.getPixelForValue(0, 1, 0, true)).toBe(107);
|
||||
|
||||
expect(scale.getPixelForValue(0, 3, 0, false)).toBe(136);
|
||||
expect(scale.getPixelForValue(0, 3, 0, true)).toBe(168);
|
||||
|
||||
config.gridLines.offsetGridLines = false;
|
||||
|
||||
expect(scale.getPixelForValue(0, 1, 0, false)).toBe(11);
|
||||
expect(scale.getPixelForValue(0, 1, 0, true)).toBe(11);
|
||||
|
||||
expect(scale.getPixelForValue(0, 3, 0, false)).toBe(199);
|
||||
expect(scale.getPixelForValue(0, 3, 0, true)).toBe(199);
|
||||
expect(yScale.getPixelForValue(0, 3, 0, false)).toBe(333);
|
||||
expect(yScale.getPixelForValue(0, 3, 0, true)).toBe(409);
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user