icingaweb2/public/js/icinga/module.js

101 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*global Icinga:false, $: false, document: false, define:false requirejs:false base_url:false console:false */
/**
This prototype encapsulates the modules registered in the module folder
**/
(function() {
"use strict";
var loaded = {};
define(['logging'],function(log) {
var registerModuleFunctions = function(module) {
var enableFn = module.enable, disableFn = module.disable;
module.enable = (function(root) {
root = root || $('body');
for (var jqMatcher in this.eventHandler) {
for (var ev in this.eventHandler[jqMatcher]) {
log.debug("Registered module: ", "'"+ev+"'", jqMatcher);
$(root).on(ev,jqMatcher,this.eventHandler[jqMatcher][ev]);
}
}
if(enableFn) {
enableFn.apply(this,arguments);
}
}).bind(module);
module.disable = (function(root) {
root = root || $('body');
for (var jqMatcher in this.eventHandler) {
for (var ev in this.eventHandler[jqMatcher]) {
log.debug("Unregistered module: ", "'"+ev+"'", jqMatcher);
$(root).off(ev,jqMatcher,this.eventHandler[jqMatcher][ev]);
}
}
if (disableFn) {
disableFn.apply(this,arguments);
}
}).bind(module);
};
var CallInterface = function() {
/**
* Loads a module and calls successCallback with the module as the parameter on success, otherwise
* the errorCallback with the errorstring as the first parameter
*
* @param name
* @param errorCallback
* @param successCallback
*/
this.enableModule = function(name,errorCallback,successCallback) {
requirejs([name],function(module) {
if (typeof module === "undefined") {
return errorCallback(new Error("Unknown module: "+name));
}
if (typeof module.eventHandler === "object") {
registerModuleFunctions(module);
}
if (typeof module.enable === "function") {
module.enable();
}
loaded[name] = {
module: module,
active: true
};
if (typeof successCallback === "function") {
successCallback(module);
}
},function(err) {
errorCallback("Could not load module "+name+" "+err,err);
});
};
this.disableModule = function(name) {
if(loaded[name] && loaded[name].active) {
loaded[name].module.disable();
}
};
/**
* This should *ONLY* be called in testcases
**/
this.resetHard = function() {
if (typeof describe !== "function") {
return;
}
loaded = {};
};
};
return new CallInterface();
});
})();