Skip to content

Commit

Permalink
Add "beforeTooltipDraw" and "afterTooltipDraw" plugin hooks (chartjs#…
Browse files Browse the repository at this point in the history
  • Loading branch information
JewelsJLF authored and yofreke committed Dec 30, 2017
1 parent 0b05840 commit 0619258
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 3 deletions.
26 changes: 23 additions & 3 deletions src/core/core.controller.js
Expand Up @@ -528,9 +528,7 @@ module.exports = function(Chart) {
}

me.drawDatasets(easingValue);

// Finally draw the tooltip
me.tooltip.draw();
me._drawTooltip(easingValue);

plugins.notify(me, 'afterDraw', [easingValue]);
},
Expand Down Expand Up @@ -595,6 +593,28 @@ module.exports = function(Chart) {
plugins.notify(me, 'afterDatasetDraw', [args]);
},

/**
* Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`
* hook, in which case, plugins will not be called on `afterTooltipDraw`.
* @private
*/
_drawTooltip: function(easingValue) {
var me = this;
var tooltip = me.tooltip;
var args = {
tooltip: tooltip,
easingValue: easingValue
};

if (plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {
return;
}

tooltip.draw();

plugins.notify(me, 'afterTooltipDraw', [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) {
Expand Down
21 changes: 21 additions & 0 deletions src/core/core.plugin.js
Expand Up @@ -323,6 +323,27 @@ module.exports = function(Chart) {
* @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.
* @param {Object} options - The plugin options.
*/
/**
* @method IPlugin#beforeTooltipDraw
* @desc Called before drawing the `tooltip`. If any plugin returns `false`,
* the tooltip drawing is cancelled until another `render` is triggered.
* @param {Chart} chart - The chart instance.
* @param {Object} args - The call arguments.
* @param {Object} args.tooltip - The tooltip.
* @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.
* @param {Object} options - The plugin options.
* @returns {Boolean} `false` to cancel the chart tooltip drawing.
*/
/**
* @method IPlugin#afterTooltipDraw
* @desc Called after drawing the `tooltip`. Note that this hook will not
* be called if the tooltip drawing has been previously cancelled.
* @param {Chart} chart - The chart instance.
* @param {Object} args - The call arguments.
* @param {Object} args.tooltip - The tooltip.
* @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.
* @param {Object} options - The plugin options.
*/
/**
* @method IPlugin#beforeEvent
* @desc Called before processing the specified `event`. If any plugin returns `false`,
Expand Down
2 changes: 2 additions & 0 deletions test/specs/core.controller.tests.js
Expand Up @@ -884,6 +884,8 @@ describe('Chart', function() {
'beforeDatasetDraw',
'afterDatasetDraw',
'afterDatasetsDraw',
'beforeTooltipDraw',
'afterTooltipDraw',
'afterDraw',
'afterRender',
],
Expand Down

0 comments on commit 0619258

Please sign in to comment.