sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
90 lines (79 loc) • 2.43 kB
JavaScript
var async = require("async");
var logger = require("./logger");
var container = {};
/*
callback: (err)
*/
module.exports.init = function(server, callback) {
try {
//initialize all of the registered plugins
var keys = module.exports.getPluginKeys();
async.each(keys, function (key, done) {
var p = module.exports.get(key);
if (p && typeof p.init === 'function') {
p.init(server, function (err) {
if (err) {
logger.error("Error initializing plugin: " + err + ". Call Stack: " + err.stack);
done(err);
} else {
logger.info("Plugin initialized: " + key);
done();
}
});
} else {
done();
}
}, function (err) {
if (callback) callback(err);
});
} catch(e) {
logger.error(e);
if (callback) callback(e);
}
};
module.exports.set = function(key, obj) {
logger.info("Registering plugin: " + key);
container[key] = obj;
};
module.exports.get = function(key) {
return container[key];
};
module.exports.getPluginKeys = function() {
return Object.keys(container);
};
module.exports.getPlugins = function() {
var keys = Object.keys(container);
var arr = [];
for(var i = 0; i < keys.length; i++) {
var obj = module.exports.get(keys[i]);
if (obj)
arr.push(obj);
}
return arr;
};
module.exports.getPluginResources = function() {
var result = {
scripts: [],
styles: []
};
var plugins = module.exports.getPlugins();
if (plugins && plugins.length > 0) {
for(var i = 0; i < plugins.length; i++) {
var obj = plugins[i];
if (obj && typeof obj.getResources == 'function') {
var r = obj.getResources();
if (r) {
if (r.scripts) {
for(var j = 0; j < r.scripts.length; j++)
result.scripts.push(r.scripts[j]);
}
if (r.styles) {
for(var j = 0; j < r.styles.length; j++)
result.styles.push(r.styles[j]);
}
}
}
}
}
return result;
};