summaryrefslogtreecommitdiffstats
path: root/lib/generate/plugin.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2014-04-19 19:50:32 +0200
committerSamy Pessé <samypesse@gmail.com>2014-04-19 19:50:32 +0200
commit0ac04e15844d83c7fa0f805a256449a7eb88e822 (patch)
tree5e3b6ae351e1e9551d1a1f7dfa1f9bd60714abe4 /lib/generate/plugin.js
parentfb14caf5b3cfc321910ccb3ff57082dd7a43e51a (diff)
downloadgitbook-0ac04e15844d83c7fa0f805a256449a7eb88e822.zip
gitbook-0ac04e15844d83c7fa0f805a256449a7eb88e822.tar.gz
gitbook-0ac04e15844d83c7fa0f805a256449a7eb88e822.tar.bz2
Add call for hooks "init" and "finish"
Diffstat (limited to 'lib/generate/plugin.js')
-rw-r--r--lib/generate/plugin.js22
1 files changed, 21 insertions, 1 deletions
diff --git a/lib/generate/plugin.js b/lib/generate/plugin.js
index f753834..b51d1ff 100644
--- a/lib/generate/plugin.js
+++ b/lib/generate/plugin.js
@@ -67,6 +67,19 @@ Plugin.prototype.resolveFile = function(filename) {
return path.resolve(path.dirname(require.resolve(this.name)), filename);
};
+// Resolve file path
+Plugin.prototype.callHook = function(name, args) {
+ var hookFunc = this.infos.hooks? this.infos.hooks[name] : null;
+ args = _.isArray(args) ? args : [args];
+
+ if (!hookFunc) return Q();
+
+ return Q()
+ .then(function() {
+ return hookFunc.apply(null, args);
+ });
+};
+
// Extract data from a list of plugin
Plugin.fromList = function(names) {
var failed = [];
@@ -98,7 +111,14 @@ Plugin.fromList = function(names) {
return Q({
'list': plugins,
- 'resources': resources
+ 'resources': resources,
+ 'hook': function(name, args) {
+ return _.reduce(plugins, function(prev, plugin) {
+ return prev.then(function() {
+ return plugin.callHook(name, args);
+ })
+ }, Q());
+ }
});
};