"use strict"; module.exports = function(Chart) { var helpers = Chart.helpers; // Plugins are stored here Chart.plugins = []; Chart.pluginService = { // Register a new plugin register: function(plugin) { var p = Chart.plugins; if (p.indexOf(plugin) === -1) { p.push(plugin); } }, // Remove a registered plugin remove: function(plugin) { var p = Chart.plugins; var idx = p.indexOf(plugin); if (idx !== -1) { p.splice(idx, 1); } }, // Iterate over all plugins notifyPlugins: function(method, args, scope) { helpers.each(Chart.plugins, function(plugin) { if (plugin[method] && typeof plugin[method] === 'function') { plugin[method].apply(scope, args); } }, scope); } }; var noop = helpers.noop; Chart.PluginBase = Chart.Element.extend({ // Plugin methods. All functions are passed the chart instance // Called at start of chart init beforeInit: noop, // Called at end of chart init afterInit: noop, // Called at start of update beforeUpdate: noop, // Called at end of update afterUpdate: noop, // Called at start of draw beforeDraw: noop, // Called at end of draw afterDraw: noop, // Called during destroy destroy: noop }); };