"use strict"; module.exports = function(Chart) { var helpers = Chart.helpers; // Base class for all dataset controllers (line, bar, etc) Chart.DatasetController = function(chart, datasetIndex) { this.initialize.call(this, chart, datasetIndex); }; helpers.extend(Chart.DatasetController.prototype, { initialize: function(chart, datasetIndex) { this.chart = chart; this.index = datasetIndex; this.linkScales(); this.addElements(); }, updateIndex: function(datasetIndex) { this.index = datasetIndex; }, linkScales: function() { if (!this.getDataset().xAxisID) { this.getDataset().xAxisID = this.chart.options.scales.xAxes[0].id; } if (!this.getDataset().yAxisID) { this.getDataset().yAxisID = this.chart.options.scales.yAxes[0].id; } }, getDataset: function() { return this.chart.data.datasets[this.index]; }, getScaleForId: function(scaleID) { return this.chart.scales[scaleID]; }, reset: function() { this.update(true); }, buildOrUpdateElements: function buildOrUpdateElements() { // Handle the number of data points changing var numData = this.getDataset().data.length; var numMetaData = this.getDataset().metaData.length; // Make sure that we handle number of datapoints changing if (numData < numMetaData) { // Remove excess bars for data points that have been removed this.getDataset().metaData.splice(numData, numMetaData - numData); } else if (numData > numMetaData) { // Add new elements for (var index = numMetaData; index < numData; ++index) { this.addElementAndReset(index); } } }, // Controllers should implement the following addElements: helpers.noop, addElementAndReset: helpers.noop, draw: helpers.noop, removeHoverStyle: helpers.noop, setHoverStyle: helpers.noop, update: helpers.noop }); Chart.DatasetController.extend = helpers.inherits; };