mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-01-21 23:09:51 +01:00
1258ed3a0d
There is virtually no shared code for the client, extract it into its own module and do away with the switches.
61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
var _ = require("underscore");
|
|
|
|
function loadFn(path, hookName) {
|
|
var functionName
|
|
, parts = path.split(":");
|
|
|
|
// on windows: C:\foo\bar:xyz
|
|
if (parts[0].length == 1) {
|
|
if (parts.length == 3) {
|
|
functionName = parts.pop();
|
|
}
|
|
path = parts.join(":");
|
|
} else {
|
|
path = parts[0];
|
|
functionName = parts[1];
|
|
}
|
|
|
|
var fn = require(path);
|
|
functionName = functionName ? functionName : hookName;
|
|
|
|
_.each(functionName.split("."), function (name) {
|
|
fn = fn[name];
|
|
});
|
|
return fn;
|
|
};
|
|
|
|
function extractHooks(parts, hook_set_name, normalizer) {
|
|
var hooks = {};
|
|
_.each(parts,function (part) {
|
|
_.chain(part[hook_set_name] || {})
|
|
.keys()
|
|
.each(function (hook_name) {
|
|
if (hooks[hook_name] === undefined) hooks[hook_name] = [];
|
|
|
|
var hook_fn_name = part[hook_set_name][hook_name];
|
|
|
|
/* On the server side, you can't just
|
|
* require("pluginname/whatever") if the plugin is installed as
|
|
* a dependency of another plugin! Bah, pesky little details of
|
|
* npm... */
|
|
if (normalizer) {
|
|
hook_fn_name = normalizer(part, hook_fn_name);
|
|
}
|
|
|
|
try {
|
|
var hook_fn = loadFn(hook_fn_name, hook_name);
|
|
if (!hook_fn) {
|
|
throw "Not a function";
|
|
}
|
|
} catch (exc) {
|
|
console.error("Failed to load '" + hook_fn_name + "' for '" + part.full_name + "/" + hook_set_name + "/" + hook_name + "': " + exc.toString())
|
|
}
|
|
if (hook_fn) {
|
|
hooks[hook_name].push({"hook_name": hook_name, "hook_fn": hook_fn, "hook_fn_name": hook_fn_name, "part": part});
|
|
}
|
|
});
|
|
});
|
|
return hooks;
|
|
};
|
|
|
|
exports.extractHooks = extractHooks;
|