summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/generators/ebook.js3
-rw-r--r--lib/generators/website.js15
-rw-r--r--lib/plugin.js12
-rw-r--r--lib/pluginslist.js79
4 files changed, 65 insertions, 44 deletions
diff --git a/lib/generators/ebook.js b/lib/generators/ebook.js
index e9ca20c..eb84df8 100644
--- a/lib/generators/ebook.js
+++ b/lib/generators/ebook.js
@@ -14,6 +14,9 @@ var Generator = function(book, format) {
// eBook format
this.ebookFormat = format;
+ // Resources namespace
+ this.namespace = "ebook";
+
// Styles to use
this.styles = _.compact(["ebook", this.ebookFormat]);
diff --git a/lib/generators/website.js b/lib/generators/website.js
index 0187416..bedf1af 100644
--- a/lib/generators/website.js
+++ b/lib/generators/website.js
@@ -18,9 +18,12 @@ var pkg = require("../../package.json");
var Generator = function() {
BaseGenerator.apply(this, arguments);
- // revision
+ // Revision
this.revision = new Date();
+ // Resources namespace
+ this.namespace = "website";
+
// Style to integrates in the output
this.styles = ["website"];
@@ -236,9 +239,11 @@ Generator.prototype._writeTemplate = function(tpl, options, output, interpolate)
summary: that.book.summary,
allNavigation: that.book.navigation,
- plugins: that.book.plugins,
+ plugins: {
+ resources: that.book.plugins.resources(that.namespace)
+ },
pluginsConfig: JSON.stringify(that.options.pluginsConfig),
- htmlSnippet: _.partialRight(that.book.plugins.html, that, options),
+ htmlSnippet: _.partial(_.partialRight(that.book.plugins.html, that, options), that.namespace),
options: that.options,
@@ -271,9 +276,7 @@ Generator.prototype.copyAssets = function() {
return Q.all(
_.map(that.book.plugins.list, function(plugin) {
var pluginAssets = path.join(that.options.output, "gitbook/plugins/", plugin.name);
- return plugin.copyAssets(pluginAssets, {
- base: "book"
- });
+ return plugin.copyAssets(pluginAssets, that.namespace);
})
);
});
diff --git a/lib/plugin.js b/lib/plugin.js
index 995385a..ff35a3f 100644
--- a/lib/plugin.js
+++ b/lib/plugin.js
@@ -68,9 +68,12 @@ Plugin.prototype.normalizeResource = function(resource) {
// Return resources
Plugin.prototype._getResources = function(base) {
- base = base || "book";
+ base = base;
var book = this.infos[base];
+ // Compatibility with version 1.x.x
+ if (base == "website") book = book || this.infos["book"];
+
// Nothing specified, fallback to default
if (!book) {
return Q({});
@@ -156,13 +159,10 @@ Plugin.prototype.callHook = function(name, data) {
};
// Copy plugin assets fodler
-Plugin.prototype.copyAssets = function(out, options) {
+Plugin.prototype.copyAssets = function(out, base) {
var that = this;
- options = _.defaults(options || {}, {
- base: "book"
- });
- return this.getResources(options.base)
+ return this.getResources(base)
.get('assets')
.then(function(assets) {
// Assets are undefined
diff --git a/lib/pluginslist.js b/lib/pluginslist.js
index b3e1ccc..10e21ac 100644
--- a/lib/pluginslist.js
+++ b/lib/pluginslist.js
@@ -13,14 +13,24 @@ var PluginsList = function(book, plugins) {
// List of names of failed plugins
this.failed = [];
- // List of plugins resources
- this.resources = {};
- _.each(Plugin.RESOURCES, function(resourceType) {
- this.resources[resourceType] = [];
- }, this);
-
- // Map of html snippets
- this.htmlSnippets = {};
+ // Namespaces
+ this.namespaces = _.chain(["website", "ebook"])
+ .map(function(namespace) {
+ return [
+ namespace,
+ {
+ html: {},
+ resources: _.chain(Plugin.RESOURCES)
+ .map(function(type) {
+ return [type, []];
+ })
+ .object()
+ .value()
+ }
+ ];
+ })
+ .object()
+ .value();
// Bind methods
_.bindAll(this);
@@ -36,9 +46,6 @@ PluginsList.prototype.count = function() {
// Add and load a plugin
PluginsList.prototype.load = function(plugin, options) {
var that = this;
- options = _.defaults(options || {}, {
- assetsBase: "book"
- });
if (_.isArray(plugin)) {
return _.reduce(plugin, function(prev, p) {
@@ -72,26 +79,28 @@ PluginsList.prototype.load = function(plugin, options) {
that.book.template.addBlock(blockName, block);
});
- return Q()
- .then(function() {
- return plugin.getResources(options.assetsBase);
- })
-
- .then(function(plResources) {
- // Extract js and css
- _.each(Plugin.RESOURCES, function(resourceType) {
- that.resources[resourceType] = that.resources[resourceType].concat(plResources[resourceType] || []);
+ return _.reduce(_.keys(that.namespaces), function(prev, namespaceName) {
+ return prev.then(function() {
+ return plugin.getResources(namespaceName)
+ .then(function(plResources) {
+ var namespace = that.namespaces[namespaceName];
+
+ // Extract js and css
+ _.each(Plugin.RESOURCES, function(resourceType) {
+ namespace.resources[resourceType] = (namespace.resources[resourceType] || []).concat(plResources[resourceType] || []);
+ });
+
+ // Map of html resources by name added by each plugin
+ _.each(plResources.html || {}, function(value, tag) {
+ // Turn into function if not one already
+ if (!_.isFunction(value)) value = _.constant(value);
+
+ namespace.html[tag] = namespace.html[tag] || [];
+ namespace.html[tag].push(value);
+ });
+ })
});
-
- // Map of html resources by name added by each plugin
- _.each(plResources.html || {}, function(value, tag) {
- // Turn into function if not one already
- if (!_.isFunction(value)) value = _.constant(value);
-
- that.htmlSnippets[tag] = that.htmlSnippets[tag] || [];
- that.htmlSnippets[tag].push(value);
- });
- });
+ }, Q());
};
// Call a hook
@@ -117,10 +126,16 @@ PluginsList.prototype.template = function(name) {
};
// Return an html snippet
-PluginsList.prototype.html = function(tag, context, options) {
- return _.map(this.htmlSnippets[tag] || [], function(code) {
+PluginsList.prototype.html = function(namespace, tag, context, options) {
+ var htmlSnippets = this.namespaces[namespace].html[tag];
+ return _.map(htmlSnippets || [], function(code) {
return code.call(context, options);
}).join("\n");
};
+// Return a resources map for a namespace
+PluginsList.prototype.resources = function(namespace) {
+ return this.namespaces[namespace].resources;
+};
+
module.exports = PluginsList;