From c7464ebf91af37482912b434a9e5dc25cf46666e Mon Sep 17 00:00:00 2001 From: Simon Brunel Date: Sat, 2 Sep 2017 11:04:10 +0200 Subject: [PATCH] Add platform basic implementation (fallback) (#4708) If `window` or `document` are `undefined`, a minimal platform implementation is used instead, which one only returns a context2d read from the given canvas/context. --- src/platforms/platform.basic.js | 15 +++++++++++++++ src/platforms/platform.dom.js | 7 +++++++ src/platforms/platform.js | 5 +++-- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/platforms/platform.basic.js diff --git a/src/platforms/platform.basic.js b/src/platforms/platform.basic.js new file mode 100644 index 00000000000..f510b3575c7 --- /dev/null +++ b/src/platforms/platform.basic.js @@ -0,0 +1,15 @@ +/** + * Platform fallback implementation (minimal). + * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939 + */ + +module.exports = { + acquireContext: function(item) { + if (item && item.canvas) { + // Support for any object associated to a canvas (including a context2d) + item = item.canvas; + } + + return item && item.getContext('2d') || null; + } +}; diff --git a/src/platforms/platform.dom.js b/src/platforms/platform.dom.js index 8fe9f27073c..a14119ad425 100644 --- a/src/platforms/platform.dom.js +++ b/src/platforms/platform.dom.js @@ -305,6 +305,13 @@ function injectCSS(platform, css) { } module.exports = { + /** + * This property holds whether this platform is enabled for the current environment. + * Currently used by platform.js to select the proper implementation. + * @private + */ + _enabled: typeof window !== 'undefined' && typeof document !== 'undefined', + initialize: function() { var keyframes = 'from{opacity:0.99}to{opacity:1}'; diff --git a/src/platforms/platform.js b/src/platforms/platform.js index 8f4827732b1..c755f81fdb1 100644 --- a/src/platforms/platform.js +++ b/src/platforms/platform.js @@ -1,10 +1,11 @@ 'use strict'; var helpers = require('../helpers/index'); +var basic = require('./platform.basic'); +var dom = require('./platform.dom'); -// By default, select the browser (DOM) platform. // @TODO Make possible to select another platform at build time. -var implementation = require('./platform.dom'); +var implementation = dom._enabled ? dom : basic; /** * @namespace Chart.platform