From 853f094937056191c98de295b2c8fef8173cab07 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sat, 17 Apr 2021 14:31:15 +0300 Subject: [PATCH] Scale: Make sure grace is applied only once (#8913) * Scale: Make sure grace is applied only once * Add description to fixture --- src/core/core.scale.js | 4 ++- src/scales/scale.linearbase.js | 4 +-- .../scale.linear/{ => grace}/grace-neg.js | 0 .../scale.linear/{ => grace}/grace-neg.png | Bin .../scale.linear/{ => grace}/grace-pos.js | 0 .../scale.linear/{ => grace}/grace-pos.png | Bin .../scale.linear/{ => grace}/grace.js | 0 .../scale.linear/{ => grace}/grace.png | Bin .../fixtures/scale.linear/grace/issue-8912.js | 26 ++++++++++++++++++ .../scale.linear/grace/issue-8912.png | Bin 0 -> 11265 bytes 10 files changed, 31 insertions(+), 3 deletions(-) rename test/fixtures/scale.linear/{ => grace}/grace-neg.js (100%) rename test/fixtures/scale.linear/{ => grace}/grace-neg.png (100%) rename test/fixtures/scale.linear/{ => grace}/grace-pos.js (100%) rename test/fixtures/scale.linear/{ => grace}/grace-pos.png (100%) rename test/fixtures/scale.linear/{ => grace}/grace.js (100%) rename test/fixtures/scale.linear/{ => grace}/grace.png (100%) create mode 100644 test/fixtures/scale.linear/grace/issue-8912.js create mode 100644 test/fixtures/scale.linear/grace/issue-8912.png diff --git a/src/core/core.scale.js b/src/core/core.scale.js index c5c6a98a7..2eda295df 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -3,7 +3,7 @@ import {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../he import {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject} from '../helpers/helpers.core'; import {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math'; import {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras'; -import {toFont, toPadding} from '../helpers/helpers.options'; +import {toFont, toPadding, _addGrace} from '../helpers/helpers.options'; import './core.scale.defaults'; @@ -204,6 +204,7 @@ export default class Scale extends Element { this.labelRotation = undefined; this.min = undefined; this.max = undefined; + this._range = undefined; /** @type {Tick[]} */ this.ticks = []; /** @type {object[]|null} */ @@ -401,6 +402,7 @@ export default class Scale extends Element { me.beforeDataLimits(); me.determineDataLimits(); me.afterDataLimits(); + me._range = _addGrace(me, me.options.grace); me._dataLimitsCached = true; } diff --git a/src/scales/scale.linearbase.js b/src/scales/scale.linearbase.js index 3a671d269..9eda15c33 100644 --- a/src/scales/scale.linearbase.js +++ b/src/scales/scale.linearbase.js @@ -2,7 +2,6 @@ import {isNullOrUndef} from '../helpers/helpers.core'; import {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign} from '../helpers/helpers.math'; import Scale from '../core/core.scale'; import {formatNumber} from '../helpers/helpers.intl'; -import {_addGrace} from '../helpers/helpers.options'; /** * Generate a set of linear ticks for an axis @@ -232,7 +231,8 @@ export default class LinearScaleBase extends Scale { step: tickOpts.stepSize, count: tickOpts.count, }; - const ticks = generateTicks(numericGeneratorOptions, _addGrace(me, opts.grace)); + const dataRange = me._range || me; + const ticks = generateTicks(numericGeneratorOptions, dataRange); // At this point, we need to update our max and min given the tick values, // since we probably have expanded the range of the scale diff --git a/test/fixtures/scale.linear/grace-neg.js b/test/fixtures/scale.linear/grace/grace-neg.js similarity index 100% rename from test/fixtures/scale.linear/grace-neg.js rename to test/fixtures/scale.linear/grace/grace-neg.js diff --git a/test/fixtures/scale.linear/grace-neg.png b/test/fixtures/scale.linear/grace/grace-neg.png similarity index 100% rename from test/fixtures/scale.linear/grace-neg.png rename to test/fixtures/scale.linear/grace/grace-neg.png diff --git a/test/fixtures/scale.linear/grace-pos.js b/test/fixtures/scale.linear/grace/grace-pos.js similarity index 100% rename from test/fixtures/scale.linear/grace-pos.js rename to test/fixtures/scale.linear/grace/grace-pos.js diff --git a/test/fixtures/scale.linear/grace-pos.png b/test/fixtures/scale.linear/grace/grace-pos.png similarity index 100% rename from test/fixtures/scale.linear/grace-pos.png rename to test/fixtures/scale.linear/grace/grace-pos.png diff --git a/test/fixtures/scale.linear/grace.js b/test/fixtures/scale.linear/grace/grace.js similarity index 100% rename from test/fixtures/scale.linear/grace.js rename to test/fixtures/scale.linear/grace/grace.js diff --git a/test/fixtures/scale.linear/grace.png b/test/fixtures/scale.linear/grace/grace.png similarity index 100% rename from test/fixtures/scale.linear/grace.png rename to test/fixtures/scale.linear/grace/grace.png diff --git a/test/fixtures/scale.linear/grace/issue-8912.js b/test/fixtures/scale.linear/grace/issue-8912.js new file mode 100644 index 000000000..3c11da49d --- /dev/null +++ b/test/fixtures/scale.linear/grace/issue-8912.js @@ -0,0 +1,26 @@ +module.exports = { + description: 'https://github.com/chartjs/Chart.js/issues/8912', + config: { + type: 'bar', + data: { + labels: ['Red', 'Blue'], + datasets: [{ + data: [10, -10] + }] + }, + options: { + plugins: false, + scales: { + x: { + display: false, + }, + y: { + grace: '100%' + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/scale.linear/grace/issue-8912.png b/test/fixtures/scale.linear/grace/issue-8912.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6e768040d0d4543a6a75998cf1692b6637621b GIT binary patch literal 11265 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