Skip to content

Commit bb822a5

Browse files
committed
use helper methods
1 parent 4cafadd commit bb822a5

File tree

7 files changed

+147
-131
lines changed

7 files changed

+147
-131
lines changed

src/chart.js

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,67 @@
11
import ChartNS from 'chart.js';
22

33
export const Chart = ChartNS;
4-
export const plugins = ChartNS.plugins;
5-
export const controllers = ChartNS.controllers;
4+
// export const plugins = ChartNS.plugins;
65
export const defaults = ChartNS.defaults;
7-
export const helpers = ChartNS.helpers;
8-
// export const scaleService = ChartNS.scaleService;
96

10-
// export const DataSetController = ChartNS.DataSetController;
11-
export const BarController = controllers.bar;
12-
export const HorizontalBarController = controllers.horizontalBar;
13-
// export const LineController = controllers.line;
14-
// export const PolarAreaController = controllers.polarArea;
15-
// export const ScatterController = controllers.scatter;
7+
export function registerScale(scale) {
8+
ChartNS.scaleService.registerScale(scale);
9+
return scale;
10+
}
11+
12+
// export const Scale = ChartNS.Scale;
13+
// export const LinearScale = ChartNS.scaleService.getScaleConstructor('linear');
14+
// export const LogarithmicScale = ChartNS.scaleService.getScaleConstructor('logarithmic');
15+
// export const CategoryScale = ChartNS.scaleService.getScaleConstructor('category');
16+
17+
// export const DatasetController = ChartNS.DatasetController;
18+
export const BarController = ChartNS.controllers.bar;
19+
// export const BubbleController = ChartNS.controllers.bubble;
20+
export const HorizontalBarController = ChartNS.controllers.horizontalBar;
21+
// export const LineController = ChartNS.controllers.line;
22+
// export const PolarAreaController = ChartNS.controllers.polarArea;
23+
// export const ScatterController = ChartNS.controllers.scatter;
24+
25+
export function registerController(controller) {
26+
ChartNS.controllers[controller.id] = controller;
27+
defaults.set(controller.id, controller.defaults);
28+
return controller;
29+
}
1630

1731
export const Element = ChartNS.Element;
1832
// export const Rectangle = ChartNS.elements.Rectangle;
1933
// export const Point = ChartNS.elements.Point;
2034
// export const Line = ChartNS.elements.Line;
35+
// export const Arc = ChartNS.elements.Arc;
36+
37+
export function registerElement(element) {
38+
defaults.set('elements', {
39+
[element.id]: element.defaults,
40+
});
41+
return element;
42+
}
2143

2244
export const merge = ChartNS.helpers.merge;
2345
export const drawPoint = ChartNS.helpers.canvas.drawPoint;
46+
// export const resolve = ChartNS.helpers.options.resolve;
47+
// export const color = ChartNS.helpers.color;
48+
// export const valueOrDefault = ChartNS.helpers.valueOrDefault;
49+
// export const clipArea = ChartNS.helpers.canvas.clipArea;
50+
// export const unclipArea = ChartNS.helpers.canvas.unclipArea;
51+
// export const _parseFont = ChartNS.helpers.options._parseFont;
52+
// export const splineCurve = ChartNS.helpers.curve.splineCurve;
53+
54+
export function patchControllerConfig(config, controller) {
55+
controller.register();
56+
config.type = controller.id;
57+
return config;
58+
}
59+
60+
export function registerTooltipPositioner(positioner) {
61+
// register my position logic
62+
const tooltip = ChartNS.plugins.getAll().find((d) => d.id === 'tooltip');
63+
if (tooltip) {
64+
tooltip.positioners[positioner.id] = positioner;
65+
}
66+
return positioner;
67+
}

src/controllers/boxplot.js

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
import { asBoxPlotStats } from '../data';
2-
import { Chart, controllers, defaults, BarController, HorizontalBarController, merge } from '../chart';
2+
import {
3+
Chart,
4+
patchControllerConfig,
5+
registerController,
6+
defaults,
7+
BarController,
8+
HorizontalBarController,
9+
merge,
10+
} from '../chart';
311
import { baseDefaults, StatsBase } from './base';
412
import { BoxAndWiskers, boxOptionsKeys } from '../elements';
5-
import { patchControllerConfig } from './utils';
613

714
export class BoxPlotController extends StatsBase {
815
_parseStats(value, config) {
@@ -30,28 +37,24 @@ BoxPlotController.register = () => {
3037
BoxPlotController.prototype.dataElementType = BoxAndWiskers.register();
3138
BoxPlotController.prototype.dataElementOptions = BarController.prototype.dataElementOptions.concat(boxOptionsKeys);
3239

33-
defaults.set(
34-
BoxPlotController.id,
35-
merge({}, [
36-
defaults.bar,
37-
baseDefaults(boxOptionsKeys),
38-
{
39-
datasets: {
40-
animation: {
41-
numbers: {
42-
type: 'number',
43-
properties: defaults.bar.datasets.animation.numbers.properties.concat(
44-
['q1', 'q3', 'min', 'max', 'median', 'whiskerMin', 'whiskerMax'],
45-
boxOptionsKeys.filter((c) => !c.endsWith('Color'))
46-
),
47-
},
40+
BoxPlotController.defaults = merge({}, [
41+
defaults.bar,
42+
baseDefaults(boxOptionsKeys),
43+
{
44+
datasets: {
45+
animation: {
46+
numbers: {
47+
type: 'number',
48+
properties: defaults.bar.datasets.animation.numbers.properties.concat(
49+
['q1', 'q3', 'min', 'max', 'median', 'whiskerMin', 'whiskerMax'],
50+
boxOptionsKeys.filter((c) => !c.endsWith('Color'))
51+
),
4852
},
4953
},
5054
},
51-
])
52-
);
53-
controllers[BoxPlotController.id] = BoxPlotController;
54-
return BoxPlotController;
55+
},
56+
]);
57+
return registerController(BoxPlotController);
5558
};
5659

5760
export class BoxPlotChart extends Chart {
@@ -77,28 +80,24 @@ HorizontalBoxPlotController.register = () => {
7780
boxOptionsKeys
7881
);
7982

80-
defaults.set(
81-
HorizontalBoxPlotController.id,
82-
merge({}, [
83-
defaults.horizontalBar,
84-
baseDefaults(boxOptionsKeys),
85-
{
86-
datasets: {
87-
animation: {
88-
numbers: {
89-
type: 'number',
90-
properties: defaults.bar.datasets.animation.numbers.properties.concat(
91-
['q1', 'q3', 'min', 'max', 'median', 'whiskerMin', 'whiskerMax'],
92-
boxOptionsKeys.filter((c) => !c.endsWith('Color'))
93-
),
94-
},
83+
HorizontalBoxPlotController.defaults = merge({}, [
84+
defaults.horizontalBar,
85+
baseDefaults(boxOptionsKeys),
86+
{
87+
datasets: {
88+
animation: {
89+
numbers: {
90+
type: 'number',
91+
properties: defaults.bar.datasets.animation.numbers.properties.concat(
92+
['q1', 'q3', 'min', 'max', 'median', 'whiskerMin', 'whiskerMax'],
93+
boxOptionsKeys.filter((c) => !c.endsWith('Color'))
94+
),
9595
},
9696
},
9797
},
98-
])
99-
);
100-
controllers[HorizontalBoxPlotController.id] = HorizontalBoxPlotController;
101-
return HorizontalBoxPlotController;
98+
},
99+
]);
100+
return registerController(HorizontalBoxPlotController);
102101
};
103102

104103
export class HorizontalBoxPlotChart extends Chart {

src/controllers/utils.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/controllers/violin.js

Lines changed: 41 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { asViolinStats } from '../data';
2-
import { Chart, controllers, defaults, helpers, BarController, HorizontalBarController } from '../chart';
2+
import { Chart, defaults, merge, BarController, registerController, patchControllerConfig } from '../chart';
33
import { StatsBase, baseDefaults } from './base';
44
import { baseOptionKeys } from '../elements/base';
55
import { ViolinElement } from '../elements';
66
import { interpolateKdeCoords } from '../animation';
7-
import { patchControllerConfig } from './utils';
87

98
export class ViolinController extends StatsBase {
109
_parseStats(value, config) {
@@ -36,33 +35,29 @@ ViolinController.register = () => {
3635
ViolinController.prototype.dataElementType = ViolinElement.register();
3736
ViolinController.prototype.dataElementOptions = BarController.prototype.dataElementOptions.concat(baseOptionKeys);
3837

39-
defaults.set(
40-
ViolinController.id,
41-
helpers.merge({}, [
42-
defaults.bar,
43-
baseDefaults(baseOptionKeys),
44-
{
45-
datasets: {
46-
points: 100,
47-
animation: {
48-
numbers: {
49-
type: 'number',
50-
properties: defaults.bar.datasets.animation.numbers.properties.concat(
51-
['q1', 'q3', 'min', 'max', 'median', 'maxEstimate'],
52-
baseOptionKeys.filter((c) => !c.endsWith('Color'))
53-
),
54-
},
55-
kdeCoords: {
56-
fn: interpolateKdeCoords,
57-
properties: ['coords'],
58-
},
38+
ViolinController.defaults = merge({}, [
39+
defaults.bar,
40+
baseDefaults(baseOptionKeys),
41+
{
42+
datasets: {
43+
points: 100,
44+
animation: {
45+
numbers: {
46+
type: 'number',
47+
properties: defaults.bar.datasets.animation.numbers.properties.concat(
48+
['q1', 'q3', 'min', 'max', 'median', 'maxEstimate'],
49+
baseOptionKeys.filter((c) => !c.endsWith('Color'))
50+
),
51+
},
52+
kdeCoords: {
53+
fn: interpolateKdeCoords,
54+
properties: ['coords'],
5955
},
6056
},
6157
},
62-
])
63-
);
64-
controllers[ViolinController.id] = ViolinController;
65-
return ViolinController;
58+
},
59+
]);
60+
return registerController(ViolinController);
6661
};
6762

6863
export class ViolinChart extends Chart {
@@ -88,33 +83,29 @@ HorizontalViolinController.register = () => {
8883
baseOptionKeys
8984
);
9085

91-
defaults.set(
92-
HorizontalViolinController.id,
93-
helpers.merge({}, [
94-
defaults.horizontalBar,
95-
baseDefaults(baseOptionKeys),
96-
{
97-
datasets: {
98-
points: 100,
99-
animation: {
100-
numbers: {
101-
type: 'number',
102-
properties: defaults.bar.datasets.animation.numbers.properties.concat(
103-
['q1', 'q3', 'min', 'max', 'median', 'maxEstimate'],
104-
baseOptionKeys.filter((c) => !c.endsWith('Color'))
105-
),
106-
},
107-
kdeCoords: {
108-
fn: interpolateKdeCoords,
109-
properties: ['coords'],
110-
},
86+
HorizontalViolinController.defaults = merge({}, [
87+
defaults.horizontalBar,
88+
baseDefaults(baseOptionKeys),
89+
{
90+
datasets: {
91+
points: 100,
92+
animation: {
93+
numbers: {
94+
type: 'number',
95+
properties: defaults.bar.datasets.animation.numbers.properties.concat(
96+
['q1', 'q3', 'min', 'max', 'median', 'maxEstimate'],
97+
baseOptionKeys.filter((c) => !c.endsWith('Color'))
98+
),
99+
},
100+
kdeCoords: {
101+
fn: interpolateKdeCoords,
102+
properties: ['coords'],
111103
},
112104
},
113105
},
114-
])
115-
);
116-
controllers[HorizontalViolinController.id] = HorizontalViolinController;
117-
return HorizontalViolinController;
106+
},
107+
]);
108+
return registerController(HorizontalViolinController);
118109
};
119110

120111
export class HorizontalViolinChart extends Chart {

src/elements/boxandwhiskers.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { defaults } from '../chart';
1+
import { defaults, registerElement } from '../chart';
22
import { StatsBase, baseDefaults, baseOptionKeys } from './base';
33

44
export const boxOptionsKeys = baseOptionKeys.concat(['medianColor', 'lowerBackgroundColor']);
@@ -184,13 +184,9 @@ export class BoxAndWiskers extends StatsBase {
184184
}
185185
}
186186

187-
BoxAndWiskers._type = 'boxandwhiskers';
188-
BoxAndWiskers.register = () => {
189-
defaults.set('elements', {
190-
[BoxAndWiskers._type]: Object.assign({}, defaults.elements.rectangle, baseDefaults, {
191-
medianColor: 'transparent',
192-
lowerBackgroundColor: 'transparent',
193-
}),
194-
});
195-
return BoxAndWiskers;
196-
};
187+
BoxAndWiskers.id = BoxAndWiskers._type = 'boxandwhiskers';
188+
BoxAndWiskers.defaults = Object.assign({}, defaults.elements.rectangle, baseDefaults, {
189+
medianColor: 'transparent',
190+
lowerBackgroundColor: 'transparent',
191+
});
192+
BoxAndWiskers.register = () => registerElement(BoxAndWiskers);

src/elements/violin.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { defaults, drawPoint } from '../chart';
1+
import { defaults, drawPoint, registerElement } from '../chart';
22
import { StatsBase, baseDefaults } from './base';
33

44
export class ViolinElement extends StatsBase {
@@ -90,10 +90,6 @@ export class ViolinElement extends StatsBase {
9090
}
9191
}
9292

93-
ViolinElement._type = 'violin';
94-
ViolinElement.register = () => {
95-
defaults.set('elements', {
96-
[ViolinElement._type]: Object.assign({}, defaults.elements.rectangle, baseDefaults),
97-
});
98-
return ViolinElement;
99-
};
93+
ViolinElement.id = ViolinElement._type = 'violin';
94+
ViolinElement.defaults = Object.assign({}, defaults.elements.rectangle, baseDefaults);
95+
ViolinElement.register = () => registerElement(ViolinElement);

src/tooltip.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { plugins } from './chart';
1+
import { registerTooltipPositioner } from './chart';
22

33
export function patchInHoveredOutlier(item) {
44
const value = item.value;
@@ -32,9 +32,4 @@ export function outlierPositioner(items, eventPosition) {
3232
}
3333

3434
outlierPositioner.id = 'averageInstance';
35-
outlierPositioner.register = () => {
36-
// register my position logic
37-
const tooltip = plugins.getAll().find((d) => d.id === 'tooltip');
38-
tooltip.positioners[outlierPositioner.id] = outlierPositioner;
39-
return outlierPositioner;
40-
};
35+
outlierPositioner.register = () => registerTooltipPositioner(outlierPositioner);

0 commit comments

Comments
 (0)