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 | |
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')
-rw-r--r-- | install/ui/src/freeipa/app.js | 14 | ||||
-rw-r--r-- | install/ui/src/freeipa/plugin_loader.js | 82 | ||||
-rw-r--r-- | install/ui/src/freeipa/plugins.js | 1 |
3 files changed, 92 insertions, 5 deletions
diff --git a/install/ui/src/freeipa/app.js b/install/ui/src/freeipa/app.js index 72a41497b..37c4c08a8 100644 --- a/install/ui/src/freeipa/app.js +++ b/install/ui/src/freeipa/app.js @@ -25,6 +25,8 @@ define([ //core 'dojo/_base/lang', 'dojo/Deferred', + 'dojo/when', + './plugin_loader', './phases', './Application_controller', 'exports', // for circullar deps @@ -52,7 +54,7 @@ define([ './trust', './user', 'dojo/domReady!' -],function(lang, Deferred, phases, Application_controller, exports) { +],function(lang, Deferred, when, plugin_loader, phases, Application_controller, exports) { var app = { @@ -102,10 +104,12 @@ define([ })); }, - run: function() { - this.register_phases(); - phases.controller.run(); - } + run: function() { + when(plugin_loader.load_plugins(), lang.hitch(this, function() { + this.register_phases(); + phases.controller.run(); + })); + } }; lang.mixin(exports, app); 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 diff --git a/install/ui/src/freeipa/plugins.js b/install/ui/src/freeipa/plugins.js new file mode 100644 index 000000000..67d3c34b4 --- /dev/null +++ b/install/ui/src/freeipa/plugins.js @@ -0,0 +1 @@ +define([],function(){return[];});
\ No newline at end of file |