summaryrefslogtreecommitdiffstats
path: root/lib/plugins
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-06-10 16:37:44 +0200
committerSamy Pessé <samypesse@gmail.com>2016-06-10 16:37:44 +0200
commite92b661a2a9b193a85dbae998e463cf9b6299fb9 (patch)
treedac4c08a901136254a26490bf74672255778a646 /lib/plugins
parentb9fe60915f8555fb339a8e736a0b1fa604738364 (diff)
downloadgitbook-e92b661a2a9b193a85dbae998e463cf9b6299fb9.zip
gitbook-e92b661a2a9b193a85dbae998e463cf9b6299fb9.tar.gz
gitbook-e92b661a2a9b193a85dbae998e463cf9b6299fb9.tar.bz2
Adapt sortPlugins to only sort an ordered map of plugins
Diffstat (limited to 'lib/plugins')
-rw-r--r--lib/plugins/__tests__/sortPlugins.js77
-rw-r--r--lib/plugins/listAll.js4
-rw-r--r--lib/plugins/loadForBook.js4
-rw-r--r--lib/plugins/sortPlugins.js24
4 files changed, 65 insertions, 44 deletions
diff --git a/lib/plugins/__tests__/sortPlugins.js b/lib/plugins/__tests__/sortPlugins.js
index c50c851..99955fb 100644
--- a/lib/plugins/__tests__/sortPlugins.js
+++ b/lib/plugins/__tests__/sortPlugins.js
@@ -1,50 +1,57 @@
-var PluginDependency = require('../../models/pluginDependency');
+var Immutable = require('immutable');
+
+var Plugin = require('../../models/plugin');
var sortPlugins = require('../sortPlugins');
-var listAll = require('../listAll');
-describe('sortPlugins', function() {
+/**
+ * Return list of plugin names
+ * @param {OrderedMap<String:Plugin} plugins
+ * @return {Array<String>}
+ */
+function toNames(plugins) {
+ return plugins
+ .map(function(plugin) {
+ return plugin.getName();
+ })
+ .toArray();
+}
+
+describe.only('sortPlugins', function() {
it('must load themes after plugins', function() {
- var deps = PluginDependency.listFromString('theme-faq'),
- allPlugins = listAll(deps);
+ var allPlugins = Immutable.OrderedMap([
+ ['hello', Plugin.createFromString('hello')],
+ ['theme-test', Plugin.createFromString('theme-test')],
+ ['world', Plugin.createFromString('world')]
+ ]);
- var sorted = sortPlugins(allPlugins, []);
- var names = sorted
- .map(function(plugin) {
- return plugin.getName();
- })
- .toArray();
+ var sorted = sortPlugins(allPlugins);
+ var names = toNames(sorted);
expect(names).toEqual([
- 'fontsettings',
- 'sharing',
- 'lunr',
- 'search',
- 'highlight',
- 'theme-faq',
- 'theme-default'
+ 'hello',
+ 'world',
+ 'theme-test'
]);
});
- it('must load themes after plugins with a complex dependencies list', function() {
- var deps = PluginDependency.listFromString('comment,theme-faq,-search,ga'),
- allPlugins = listAll(deps);
+ it('must keep order of themes', function() {
+ var allPlugins = Immutable.OrderedMap([
+ ['theme-test', Plugin.createFromString('theme-test')],
+ ['theme-test1', Plugin.createFromString('theme-test1')],
+ ['hello', Plugin.createFromString('hello')],
+ ['theme-test2', Plugin.createFromString('theme-test2')],
+ ['world', Plugin.createFromString('world')]
+ ]);
- var sorted = sortPlugins(allPlugins, []);
- var names = sorted
- .map(function(plugin) {
- return plugin.getName();
- })
- .toArray();
+ var sorted = sortPlugins(allPlugins);
+ var names = toNames(sorted);
expect(names).toEqual([
- 'ga',
- 'comment',
- 'fontsettings',
- 'sharing',
- 'lunr',
- 'highlight',
- 'theme-faq',
- 'theme-default'
+ 'hello',
+ 'world',
+ 'theme-test',
+ 'theme-test1',
+ 'theme-test2'
]);
});
}); \ No newline at end of file
diff --git a/lib/plugins/listAll.js b/lib/plugins/listAll.js
index cbeb06b..bf5dfb8 100644
--- a/lib/plugins/listAll.js
+++ b/lib/plugins/listAll.js
@@ -2,6 +2,7 @@ var Immutable = require('immutable');
var Plugin = require('../models/plugin');
var DEFAULT_PLUGINS = require('../constants/defaultPlugins');
+var sortPlugins = require('./sortPlugins');
/**
List all plugins for a book
@@ -36,7 +37,8 @@ function listAll(deps) {
return toRemove.includes(name);
});
- return plugins;
+ // Sort plugins
+ return sortPlugins(plugins);
}
module.exports = listAll;
diff --git a/lib/plugins/loadForBook.js b/lib/plugins/loadForBook.js
index 296cb01..96a0cb5 100644
--- a/lib/plugins/loadForBook.js
+++ b/lib/plugins/loadForBook.js
@@ -3,7 +3,6 @@ var Promise = require('../utils/promise');
var listForBook = require('./listForBook');
var findForBook = require('./findForBook');
var loadPlugin = require('./loadPlugin');
-var sortPlugins = require('./sortPlugins');
/**
@@ -27,9 +26,6 @@ function loadForBook(book) {
);
});
- // Sort plugins
- installed = sortPlugins(installed, requirementsKeys);
-
// Log state
logger.info.ln(installed.size + ' plugins are installed');
if (requirements.size != installed.size) {
diff --git a/lib/plugins/sortPlugins.js b/lib/plugins/sortPlugins.js
index e96b02c..ca8a8a7 100644
--- a/lib/plugins/sortPlugins.js
+++ b/lib/plugins/sortPlugins.js
@@ -1,12 +1,20 @@
+var Immutable = require('immutable');
+
var THEME_PREFIX = require('../constants/themePrefix');
var LOADING_ORDER = ['plugin', 'theme'];
+var TYPE_PLUGIN = 'plugin';
+var TYPE_THEME = 'theme';
+
+
/**
* Returns the type of a plugin given its name
+ * @param {Plugin} plugin
* @return {String}
*/
-function pluginType(name) {
- return (name && name.indexOf(THEME_PREFIX) === 0) ? 'theme' : 'plugin';
+function pluginType(plugin) {
+ var name = plugin.getName();
+ return (name && name.indexOf(THEME_PREFIX) === 0) ? TYPE_THEME : TYPE_PLUGIN;
}
@@ -15,10 +23,18 @@ function pluginType(name) {
* The themes should always be loaded after the plugins
*
* @param {<OrderedMap<String:Plugin>>} plugins
- * @param {<List<String>>} requirementsKeys
* @return {OrderedMap<String:Plugin>}
*/
-function sortPlugins(plugins, requirementsKeys) {
+function sortPlugins(plugins) {
+ var byTypes = plugins.groupBy(pluginType);
+
+ return byTypes.get(TYPE_PLUGIN, Immutable.OrderedMap())
+ .merge(
+ byTypes.get(TYPE_THEME, Immutable.OrderedMap())
+ );
+
+
+
// Sort plugins to match list in book.json
return plugins.sort(function(a, b) {
// Get order from book.json