diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 33ba6734ce7..19cfeca0cc2 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -86,6 +86,7 @@ class Chart { const options = config.createResolver(config.chartOptionScopes(), this.getContext()); this.platform = new (config.platform || _detectPlatform(initialCanvas))(); + this.platform.updateConfig(config); const context = this.platform.acquireContext(initialCanvas, options.aspectRatio); const canvas = context && context.canvas; diff --git a/src/platform/platform.base.js b/src/platform/platform.base.js index 44803cdbd23..c29a5945a1c 100644 --- a/src/platform/platform.base.js +++ b/src/platform/platform.base.js @@ -72,6 +72,14 @@ export default class BasePlatform { isAttached(canvas) { // eslint-disable-line no-unused-vars return true; } + + /** + * Updates config with platform specific requirements + * @param {import("../core/core.config").default} config + */ + updateConfig(config) { // eslint-disable-line no-unused-vars + // no-op + } } /** diff --git a/src/platform/platform.basic.js b/src/platform/platform.basic.js index 7b38caf4a19..4d0717bc147 100644 --- a/src/platform/platform.basic.js +++ b/src/platform/platform.basic.js @@ -17,4 +17,7 @@ export default class BasicPlatform extends BasePlatform { // https://github.com/chartjs/Chart.js/issues/2807 return item && item.getContext && item.getContext('2d') || null; } + updateConfig(config) { + config.options.animation = false; + } } diff --git a/test/specs/platform.basic.tests.js b/test/specs/platform.basic.tests.js index 16b9699123e..a2f7a2188d2 100644 --- a/test/specs/platform.basic.tests.js +++ b/test/specs/platform.basic.tests.js @@ -8,6 +8,15 @@ describe('Platform.basic', function() { chart.destroy(); }); + it('should disable animations', function() { + const chart = acquireChart({type: 'line', options: {animation: {}}}, {useOffscreenCanvas: true}); + + expect(chart.options.animation).toEqual(false); + + chart.destroy(); + }); + + it('supports choosing the BasicPlatform in a web worker', function(done) { const canvas = document.createElement('canvas'); if (!canvas.transferControlToOffscreen) { diff --git a/types/index.esm.d.ts b/types/index.esm.d.ts index 848d824c15c..9ae7132b459 100644 --- a/types/index.esm.d.ts +++ b/types/index.esm.d.ts @@ -2016,6 +2016,11 @@ export class BasePlatform { * @returns {boolean} true if the canvas is attached to the platform, false if not. */ isAttached(canvas: HTMLCanvasElement): boolean; + /** + * Updates config with platform specific requirements + * @param {ChartConfiguration} config + */ + updateConfig(config: ChartConfiguration): void; } export class BasicPlatform extends BasePlatform {}