68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
var _ = require('lodash');
|
|
|
|
// Default plugins added to each books
|
|
var DEFAULT_PLUGINS = ['highlight', 'search', 'sharing', 'fontsettings', 'theme-default'];
|
|
|
|
// 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) {
|
|
// 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
|
|
};
|
|
});
|
|
|
|
// 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
|
|
_.each(DEFAULT_PLUGINS, function(plugin) {
|
|
if (_.find(plugins, { name: plugin })) {
|
|
return;
|
|
}
|
|
|
|
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] == '-');
|
|
});
|
|
|
|
// Remove duplicates
|
|
plugins = _.uniq(plugins, 'name');
|
|
|
|
return plugins;
|
|
}
|
|
|
|
module.exports = {
|
|
isDefaultPlugin: isDefaultPlugin,
|
|
toList: normalizePluginsList
|
|
};
|
|
|