Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding hooks "beforeTooltipDraw" and "afterTooltipDraw" to plugins #4793

Merged
merged 9 commits into from Oct 14, 2017
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 @@ -845,6 +845,8 @@ describe('Chart', function() {
'beforeDatasetDraw',
'afterDatasetDraw',
'afterDatasetsDraw',
'beforeTooltipDraw',
'afterTooltipDraw',
'afterDraw',
'afterRender',
],
Expand Down