From 16f23b2c44ebeccda1e144b3dd75e9c63f81307b Mon Sep 17 00:00:00 2001 From: etimberg Date: Sun, 16 Oct 2016 09:28:27 -0400 Subject: [PATCH] Add reset method to chart prototype --- docs/09-Advanced.md | 8 ++++++++ src/core/core.controller.js | 14 ++++++++++++++ test/core.controller.tests.js | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/docs/09-Advanced.md b/docs/09-Advanced.md index 3a361bcff..5ea957179 100644 --- a/docs/09-Advanced.md +++ b/docs/09-Advanced.md @@ -34,6 +34,14 @@ myLineChart.data.datasets[0].data[2] = 50; // Would update the first dataset's v myLineChart.update(); // Calling update now animates the position of March from 90 to 50. ``` +#### .reset() + +Reset the chart to it's state before the initial animation. A new animation can then be triggered using `update`. + +```javascript +myLineChart.reset(); +``` + #### .render(duration, lazy) Triggers a redraw of all chart elements. Note, this does not update elements for new data. Use `.update()` in that case. diff --git a/src/core/core.controller.js b/src/core/core.controller.js index c08d01928..3fb4ff1c9 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -409,6 +409,11 @@ module.exports = function(Chart) { return newControllers; }, + /** + * Reset the elements of all datasets + * @method resetElements + * @private + */ resetElements: function() { var me = this; helpers.each(me.data.datasets, function(dataset, datasetIndex) { @@ -416,6 +421,15 @@ module.exports = function(Chart) { }, me); }, + /** + * Resets the chart back to it's state before the initial animation + * @method reset + */ + reset: function() { + this.resetElements(); + this.tooltip.initialize(); + }, + update: function(animationDuration, lazy) { var me = this; Chart.plugins.notify('beforeUpdate', [me]); diff --git a/test/core.controller.tests.js b/test/core.controller.tests.js index a7b504ecd..170080559 100644 --- a/test/core.controller.tests.js +++ b/test/core.controller.tests.js @@ -666,4 +666,38 @@ describe('Chart.Controller', function() { expect(wrapper.firstChild.tagName).toBe('CANVAS'); }); }); + + describe('controller.reset', function() { + it('should reset the chart elements', function() { + var chart = acquireChart({ + type: 'line', + data: { + labels: ['A', 'B', 'C', 'D'], + datasets: [{ + data: [10, 20, 30, 0] + }] + }, + options: { + responsive: true + } + }); + + var meta = chart.getDatasetMeta(0); + + // Verify that points are at their initial correct location, + // then we will reset and see that they moved + expect(meta.data[0]._model.y).toBe(333); + expect(meta.data[1]._model.y).toBe(183); + expect(meta.data[2]._model.y).toBe(32); + expect(meta.data[3]._model.y).toBe(484); + + chart.reset(); + + // For a line chart, the animation state is the bottom + expect(meta.data[0]._model.y).toBe(484); + expect(meta.data[1]._model.y).toBe(484); + expect(meta.data[2]._model.y).toBe(484); + expect(meta.data[3]._model.y).toBe(484); + }); + }); });