summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-09-22 23:25:15 +0200
committerSamy Pessé <samypesse@gmail.com>2015-09-22 23:25:15 +0200
commit58a3c5634ee4c2d21d7b6236516149bb8912d9dd (patch)
tree7734da5cc64599649b912951a6017b5cd0652f13 /lib
parentf0ddb6e89f78558814e3a3b4ac6c919b8d5ac3a8 (diff)
downloadgitbook-58a3c5634ee4c2d21d7b6236516149bb8912d9dd.zip
gitbook-58a3c5634ee4c2d21d7b6236516149bb8912d9dd.tar.gz
gitbook-58a3c5634ee4c2d21d7b6236516149bb8912d9dd.tar.bz2
Improve installation of plugins to not install default ones
Diffstat (limited to 'lib')
-rw-r--r--lib/configuration.js44
-rw-r--r--lib/pluginslist.js5
2 files changed, 36 insertions, 13 deletions
diff --git a/lib/configuration.js b/lib/configuration.js
index 2412ff3..b314492 100644
--- a/lib/configuration.js
+++ b/lib/configuration.js
@@ -7,7 +7,21 @@ var pkg = require("../package.json");
var i18n = require("./utils/i18n");
// Default plugins added to each books
-var defaultsPlugins = ["highlight"];
+var DEFAULT_PLUGINS = ["highlight"];
+
+// Check if a plugin is a default plugin
+// Plugin should be in the list
+// And version from book.json specified for this plugin should be satisfied
+function isDefaultPlugin(name, version) {
+ if (!_.contains(DEFAULT_PLUGINS, name)) return false;
+
+ try {
+ var pluginPkg = require('gitbook-plugin-'+name+'/package.json');
+ return semver.satisfies(pluginPkg.version, version || '*');
+ } catch(e) {
+ return false;
+ }
+}
// Normalize a list of plugins to use
function normalizePluginsList(plugins, addDefaults) {
@@ -22,9 +36,12 @@ function normalizePluginsList(plugins, addDefaults) {
if (plugin.name) return plugin;
var parts = plugin.split("@");
+ var name = parts[0];
+ var version = parts[1];
return {
- "name": parts[0],
- "version": parts[1] // optional
+ "name": name,
+ "version": version, // optional
+ "isDefault": isDefaultPlugin(name, version)
};
});
@@ -40,19 +57,26 @@ function normalizePluginsList(plugins, addDefaults) {
// Merge with defaults
if (addDefaults !== false) {
- plugins = _.chain(plugins)
- .concat(_.map(defaultsPlugins, function(plugin) {
- return { "name": plugin };
- }))
- .uniq()
- .value();
+ _.each(DEFAULT_PLUGINS, function(plugin) {
+ if (_.find(plugins, { name: plugin })) {
+ return;
+ }
+
+ plugins.push({
+ "name": plugin,
+ "isDefault": true
+ });
+ });
}
- // Build final list
+ // 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;
}
diff --git a/lib/pluginslist.js b/lib/pluginslist.js
index ec9f4c8..80e1d3e 100644
--- a/lib/pluginslist.js
+++ b/lib/pluginslist.js
@@ -146,11 +146,10 @@ PluginsList.prototype.resources = function(namespace) {
// Install plugins from a book
PluginsList.prototype.install = function() {
var that = this;
- var defaultsPlugins = _.pluck(that.book.options.defaultsPlugins);
// Remove defaults (no need to install)
- var plugins = _.filter(that.book.options.plugins, function(plugin) {
- return !_.contains(defaultsPlugins, plugin.name);
+ var plugins = _.reject(that.book.options.plugins, {
+ isDefault: true
});
// Install plugins one by one