diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/generators/ebook.js | 3 | ||||
-rw-r--r-- | lib/generators/website.js | 15 | ||||
-rw-r--r-- | lib/plugin.js | 12 | ||||
-rw-r--r-- | lib/pluginslist.js | 79 |
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; |