mirror of
https://github.com/chartjs/Chart.js.git
synced 2026-03-06 16:26:52 +01:00
Make Chart.controllers.* importable (#5871)
`controllers.*.js` and `core.datasetController.js` are now importable (no more function export), that's why there is so many changes mainly due to one indentation level removed. Split code for `bar/horizontalBar` and `doughnut/pie` in separate files, added a global controllers import (`src/controllers/index.js`) and add tests to check that all dataset controllers are correctly registered under `chart.controllers.{type}`.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
'use strict';
|
||||
|
||||
var DatasetController = require('../core/core.datasetController');
|
||||
var defaults = require('../core/core.defaults');
|
||||
var elements = require('../elements/index');
|
||||
var helpers = require('../helpers/index');
|
||||
@@ -37,140 +38,136 @@ defaults._set('bubble', {
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = DatasetController.extend({
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
dataElementType: elements.Point,
|
||||
|
||||
module.exports = function(Chart) {
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
update: function(reset) {
|
||||
var me = this;
|
||||
var meta = me.getMeta();
|
||||
var points = meta.data;
|
||||
|
||||
Chart.controllers.bubble = Chart.DatasetController.extend({
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
dataElementType: elements.Point,
|
||||
// Update Points
|
||||
helpers.each(points, function(point, index) {
|
||||
me.updateElement(point, index, reset);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
update: function(reset) {
|
||||
var me = this;
|
||||
var meta = me.getMeta();
|
||||
var points = meta.data;
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
updateElement: function(point, index, reset) {
|
||||
var me = this;
|
||||
var meta = me.getMeta();
|
||||
var custom = point.custom || {};
|
||||
var xScale = me.getScaleForId(meta.xAxisID);
|
||||
var yScale = me.getScaleForId(meta.yAxisID);
|
||||
var options = me._resolveElementOptions(point, index);
|
||||
var data = me.getDataset().data[index];
|
||||
var dsIndex = me.index;
|
||||
|
||||
// Update Points
|
||||
helpers.each(points, function(point, index) {
|
||||
me.updateElement(point, index, reset);
|
||||
});
|
||||
},
|
||||
var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);
|
||||
var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
updateElement: function(point, index, reset) {
|
||||
var me = this;
|
||||
var meta = me.getMeta();
|
||||
var custom = point.custom || {};
|
||||
var xScale = me.getScaleForId(meta.xAxisID);
|
||||
var yScale = me.getScaleForId(meta.yAxisID);
|
||||
var options = me._resolveElementOptions(point, index);
|
||||
var data = me.getDataset().data[index];
|
||||
var dsIndex = me.index;
|
||||
point._xScale = xScale;
|
||||
point._yScale = yScale;
|
||||
point._options = options;
|
||||
point._datasetIndex = dsIndex;
|
||||
point._index = index;
|
||||
point._model = {
|
||||
backgroundColor: options.backgroundColor,
|
||||
borderColor: options.borderColor,
|
||||
borderWidth: options.borderWidth,
|
||||
hitRadius: options.hitRadius,
|
||||
pointStyle: options.pointStyle,
|
||||
rotation: options.rotation,
|
||||
radius: reset ? 0 : options.radius,
|
||||
skip: custom.skip || isNaN(x) || isNaN(y),
|
||||
x: x,
|
||||
y: y,
|
||||
};
|
||||
|
||||
var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);
|
||||
var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);
|
||||
point.pivot();
|
||||
},
|
||||
|
||||
point._xScale = xScale;
|
||||
point._yScale = yScale;
|
||||
point._options = options;
|
||||
point._datasetIndex = dsIndex;
|
||||
point._index = index;
|
||||
point._model = {
|
||||
backgroundColor: options.backgroundColor,
|
||||
borderColor: options.borderColor,
|
||||
borderWidth: options.borderWidth,
|
||||
hitRadius: options.hitRadius,
|
||||
pointStyle: options.pointStyle,
|
||||
rotation: options.rotation,
|
||||
radius: reset ? 0 : options.radius,
|
||||
skip: custom.skip || isNaN(x) || isNaN(y),
|
||||
x: x,
|
||||
y: y,
|
||||
};
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
setHoverStyle: function(point) {
|
||||
var model = point._model;
|
||||
var options = point._options;
|
||||
|
||||
point.pivot();
|
||||
},
|
||||
point.$previousStyle = {
|
||||
backgroundColor: model.backgroundColor,
|
||||
borderColor: model.borderColor,
|
||||
borderWidth: model.borderWidth,
|
||||
radius: model.radius
|
||||
};
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
setHoverStyle: function(point) {
|
||||
var model = point._model;
|
||||
var options = point._options;
|
||||
model.backgroundColor = helpers.valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor));
|
||||
model.borderColor = helpers.valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor));
|
||||
model.borderWidth = helpers.valueOrDefault(options.hoverBorderWidth, options.borderWidth);
|
||||
model.radius = options.radius + options.hoverRadius;
|
||||
},
|
||||
|
||||
point.$previousStyle = {
|
||||
backgroundColor: model.backgroundColor,
|
||||
borderColor: model.borderColor,
|
||||
borderWidth: model.borderWidth,
|
||||
radius: model.radius
|
||||
};
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
_resolveElementOptions: function(point, index) {
|
||||
var me = this;
|
||||
var chart = me.chart;
|
||||
var datasets = chart.data.datasets;
|
||||
var dataset = datasets[me.index];
|
||||
var custom = point.custom || {};
|
||||
var options = chart.options.elements.point;
|
||||
var resolve = helpers.options.resolve;
|
||||
var data = dataset.data[index];
|
||||
var values = {};
|
||||
var i, ilen, key;
|
||||
|
||||
model.backgroundColor = helpers.valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor));
|
||||
model.borderColor = helpers.valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor));
|
||||
model.borderWidth = helpers.valueOrDefault(options.hoverBorderWidth, options.borderWidth);
|
||||
model.radius = options.radius + options.hoverRadius;
|
||||
},
|
||||
// Scriptable options
|
||||
var context = {
|
||||
chart: chart,
|
||||
dataIndex: index,
|
||||
dataset: dataset,
|
||||
datasetIndex: me.index
|
||||
};
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
_resolveElementOptions: function(point, index) {
|
||||
var me = this;
|
||||
var chart = me.chart;
|
||||
var datasets = chart.data.datasets;
|
||||
var dataset = datasets[me.index];
|
||||
var custom = point.custom || {};
|
||||
var options = chart.options.elements.point;
|
||||
var resolve = helpers.options.resolve;
|
||||
var data = dataset.data[index];
|
||||
var values = {};
|
||||
var i, ilen, key;
|
||||
var keys = [
|
||||
'backgroundColor',
|
||||
'borderColor',
|
||||
'borderWidth',
|
||||
'hoverBackgroundColor',
|
||||
'hoverBorderColor',
|
||||
'hoverBorderWidth',
|
||||
'hoverRadius',
|
||||
'hitRadius',
|
||||
'pointStyle',
|
||||
'rotation'
|
||||
];
|
||||
|
||||
// Scriptable options
|
||||
var context = {
|
||||
chart: chart,
|
||||
dataIndex: index,
|
||||
dataset: dataset,
|
||||
datasetIndex: me.index
|
||||
};
|
||||
|
||||
var keys = [
|
||||
'backgroundColor',
|
||||
'borderColor',
|
||||
'borderWidth',
|
||||
'hoverBackgroundColor',
|
||||
'hoverBorderColor',
|
||||
'hoverBorderWidth',
|
||||
'hoverRadius',
|
||||
'hitRadius',
|
||||
'pointStyle',
|
||||
'rotation'
|
||||
];
|
||||
|
||||
for (i = 0, ilen = keys.length; i < ilen; ++i) {
|
||||
key = keys[i];
|
||||
values[key] = resolve([
|
||||
custom[key],
|
||||
dataset[key],
|
||||
options[key]
|
||||
], context, index);
|
||||
}
|
||||
|
||||
// Custom radius resolution
|
||||
values.radius = resolve([
|
||||
custom.radius,
|
||||
data ? data.r : undefined,
|
||||
dataset.radius,
|
||||
options.radius
|
||||
for (i = 0, ilen = keys.length; i < ilen; ++i) {
|
||||
key = keys[i];
|
||||
values[key] = resolve([
|
||||
custom[key],
|
||||
dataset[key],
|
||||
options[key]
|
||||
], context, index);
|
||||
|
||||
return values;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Custom radius resolution
|
||||
values.radius = resolve([
|
||||
custom.radius,
|
||||
data ? data.r : undefined,
|
||||
dataset.radius,
|
||||
options.radius
|
||||
], context, index);
|
||||
|
||||
return values;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user