define(['libs/jquery', 'libs/underscore'], function($, _) {
+'use strict';
+
var Runner = function(app, modules) {
function getModuleInstance(moduleName) {
}
var bootstrappedData = {},
- options = {},
moduleInstances = {},
- eventListeners = [];
+ eventListeners = [],
+ plugins = [],
+ config;
_.each(_.keys(modules || {}), function(moduleName) {
if(_.contains(app.permissions[moduleName] || [], 'handleEvents')) {
};
this.publish = function(eventName) {
- console.log(moduleName + ': ' + eventName);
var eventArgs = Array.prototype.slice.call(arguments, 1);
_.each(eventListeners, function(listenerModuleName) {
var listener = moduleInstances[listenerModuleName];
} : undefined;
this.getDOM = _.contains(permissions, 'getDOM') ? function() {
- return $(options.rootSelector);
+ return $(config.rootSelector);
} : undefined;
-
+
+ this.getPlugins = function() {
+ return plugins;
+ };
+
+ this.getConfig = function() {
+ return config;
+ };
};
this.setBootstrappedData = function(moduleName, data) {
bootstrappedData[moduleName] = data;
};
+
+ this.registerPlugin = function(plugin) {
+ plugins.push(plugin);
+ };
- this.start = function(_options) {
- options = _.extend({
+ this.start = function(_config) {
+ config = _.extend({
rootSelector: 'body'
- }, _options);
+ }, _config);
app.initModules.forEach(function(moduleName) {
getModuleInstance(moduleName).start();
});