mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-21 07:56:16 -04:00
Plugin list can now be reloaded 'live'
This commit is contained in:
parent
6fe7f2c2b2
commit
c591efb352
6 changed files with 152 additions and 83 deletions
|
@ -3,43 +3,74 @@ var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");
|
|||
var npm = require("npm");
|
||||
var registry = require("npm/lib/utils/npm-registry-client/index.js");
|
||||
|
||||
exports.uninstall = function(plugin_name, cb) {
|
||||
var withNpm = function (npmfn, cb) {
|
||||
npm.load({}, function (er) {
|
||||
if (er) return cb(er)
|
||||
npm.commands.uninstall([plugin_name], function (er) {
|
||||
if (er) return cb(er);
|
||||
hooks.aCallAll("pluginUninstall", {plugin_name: plugin_name}, function (er) {
|
||||
cb(er);
|
||||
});
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
exports.install = function(plugin_name, cb) {
|
||||
npm.load({}, function (er) {
|
||||
if (er) return cb(er)
|
||||
npm.commands.install([plugin_name], function (er) {
|
||||
if (er) return cb(er);
|
||||
hooks.aCallAll("pluginInstall", {plugin_name: plugin_name}, function (er) {
|
||||
cb(er);
|
||||
});
|
||||
if (er) return cb({progress:1, error:er});
|
||||
npm.on("log", function (message) {
|
||||
cb({progress: 0.5, message:message.msg + ": " + message.pref});
|
||||
});
|
||||
npmfn(function (er, data) {
|
||||
if (er) return cb({progress:1, error:er.code + ": " + er.path});
|
||||
if (!data) data = {};
|
||||
data.progress = 1;
|
||||
data.message = "Done.";
|
||||
cb(data);
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
exports.search = function(pattern, cb) {
|
||||
npm.load({}, function (er) {
|
||||
registry.get(
|
||||
"/-/all", null, 600, false, true,
|
||||
function (er, data) {
|
||||
if (er) return cb(er);
|
||||
var res = {};
|
||||
for (key in data) {
|
||||
if (/*key.indexOf(plugins.prefix) == 0 &&*/ key.indexOf(pattern) != -1)
|
||||
res[key] = data[key];
|
||||
}
|
||||
cb(null, res);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
// All these functions call their callback multiple times with
|
||||
// {progress:[0,1], message:STRING, error:object}. They will call it
|
||||
// with progress = 1 at least once, and at all times will either
|
||||
// message or error be present, not both. It can be called multiple
|
||||
// times for all values of propgress except for 1.
|
||||
|
||||
exports.uninstall = function(plugin_name, cb) {
|
||||
withNpm(
|
||||
function (cb) {
|
||||
npm.commands.uninstall([plugin_name], function (er) {
|
||||
if (er) return cb(er);
|
||||
hooks.aCallAll("pluginUninstall", {plugin_name: plugin_name}, function (er, data) {
|
||||
if (er) return cb(er);
|
||||
plugins.update(cb);
|
||||
});
|
||||
});
|
||||
},
|
||||
cb
|
||||
);
|
||||
};
|
||||
|
||||
exports.install = function(plugin_name, cb) {
|
||||
withNpm(
|
||||
function (cb) {
|
||||
npm.commands.install([plugin_name], function (er) {
|
||||
if (er) return cb(er);
|
||||
hooks.aCallAll("pluginInstall", {plugin_name: plugin_name}, function (er, data) {
|
||||
if (er) return cb(er);
|
||||
plugins.update(cb);
|
||||
});
|
||||
});
|
||||
},
|
||||
cb
|
||||
);
|
||||
};
|
||||
|
||||
exports.search = function(pattern, cb) {
|
||||
withNpm(
|
||||
function (cb) {
|
||||
registry.get(
|
||||
"/-/all", null, 600, false, true,
|
||||
function (er, data) {
|
||||
if (er) return cb(er);
|
||||
var res = {};
|
||||
for (key in data) {
|
||||
if (/*key.indexOf(plugins.prefix) == 0 &&*/ key.indexOf(pattern) != -1)
|
||||
res[key] = data[key];
|
||||
}
|
||||
cb(null, {results:res});
|
||||
}
|
||||
);
|
||||
},
|
||||
cb
|
||||
);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue