mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-18 16:01:40 +03:00
0238909281
Implements basic functionality described in #227 for loading plugins from a specific directory and having a specific workflow with an init() method and a disable() method.
72 lines
2.6 KiB
JavaScript
72 lines
2.6 KiB
JavaScript
|
|
var _ = require("underscore"),
|
|
when = require('when'),
|
|
ghostApi,
|
|
loader = require("./loader"),
|
|
GhostPlugin = require("./GhostPlugin");
|
|
|
|
function getInstalledPlugins() {
|
|
if (!ghostApi) {
|
|
ghostApi = require('../api');
|
|
}
|
|
|
|
return ghostApi.settings.read("installedPlugins").then(function (installed) {
|
|
installed = installed || "[]";
|
|
|
|
try {
|
|
installed = JSON.parse(installed.value);
|
|
} catch (e) {
|
|
return when.reject(e);
|
|
}
|
|
|
|
return installed;
|
|
});
|
|
}
|
|
|
|
function saveInstalledPlugins(installedPlugins) {
|
|
return getInstalledPlugins().then(function (currentInstalledPlugins) {
|
|
var updatedPluginsInstalled = _.uniq(installedPlugins.concat(currentInstalledPlugins));
|
|
|
|
return ghostApi.settings.edit("installedPlugins", updatedPluginsInstalled);
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
GhostPlugin: GhostPlugin,
|
|
|
|
init: function (ghost, pluginsToLoad) {
|
|
// Grab all installed plugins, install any not already installed that are in pluginsToLoad.
|
|
return getInstalledPlugins().then(function (installedPlugins) {
|
|
var loadedPlugins = {},
|
|
recordLoadedPlugin = function (name, loadedPlugin) {
|
|
// After loading the plugin, add it to our hash of loaded plugins
|
|
loadedPlugins[name] = loadedPlugin;
|
|
|
|
return when.resolve(loadedPlugin);
|
|
},
|
|
loadPromises = _.map(pluginsToLoad, function (plugin) {
|
|
// If already installed, just activate the plugin
|
|
if (_.contains(installedPlugins, plugin)) {
|
|
return loader.activatePluginByName(plugin, ghost).then(function (loadedPlugin) {
|
|
return recordLoadedPlugin(plugin, loadedPlugin);
|
|
});
|
|
}
|
|
|
|
// Install, then activate the plugin
|
|
return loader.installPluginByName(plugin, ghost).then(function () {
|
|
return loader.activatePluginByName(plugin, ghost);
|
|
}).then(function (loadedPlugin) {
|
|
return recordLoadedPlugin(plugin, loadedPlugin);
|
|
});
|
|
});
|
|
|
|
return when.all(loadPromises).then(function () {
|
|
// Save our installed plugins to settings
|
|
return saveInstalledPlugins(_.keys(loadedPlugins));
|
|
}).then(function () {
|
|
// Return the hash of all loaded plugins
|
|
return when.resolve(loadedPlugins);
|
|
});
|
|
});
|
|
}
|
|
}; |