diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/book.js | 1 | ||||
-rw-r--r-- | lib/cli/index.js | 11 | ||||
-rw-r--r-- | lib/config/index.js | 20 | ||||
-rw-r--r-- | lib/config/plugins.js | 24 | ||||
-rw-r--r-- | lib/config/schema.js | 4 | ||||
-rw-r--r-- | lib/config/validator.js | 3 | ||||
-rw-r--r-- | lib/output/base.js | 8 | ||||
-rw-r--r-- | lib/plugins/index.js | 5 |
8 files changed, 37 insertions, 39 deletions
diff --git a/lib/book.js b/lib/book.js index d7834ee..400296e 100644 --- a/lib/book.js +++ b/lib/book.js @@ -180,6 +180,7 @@ Book.prototype.parse = function() { that.log.debug.ln('Preparing book for language', lang.id); var langBook = new Book(_.extend({}, that.opts, { parent: that, + config: that.config.dump(), root: that.resolve(lang.id) })); diff --git a/lib/cli/index.js b/lib/cli/index.js index 33df69f..58a0e1b 100644 --- a/lib/cli/index.js +++ b/lib/cli/index.js @@ -113,14 +113,19 @@ module.exports = { // Generate the book .then(function() { return Book.setup(helper.nodeFS, input, { - 'config': { - 'defaultsPlugins': ['livereload'] - }, 'logLevel': kwargs.log }) .then(function(book) { return book.parse() .then(function() { + // Add livereload plugin + book.config.set('plugins', + book.config.get('plugins') + .concat([ + { name: 'livereload' } + ]) + ); + var Out = helper.FORMATS[kwargs.format]; var output = new Out(book); diff --git a/lib/config/index.js b/lib/config/index.js index 272e92a..7f75733 100644 --- a/lib/config/index.js +++ b/lib/config/index.js @@ -22,13 +22,15 @@ function Config(book, baseConfig) { this.log = book.log; this.path = ''; - this.replace(baseConfig || {}); + this.baseConfig = baseConfig || {}; + this.replace({}); } // Load configuration of the book // and verify that the configuration is satisfying Config.prototype.load = function() { var that = this; + var isLanguageBook = this.book.isLanguageBook(); // Try all potential configuration file return Promise.some(CONFIG_FILES, function(filename) { @@ -47,19 +49,19 @@ Config.prototype.load = function() { }); }) .then(function() { - if (!that.book.isLanguageBook()) { + if (!isLanguageBook) { if (!gitbook.satisfies(that.options.gitbook)) { throw new Error('GitBook version doesn\'t satisfy version required by the book: '+that.options.gitbook); } if (that.options.gitbook != '*' && !semver.satisfies(semver.inc(gitbook.version, 'patch'), that.options.gitbook)) { that.log.warn.ln('gitbook version specified in your book.json might be too strict for future patches, \''+(_.first(gitbook.version.split('.'))+'.x.x')+'\' is more adequate'); } - } - that.options.plugins = plugins.toList(that.options.plugins); - that.options.defaultsPlugins = plugins.toList(that.options.defaultsPlugins || '', false); - that.options.plugins = _.union(that.options.plugins, that.options.defaultsPlugins); - that.options.plugins = _.uniq(that.options.plugins, 'name'); + that.options.plugins = plugins.toList(that.options.plugins); + } else { + // Multilingual book should inherits the plugins list from parent + that.options.plugins = that.book.parent.config.get('plugins'); + } that.options.gitbook = gitbook.version; }); @@ -69,6 +71,10 @@ Config.prototype.load = function() { Config.prototype.replace = function(options) { var that = this; + // Extend base config + options = _.defaults(_.cloneDeep(options), this.baseConfig); + + // Validate the config this.options = validator.validate(options); // options.input == book.root diff --git a/lib/config/plugins.js b/lib/config/plugins.js index c75cd55..5d98736 100644 --- a/lib/config/plugins.js +++ b/lib/config/plugins.js @@ -9,7 +9,7 @@ function isDefaultPlugin(name, version) { } // Normalize a list of plugins to use -function normalizePluginsList(plugins, addDefaults) { +function normalizePluginsList(plugins) { // Normalize list to an array plugins = _.isString(plugins) ? plugins.split(',') : (plugins || []); @@ -25,8 +25,7 @@ function normalizePluginsList(plugins, addDefaults) { var version = parts[1]; return { 'name': name, - 'version': version, // optional - 'isDefault': isDefaultPlugin(name, version) + 'version': version // optional }; }); @@ -41,19 +40,15 @@ function normalizePluginsList(plugins, addDefaults) { .value(); // Merge with defaults - if (addDefaults !== false) { - _.each(DEFAULT_PLUGINS, function(plugin) { - if (_.find(plugins, { name: plugin })) { - return; - } + _.each(DEFAULT_PLUGINS, function(plugin) { + if (_.find(plugins, { name: plugin })) { + return; + } - plugins.push({ - 'name': plugin, - 'isDefault': true - }); + plugins.push({ + 'name': plugin }); - } - + }); // Remove plugin that start with '-' plugins = _.filter(plugins, function(plugin) { return !_.contains(toremove, plugin.name) && !(plugin.name.length > 0 && plugin.name[0] == '-'); @@ -66,6 +61,7 @@ function normalizePluginsList(plugins, addDefaults) { } module.exports = { + isDefaultPlugin: isDefaultPlugin, toList: normalizePluginsList }; diff --git a/lib/config/schema.js b/lib/config/schema.js index ac7d05e..34a6c76 100644 --- a/lib/config/schema.js +++ b/lib/config/schema.js @@ -179,10 +179,6 @@ module.exports = { }, 'version': { 'type': 'string' - }, - 'isDefault': { - 'type': 'boolean', - 'default': false } }, 'additionalProperties': false, diff --git a/lib/config/validator.js b/lib/config/validator.js index 0ea278f..764b19a 100644 --- a/lib/config/validator.js +++ b/lib/config/validator.js @@ -1,4 +1,3 @@ -var _ = require('lodash'); var jsonschema = require('jsonschema'); var jsonSchemaDefaults = require('json-schema-defaults'); var mergeDefaults = require('merge-defaults'); @@ -9,8 +8,6 @@ var error = require('../utils/error'); // Validate a book.json content // And return a mix with the default value function validate(bookJson) { - bookJson = _.cloneDeep(bookJson); - var v = new jsonschema.Validator(); var result = v.validate(bookJson, schema, { propertyName: 'config' diff --git a/lib/output/base.js b/lib/output/base.js index 025e850..a1d8804 100644 --- a/lib/output/base.js +++ b/lib/output/base.js @@ -27,11 +27,7 @@ function Output(book, opts, parent) { this.log = this.book.log; // Create plugins manager - if (this.parent) { - this.plugins = this.parent.plugins; - } else { - this.plugins = new PluginsManager(this.book); - } + this.plugins = new PluginsManager(this.book); // Create template engine this.template = new TemplateEngine(this); @@ -52,7 +48,7 @@ Output.prototype.generate = function() { // Load all plugins .then(function() { - return Promise(that.parent? null: that.plugins.loadAll()) + return that.plugins.loadAll() .then(function() { that.template.addFilters(that.plugins.getFilters()); that.template.addBlocks(that.plugins.getBlocks()); diff --git a/lib/plugins/index.js b/lib/plugins/index.js index 2ebbcc8..8280542 100644 --- a/lib/plugins/index.js +++ b/lib/plugins/index.js @@ -5,6 +5,7 @@ var Promise = require('../utils/promise'); var fs = require('../utils/fs'); var BookPlugin = require('./plugin'); var registry = require('./registry'); +var pluginsConfig = require('../config/plugins'); /* PluginsManager is an interface to work with multiple plugins at once: @@ -82,8 +83,8 @@ PluginsManager.prototype._setup = function(plugin) { // Install all plugins for the book PluginsManager.prototype.install = function() { var that = this; - var plugins = _.filter(this.book.config.get('plugins'), { - isDefault: false + var plugins = _.filter(this.book.config.get('plugins'), function(plugin) { + return !pluginsConfig.isDefaultPlugin(plugin.name); }); if (plugins.length == 0) { |