"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() { var meta = this.getMeta(); var dataset = this.getDataset(); if (meta.xAxisID === null) { meta.xAxisID = dataset.xAxisID || this.chart.options.scales.xAxes[0].id; } if (meta.yAxisID === null) { meta.yAxisID = dataset.yAxisID || this.chart.options.scales.yAxes[0].id; } }, getDataset: function() { return this.chart.data.datasets[this.index]; }, getMeta: function() { return this.chart.getDatasetMeta(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 meta = this.getMeta(); var numData = this.getDataset().data.length; var numMetaData = meta.data.length; // Make sure that we handle number of datapoints changing if (numData < numMetaData) { // Remove excess bars for data points that have been removed meta.data.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; };