From: Simon Brunel Date: Sat, 18 Feb 2017 10:58:45 +0000 (+0100) Subject: Add new dataset update and draw plugin hooks X-Git-Tag: v2.6.0~2^2~62 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4741c6f09da431e75fa860b4e08417a4d961fadf;p=thirdparty%2FChart.js.git Add new dataset update and draw plugin hooks In order to take full advantage of the new plugin hooks called before and after a dataset is drawn, all drawing operations must happen on stable meta data, so make sure that transitions are performed before. --- diff --git a/.gitignore b/.gitignore index 172413437..e76d361a5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ .vscode bower.json +*.log *.swp diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index 0aa35a2e3..3863b3ca5 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -248,19 +248,20 @@ module.exports = function(Chart) { return yScale.getPixelForValue(value); }, - draw: function(ease) { + draw: function() { var me = this; var chart = me.chart; - var easingDecimal = ease || 1; - var metaData = me.getMeta().data; + var elements = me.getMeta().data; var dataset = me.getDataset(); - var i, len; + var ilen = elements.length; + var i = 0; + var d; Chart.canvasHelpers.clipArea(chart.ctx, chart.chartArea); - for (i = 0, len = metaData.length; i < len; ++i) { - var d = dataset.data[i]; + for (; i= 0; --i) { + if (me.isDatasetVisible(i)) { + me.drawDataset(i, easingValue); } - }, me, true); + } plugins.notify(me, 'afterDatasetsDraw', [easingValue]); }, + /** + * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw` + * hook, in which case, plugins will not be called on `afterDatasetDraw`. + * @private + */ + drawDataset: function(index, easingValue) { + var me = this; + var meta = me.getDatasetMeta(index); + var args = { + meta: meta, + index: index, + easingValue: easingValue + }; + + if (plugins.notify(me, 'beforeDatasetDraw', [args]) === false) { + return; + } + + meta.controller.draw(easingValue); + + plugins.notify(me, 'afterDatasetDraw', [args]); + }, + // Get the single element that was clicked on // @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw getElementAtEvent: function(e) { diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index afd5ea37d..8f8495b36 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -208,12 +208,33 @@ module.exports = function(Chart) { update: helpers.noop, - draw: function(ease) { - var easingDecimal = ease || 1; - var i, len; - var metaData = this.getMeta().data; - for (i = 0, len = metaData.length; i < len; ++i) { - metaData[i].transition(easingDecimal).draw(); + transition: function(easingValue) { + var meta = this.getMeta(); + var elements = meta.data || []; + var ilen = elements.length; + var i = 0; + + for (; i