From 74b6099fb058564a74b91b701c07532ed0f4cefc Mon Sep 17 00:00:00 2001 From: Petr Vobornik Date: Wed, 20 Mar 2013 17:28:17 +0100 Subject: Web UI plugin loader https://fedorahosted.org/freeipa/ticket/3235 --- install/ui/src/freeipa/app.js | 14 ++++-- install/ui/src/freeipa/plugin_loader.js | 82 +++++++++++++++++++++++++++++++++ install/ui/src/freeipa/plugins.js | 1 + 3 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 install/ui/src/freeipa/plugin_loader.js create mode 100644 install/ui/src/freeipa/plugins.js (limited to 'install/ui/src/freeipa') 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 + * + * 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 . +*/ + +/** + * 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 -- cgit