diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2013-03-20 17:28:17 +0100 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2013-05-06 16:22:20 +0200 |
commit | 74b6099fb058564a74b91b701c07532ed0f4cefc (patch) | |
tree | 4e0fe5b1998d1f97fa25279e81f66749b1a134f1 /install/ui/src/freeipa/plugin_loader.js | |
parent | 953f59941514ddc3582e51179e20eda9f124684c (diff) | |
download | freeipa-74b6099fb058564a74b91b701c07532ed0f4cefc.tar.gz freeipa-74b6099fb058564a74b91b701c07532ed0f4cefc.tar.xz freeipa-74b6099fb058564a74b91b701c07532ed0f4cefc.zip |
Web UI plugin loader
https://fedorahosted.org/freeipa/ticket/3235
Diffstat (limited to 'install/ui/src/freeipa/plugin_loader.js')
-rw-r--r-- | install/ui/src/freeipa/plugin_loader.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/install/ui/src/freeipa/plugin_loader.js b/install/ui/src/freeipa/plugin_loader.js new file mode 100644 index 000000000..ce545301b --- /dev/null +++ b/install/ui/src/freeipa/plugin_loader.js @@ -0,0 +1,82 @@ +/* Authors: + * Petr Vobornik <pvoborni@redhat.com> + * + * Copyright (C) 2013 Red Hat + * see file 'COPYING'./for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/** + * Plugin loader + */ +define([ + 'dojo/_base/array', + 'dojo/_base/lang', + 'dojo/Deferred', + 'dojo/promise/all' +],function(array, lang, Deferred, all) { + + var plugin_loader = { + + register_plugins: function(plugins) { + + var packages = []; + + array.forEach(plugins, function(name) { + packages.push({ + name: name, + location: 'plugins/'+name + }); + }); + + require({ packages: packages}); + }, + + load_plugin: function(name) { + var plugin_loaded = new Deferred(); + + var mid = name+'/'+name; + + require([mid], function(plugin) { + plugin_loaded.resolve(plugin); + }); + + return plugin_loaded.promise; + }, + + load_plugins: function() { + + var plugins_loaded = new Deferred(); + + require(['freeipa/plugins'], lang.hitch(this, function(plugins) { + var loading = []; + + this.register_plugins(plugins); + + array.forEach(plugins, lang.hitch(this, function(plugin) { + loading.push(this.load_plugin(plugin)); + })); + + all(loading).then(function(results) { + plugins_loaded.resolve(results); + }); + })); + + return plugins_loaded.promise; + } + }; + + return plugin_loader; +});
\ No newline at end of file |