@spalger/kibana
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
63 lines (48 loc) • 1.56 kB
JavaScript
define(function (require) {
var angular = require('angular');
var existingModules = {};
var _ = require('lodash');
var links = [];
function link(module) {
// as modules are defined they will be set as requirements for this app
links.push(module);
// merge in the existing modules
module.requires = _.union(module.requires, _.keys(existingModules));
}
function get(moduleName, requires) {
var module = existingModules[moduleName];
if (module === void 0) {
// create the module
module = existingModules[moduleName] = angular.module(moduleName, []);
module.close = _.partial(close, moduleName);
// ensure that it is required by linked modules
_.each(links, function (app) {
if (!~app.requires.indexOf(moduleName)) app.requires.push(moduleName);
});
}
if (requires) {
// update requires list with possibly new requirements
module.requires = _.union(module.requires, requires);
}
return module;
}
function close(moduleName) {
var module = existingModules[moduleName];
// already closed
if (!module) return;
// if the module is currently linked, unlink it
var i = links.indexOf(module);
if (i > -1) links.splice(i, 1);
// remove from linked modules list of required modules
_.each(links, function (app) {
_.pull(app.requires, moduleName);
});
// remove module from existingModules
delete existingModules[moduleName];
}
return {
link: link,
get: get,
close: close
};
});