mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-20 15:36:16 -04:00
plugins: Move plugin definitions to avoid monkey patching
Also document the plugin data structures.
This commit is contained in:
parent
dcbf876d03
commit
da459888dc
15 changed files with 104 additions and 92 deletions
|
@ -8,28 +8,25 @@ var _ = require("underscore");
|
|||
var settings = require('../../../node/utils/Settings');
|
||||
|
||||
var pluginUtils = require('./shared');
|
||||
var defs = require('./plugin_defs');
|
||||
|
||||
exports.prefix = 'ep_';
|
||||
exports.loaded = false;
|
||||
exports.plugins = {};
|
||||
exports.parts = [];
|
||||
exports.hooks = {};
|
||||
|
||||
// @TODO RPB this appears to be unused
|
||||
exports.ensure = function (cb) {
|
||||
if (!exports.loaded)
|
||||
if (!defs.loaded)
|
||||
exports.update(cb);
|
||||
else
|
||||
cb();
|
||||
};
|
||||
|
||||
exports.formatPlugins = function () {
|
||||
return _.keys(exports.plugins).join(", ");
|
||||
return _.keys(defs.plugins).join(", ");
|
||||
};
|
||||
|
||||
exports.formatPluginsWithVersion = function () {
|
||||
var plugins = [];
|
||||
_.forEach(exports.plugins, function(plugin){
|
||||
_.forEach(defs.plugins, function(plugin) {
|
||||
if(plugin.package.name !== "ep_etherpad-lite"){
|
||||
var pluginStr = plugin.package.name + "@" + plugin.package.version;
|
||||
plugins.push(pluginStr);
|
||||
|
@ -39,12 +36,12 @@ exports.formatPluginsWithVersion = function () {
|
|||
};
|
||||
|
||||
exports.formatParts = function () {
|
||||
return _.map(exports.parts, function (part) { return part.full_name; }).join("\n");
|
||||
return _.map(defs.parts, function(part) { return part.full_name; }).join('\n');
|
||||
};
|
||||
|
||||
exports.formatHooks = function (hook_set_name) {
|
||||
var res = [];
|
||||
var hooks = pluginUtils.extractHooks(exports.parts, hook_set_name || "hooks");
|
||||
var hooks = pluginUtils.extractHooks(defs.parts, hook_set_name || 'hooks');
|
||||
|
||||
_.chain(hooks).keys().forEach(function (hook_name) {
|
||||
_.forEach(hooks[hook_name], function (hook) {
|
||||
|
@ -60,8 +57,8 @@ exports.callInit = function () {
|
|||
|
||||
var hooks = require("./hooks");
|
||||
|
||||
let p = Object.keys(exports.plugins).map(function (plugin_name) {
|
||||
let plugin = exports.plugins[plugin_name];
|
||||
let p = Object.keys(defs.plugins).map(function(plugin_name) {
|
||||
let plugin = defs.plugins[plugin_name];
|
||||
let ep_init = path.normalize(path.join(plugin.package.path, ".ep_initialized"));
|
||||
return fsp_stat(ep_init).catch(async function() {
|
||||
await fsp_writeFile(ep_init, "done");
|
||||
|
@ -75,7 +72,7 @@ exports.callInit = function () {
|
|||
exports.pathNormalization = function (part, hook_fn_name, hook_name) {
|
||||
const parts = hook_fn_name.split(':');
|
||||
const functionName = (parts.length > 1) ? parts.pop() : hook_name;
|
||||
const packageDir = path.dirname(exports.plugins[part.plugin].package.path);
|
||||
const packageDir = path.dirname(defs.plugins[part.plugin].package.path);
|
||||
const fileName = path.normalize(path.join(packageDir, parts.join(':')));
|
||||
return fileName + ((functionName == null) ? '' : (':' + functionName));
|
||||
}
|
||||
|
@ -91,10 +88,10 @@ exports.update = async function () {
|
|||
});
|
||||
|
||||
return Promise.all(p).then(function() {
|
||||
exports.plugins = plugins;
|
||||
exports.parts = sortParts(parts);
|
||||
exports.hooks = pluginUtils.extractHooks(exports.parts, "hooks", exports.pathNormalization);
|
||||
exports.loaded = true;
|
||||
defs.plugins = plugins;
|
||||
defs.parts = sortParts(parts);
|
||||
defs.hooks = pluginUtils.extractHooks(defs.parts, 'hooks', exports.pathNormalization);
|
||||
defs.loaded = true;
|
||||
}).then(exports.callInit);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue