import defaults, {overrides} from './core.defaults';
import Interaction from './core.interaction';
import layouts from './core.layouts';
-import {BasicPlatform, DomPlatform} from '../platform';
+import {_detectPlatform} from '../platform';
import PluginService from './core.plugins';
import registry from './core.registry';
import Config, {determineAxis, getIndexAxis} from './core.config';
-import {retinaScale} from '../helpers/helpers.dom';
+import {retinaScale, _isDomSupported} from '../helpers/helpers.dom';
import {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual} from '../helpers/helpers.core';
import {clearCanvas, clipArea, unclipArea, _isPointInArea} from '../helpers/helpers.canvas';
// @ts-ignore
callCallback(animationOptions && animationOptions.onProgress, [context], chart);
}
-function isDomSupported() {
- return typeof window !== 'undefined' && typeof document !== 'undefined';
-}
-
/**
* Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.
* Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).
*/
function getCanvas(item) {
- if (isDomSupported() && typeof item === 'string') {
+ if (_isDomSupported() && typeof item === 'string') {
item = document.getElementById(item);
} else if (item && item.length) {
// Support for array based queries (such as jQuery)
class Chart {
// eslint-disable-next-line max-statements
- constructor(item, config) {
+ constructor(item, userConfig) {
const me = this;
- this.config = config = new Config(config);
+ const config = this.config = new Config(userConfig);
const initialCanvas = getCanvas(item);
const existingChart = getChart(initialCanvas);
if (existingChart) {
const options = config.createResolver(config.chartOptionScopes(), me.getContext());
- this.platform = me._initializePlatform(initialCanvas, config);
+ this.platform = new (config.platform || _detectPlatform(initialCanvas))();
const context = me.platform.acquireContext(initialCanvas, options.aspectRatio);
const canvas = context && context.canvas;
return me;
}
- /**
- * @private
- */
- _initializePlatform(canvas, config) {
- if (config.platform) {
- return new config.platform();
- } else if (!isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {
- return new BasicPlatform();
- }
- return new DomPlatform();
- }
-
clear() {
clearCanvas(this.canvas, this.ctx);
return this;
-export {default as BasePlatform} from './platform.base';
-export {default as BasicPlatform} from './platform.basic';
-export {default as DomPlatform} from './platform.dom';
+import {_isDomSupported} from '../helpers';
+import BasePlatform from './platform.base';
+import BasicPlatform from './platform.basic';
+import DomPlatform from './platform.dom';
+
+export function _detectPlatform(canvas) {
+ if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {
+ return BasicPlatform;
+ }
+ return DomPlatform;
+}
+
+export {BasePlatform, BasicPlatform, DomPlatform};