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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 Fe*;okNbCRr literal 0 Hc-jL100001 -- 2.47.2