Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions docs/09-Advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
14 changes: 14 additions & 0 deletions src/core/core.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -367,13 +367,27 @@ 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) {
me.getDatasetMeta(datasetIndex).controller.reset();
}, 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]);
Expand Down
34 changes: 34 additions & 0 deletions test/core.controller.tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -598,4 +598,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);
});
});
});