From: Akihiko Kusanagi Date: Sun, 9 Jun 2019 07:45:12 +0000 (+0800) Subject: Assign unique scale IDs (#6291) X-Git-Tag: v2.9.0~1^2~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf094c59dba56f44fe99469feecfdab58bc3e843;p=thirdparty%2FChart.js.git Assign unique scale IDs (#6291) --- diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 168d40b49..5349fb5f7 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -137,6 +137,19 @@ function updateConfig(chart) { chart.tooltip.initialize(); } +function nextAvailableScaleId(axesOpts, prefix, index) { + var id; + var hasId = function(obj) { + return obj.id === id; + }; + + do { + id = prefix + index++; + } while (helpers.findIndex(axesOpts, hasId) >= 0); + + return id; +} + function positionIsHorizontal(position) { return position === 'top' || position === 'bottom'; } @@ -295,11 +308,15 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { var scaleOptions = options.scale; helpers.each(scalesOptions.xAxes, function(xAxisOptions, index) { - xAxisOptions.id = xAxisOptions.id || ('x-axis-' + index); + if (!xAxisOptions.id) { + xAxisOptions.id = nextAvailableScaleId(scalesOptions.xAxes, 'x-axis-', index); + } }); helpers.each(scalesOptions.yAxes, function(yAxisOptions, index) { - yAxisOptions.id = yAxisOptions.id || ('y-axis-' + index); + if (!yAxisOptions.id) { + yAxisOptions.id = nextAvailableScaleId(scalesOptions.yAxes, 'y-axis-', index); + } }); if (scaleOptions) { diff --git a/test/specs/core.controller.tests.js b/test/specs/core.controller.tests.js index 2fb982276..010235f47 100644 --- a/test/specs/core.controller.tests.js +++ b/test/specs/core.controller.tests.js @@ -1059,6 +1059,23 @@ describe('Chart', function() { expect(yScale.options.ticks.max).toBe(10); }); + it ('should assign unique scale IDs', function() { + var chart = acquireChart({ + type: 'line', + options: { + scales: { + xAxes: [{id: 'x-axis-0'}, {}, {}], + yAxes: [{id: 'y-axis-1'}, {}, {}] + } + } + }); + + expect(Object.keys(chart.scales).sort()).toEqual([ + 'x-axis-0', 'x-axis-1', 'x-axis-2', + 'y-axis-1', 'y-axis-2', 'y-axis-3' + ]); + }); + it ('should remove discarded scale', function() { var chart = acquireChart({ type: 'line',