From: Jukka Kurkela Date: Sun, 9 Feb 2020 13:52:18 +0000 (+0200) Subject: Defaults as ES6 class (#7074) X-Git-Tag: v3.0.0-alpha~65 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=25002f27631ef23d4a9924a1c828878c9f50977a;p=thirdparty%2FChart.js.git Defaults as ES6 class (#7074) * Defaults as ES6 class * Review comments --- diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index 894003e96..9930aec5b 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -7,7 +7,7 @@ import {clipArea, unclipArea} from '../helpers/helpers.canvas'; import {isArray, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core'; import {_limitValue, sign} from '../helpers/helpers.math'; -defaults._set('bar', { +defaults.set('bar', { hover: { mode: 'index' }, diff --git a/src/controllers/controller.bubble.js b/src/controllers/controller.bubble.js index 0a702e418..a30d2fd0f 100644 --- a/src/controllers/controller.bubble.js +++ b/src/controllers/controller.bubble.js @@ -6,7 +6,7 @@ import Point from '../elements/element.point'; import {extend} from '../helpers/helpers.core'; import {resolve} from '../helpers/helpers.options'; -defaults._set('bubble', { +defaults.set('bubble', { animation: { numbers: { properties: ['x', 'y', 'borderWidth', 'radius'] diff --git a/src/controllers/controller.doughnut.js b/src/controllers/controller.doughnut.js index a6277932c..e4ae17d68 100644 --- a/src/controllers/controller.doughnut.js +++ b/src/controllers/controller.doughnut.js @@ -9,7 +9,7 @@ const PI = Math.PI; const DOUBLE_PI = PI * 2; const HALF_PI = PI / 2; -defaults._set('doughnut', { +defaults.set('doughnut', { animation: { numbers: { type: 'number', diff --git a/src/controllers/controller.horizontalBar.js b/src/controllers/controller.horizontalBar.js index 027000d90..fd81b9859 100644 --- a/src/controllers/controller.horizontalBar.js +++ b/src/controllers/controller.horizontalBar.js @@ -3,7 +3,7 @@ import BarController from './controller.bar'; import defaults from '../core/core.defaults'; -defaults._set('horizontalBar', { +defaults.set('horizontalBar', { hover: { mode: 'index', axis: 'y' diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index ff98b805c..d71f28de8 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -8,7 +8,7 @@ import {valueOrDefault} from '../helpers/helpers.core'; import {isNumber} from '../helpers/helpers.math'; import {resolve} from '../helpers/helpers.options'; -defaults._set('line', { +defaults.set('line', { showLines: true, spanGaps: false, diff --git a/src/controllers/controller.pie.js b/src/controllers/controller.pie.js index d88cb8483..85a533e1c 100644 --- a/src/controllers/controller.pie.js +++ b/src/controllers/controller.pie.js @@ -4,8 +4,8 @@ import DoughnutController from './controller.doughnut'; import defaults from '../core/core.defaults'; import {clone} from '../helpers/helpers.core'; -defaults._set('pie', clone(defaults.doughnut)); -defaults._set('pie', { +defaults.set('pie', clone(defaults.doughnut)); +defaults.set('pie', { cutoutPercentage: 0 }); diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index 998447856..df923b475 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -6,7 +6,7 @@ import Arc from '../elements/element.arc'; import {toRadians} from '../helpers/helpers.math'; import {resolve} from '../helpers/helpers.options'; -defaults._set('polarArea', { +defaults.set('polarArea', { animation: { numbers: { type: 'number', diff --git a/src/controllers/controller.radar.js b/src/controllers/controller.radar.js index 3b926feea..f4f0123b3 100644 --- a/src/controllers/controller.radar.js +++ b/src/controllers/controller.radar.js @@ -6,7 +6,7 @@ import Line from '../elements/element.line'; import Point from '../elements/element.point'; import {valueOrDefault} from '../helpers/helpers.core'; -defaults._set('radar', { +defaults.set('radar', { spanGaps: false, scales: { r: { diff --git a/src/controllers/controller.scatter.js b/src/controllers/controller.scatter.js index a2c421b99..4e368be4c 100644 --- a/src/controllers/controller.scatter.js +++ b/src/controllers/controller.scatter.js @@ -3,7 +3,7 @@ import LineController from './controller.line'; import defaults from '../core/core.defaults'; -defaults._set('scatter', { +defaults.set('scatter', { scales: { x: { type: 'linear', diff --git a/src/core/core.animations.js b/src/core/core.animations.js index c3f6b5415..845a1c346 100644 --- a/src/core/core.animations.js +++ b/src/core/core.animations.js @@ -8,7 +8,7 @@ import {noop, extend, isObject} from '../helpers/helpers.core'; const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension']; const colors = ['borderColor', 'backgroundColor']; -defaults._set('animation', { +defaults.set('animation', { // Plain properties can be overridden in each object duration: 1000, easing: 'easeOutQuart', diff --git a/src/core/core.defaults.js b/src/core/core.defaults.js index 247b71592..3a15ba70a 100644 --- a/src/core/core.defaults.js +++ b/src/core/core.defaults.js @@ -2,35 +2,47 @@ import {merge} from '../helpers/helpers.core'; -export default { - color: 'rgba(0,0,0,0.1)', - elements: {}, - events: [ - 'mousemove', - 'mouseout', - 'click', - 'touchstart', - 'touchmove' - ], - fontColor: '#666', - fontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", - fontSize: 12, - fontStyle: 'normal', - lineHeight: 1.2, - hover: { - onHover: null, - mode: 'nearest', - intersect: true - }, - maintainAspectRatio: true, - onClick: null, - responsive: true, - showLines: true, - +class Defaults { + constructor() { + this.color = 'rgba(0,0,0,0.1)'; + this.elements = {}; + this.events = [ + 'mousemove', + 'mouseout', + 'click', + 'touchstart', + 'touchmove' + ]; + this.fontColor = '#666'; + this.fontFamily = "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"; + this.fontSize = 12; + this.fontStyle = 'normal'; + this.lineHeight = 1.2; + this.hover = { + onHover: null, + mode: 'nearest', + intersect: true + }; + this.maintainAspectRatio = true; + this.onClick = null; + this.responsive = true; + this.showLines = true; + this.plugins = undefined; + this.scale = undefined; + this.legend = undefined; + this.title = undefined; + this.tooltips = undefined; + this.doughnut = undefined; + } /** + * @param {string} scope + * @param {*} values * @private */ - _set: function(scope, values) { + set(scope, values) { return merge(this[scope] || (this[scope] = {}), values); } -}; +} + +// singleton instance +export default new Defaults(); diff --git a/src/core/core.layouts.js b/src/core/core.layouts.js index 97c7bec6c..1278ce462 100644 --- a/src/core/core.layouts.js +++ b/src/core/core.layouts.js @@ -201,7 +201,7 @@ function placeBoxes(boxes, chartArea, params) { chartArea.y = y; } -defaults._set('layout', { +defaults.set('layout', { padding: { top: 0, right: 0, diff --git a/src/core/core.plugins.js b/src/core/core.plugins.js index 66cb1be95..d698e4021 100644 --- a/src/core/core.plugins.js +++ b/src/core/core.plugins.js @@ -15,7 +15,7 @@ import {clone} from '../helpers/helpers.core'; * @typedef { import("../plugins/plugin.tooltip").default } Tooltip */ -defaults._set('plugins', {}); +defaults.set('plugins', {}); /** * The plugin service singleton diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 40a084ced..42ca0a3ed 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -8,7 +8,7 @@ import {_factorize, toDegrees, toRadians} from '../helpers/helpers.math'; import {_parseFont, resolve, toPadding} from '../helpers/helpers.options'; import Ticks from './core.ticks'; -defaults._set('scale', { +defaults.set('scale', { display: true, offset: false, reverse: false, diff --git a/src/elements/element.arc.js b/src/elements/element.arc.js index 39d0476cc..70996ea2d 100644 --- a/src/elements/element.arc.js +++ b/src/elements/element.arc.js @@ -6,7 +6,7 @@ import {extend} from '../helpers/helpers.core'; import {getAngleFromPoint} from '../helpers/helpers.math'; const TAU = Math.PI * 2; -defaults._set('elements', { +defaults.set('elements', { arc: { backgroundColor: defaults.color, borderColor: '#fff', diff --git a/src/elements/element.line.js b/src/elements/element.line.js index 589583af4..bc03e8770 100644 --- a/src/elements/element.line.js +++ b/src/elements/element.line.js @@ -14,7 +14,7 @@ import {_updateBezierControlPoints} from '../helpers/helpers.curve'; const defaultColor = defaults.color; -defaults._set('elements', { +defaults.set('elements', { line: { tension: 0.4, backgroundColor: defaultColor, diff --git a/src/elements/element.point.js b/src/elements/element.point.js index 420e5f444..6174b3386 100644 --- a/src/elements/element.point.js +++ b/src/elements/element.point.js @@ -7,7 +7,7 @@ import {extend} from '../helpers/helpers.core'; const defaultColor = defaults.color; -defaults._set('elements', { +defaults.set('elements', { point: { radius: 3, pointStyle: 'circle', diff --git a/src/elements/element.rectangle.js b/src/elements/element.rectangle.js index 79c25ebca..1d9cb9eec 100644 --- a/src/elements/element.rectangle.js +++ b/src/elements/element.rectangle.js @@ -6,7 +6,7 @@ import {extend, isObject} from '../helpers/helpers.core'; const defaultColor = defaults.color; -defaults._set('elements', { +defaults.set('elements', { rectangle: { backgroundColor: defaultColor, borderColor: defaultColor, diff --git a/src/plugins/plugin.filler.js b/src/plugins/plugin.filler.js index ca6550046..552fb287b 100644 --- a/src/plugins/plugin.filler.js +++ b/src/plugins/plugin.filler.js @@ -13,7 +13,7 @@ import {clipArea, unclipArea} from '../helpers/helpers.canvas'; import {isArray, isFinite, valueOrDefault} from '../helpers/helpers.core'; import {_normalizeAngle} from '../helpers/helpers.math'; -defaults._set('plugins', { +defaults.set('plugins', { filler: { propagate: true } diff --git a/src/plugins/plugin.legend.js b/src/plugins/plugin.legend.js index d729d1ae0..1188a04d5 100644 --- a/src/plugins/plugin.legend.js +++ b/src/plugins/plugin.legend.js @@ -12,7 +12,7 @@ import {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../hel * @typedef { import("../platform/platform.base").IEvent } IEvent */ -defaults._set('legend', { +defaults.set('legend', { display: true, position: 'top', align: 'center', diff --git a/src/plugins/plugin.title.js b/src/plugins/plugin.title.js index c1a3271ea..6b0e1e816 100644 --- a/src/plugins/plugin.title.js +++ b/src/plugins/plugin.title.js @@ -5,7 +5,7 @@ import Element from '../core/core.element'; import helpers from '../helpers/index'; import layouts from '../core/core.layouts'; -defaults._set('title', { +defaults.set('title', { align: 'center', display: false, fontStyle: 'bold', diff --git a/src/plugins/plugin.tooltip.js b/src/plugins/plugin.tooltip.js index 595bb7bfb..f29d06760 100644 --- a/src/plugins/plugin.tooltip.js +++ b/src/plugins/plugin.tooltip.js @@ -13,7 +13,7 @@ import helpers from '../helpers/index'; const valueOrDefault = helpers.valueOrDefault; const getRtlHelper = helpers.rtl.getRtlAdapter; -defaults._set('tooltips', { +defaults.set('tooltips', { enabled: true, custom: null, mode: 'nearest',