summaryrefslogtreecommitdiffstats
path: root/lib/config
diff options
context:
space:
mode:
Diffstat (limited to 'lib/config')
-rw-r--r--lib/config/index.js11
-rw-r--r--lib/config/plugins.js71
2 files changed, 77 insertions, 5 deletions
diff --git a/lib/config/index.js b/lib/config/index.js
index 801dca1..ede45ba 100644
--- a/lib/config/index.js
+++ b/lib/config/index.js
@@ -2,8 +2,9 @@ var _ = require('lodash');
var semver = require('semver');
var gitbook = require('../gitbook');
-var configDefault = require('./default');
var Promise = require('../utils/promise');
+var configDefault = require('./default');
+var plugins = require('./plugins');
// Config files to tested (sorted)
var CONFIG_FILES = [
@@ -56,10 +57,10 @@ Config.prototype.load = function() {
}
that.options.output = that.options.output || that.book.resolve('_book');
- //that.options.plugins = normalizePluginsList(that.options.plugins);
- //that.options.defaultsPlugins = normalizePluginsList(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);
+ 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');
// Default value for text direction (from language)
/*if (!that.options.direction) {
diff --git a/lib/config/plugins.js b/lib/config/plugins.js
new file mode 100644
index 0000000..43eafdf
--- /dev/null
+++ b/lib/config/plugins.js
@@ -0,0 +1,71 @@
+var _ = require('lodash');
+
+// Default plugins added to each books
+var DEFAULT_PLUGINS = ['highlight', 'search', 'sharing', 'fontsettings'];
+
+// Return true if a plugin is a default plugin
+function isDefaultPlugin(name, version) {
+ return _.contains(DEFAULT_PLUGINS, name);
+}
+
+// Normalize a list of plugins to use
+function normalizePluginsList(plugins, addDefaults) {
+ // Normalize list to an array
+ plugins = _.isString(plugins) ? plugins.split(',') : (plugins || []);
+
+ // Remove empty parts
+ plugins = _.compact(plugins);
+
+ // Divide as {name, version} to handle format like 'myplugin@1.0.0'
+ plugins = _.map(plugins, function(plugin) {
+ if (plugin.name) return plugin;
+
+ var parts = plugin.split('@');
+ var name = parts[0];
+ var version = parts[1];
+ return {
+ 'name': name,
+ 'version': version, // optional
+ 'isDefault': isDefaultPlugin(name, version)
+ };
+ });
+
+ // List plugins to remove
+ var toremove = _.chain(plugins)
+ .filter(function(plugin) {
+ return plugin.name.length > 0 && plugin.name[0] == '-';
+ })
+ .map(function(plugin) {
+ return plugin.name.slice(1);
+ })
+ .value();
+
+ // Merge with defaults
+ if (addDefaults !== false) {
+ _.each(DEFAULT_PLUGINS, function(plugin) {
+ if (_.find(plugins, { name: plugin })) {
+ return;
+ }
+
+ plugins.push({
+ 'name': plugin,
+ 'isDefault': true
+ });
+ });
+ }
+
+ // Remove plugin that start with '-'
+ plugins = _.filter(plugins, function(plugin) {
+ return !_.contains(toremove, plugin.name) && !(plugin.name.length > 0 && plugin.name[0] == '-');
+ });
+
+ // Remove duplicates
+ plugins = _.uniq(plugins, 'name');
+
+ return plugins;
+}
+
+module.exports = {
+ toList: normalizePluginsList
+};
+