mota-js/plugins/plugins.js
2019-10-19 15:53:01 +08:00

53 lines
1.5 KiB
JavaScript

//-----------------------------------------------------------------------------
// PluginManager
//
// The static class that manages the plugins.
function PluginManager() {
throw new Error('This is a static class');
}
PluginManager._path = 'plugins/files/';
PluginManager._scripts = [];
PluginManager._errorUrls = [];
PluginManager._parameters = {};
PluginManager.setup = function(plugins) {
plugins.forEach(function(plugin) {
if (plugin.status && this._scripts.indexOf(plugin.name)<0) {
this.setParameters(plugin.name, plugin.parameters);
this.loadScript(plugin.name + '.js');
this._scripts.push(plugin.name);
}
}, this);
};
PluginManager.checkErrors = function() {
var url = this._errorUrls.shift();
if (url) {
throw new Error('Failed to load: ' + url);
}
};
PluginManager.parameters = function(name) {
return this._parameters[name.toLowerCase()] || {};
};
PluginManager.setParameters = function(name, parameters) {
this._parameters[name.toLowerCase()] = parameters;
};
PluginManager.loadScript = function(name) {
var url = this._path + name;
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.async = false;
script.onerror = this.onError.bind(this);
script._url = url;
document.body.appendChild(script);
};
PluginManager.onError = function(e) {
this._errorUrls.push(e.target._url);
};