Web UI plugin loader

https://fedorahosted.org/freeipa/ticket/3235
This commit is contained in:
Petr Vobornik committed 2013-05-06 16:22:20 +02:00
1 parent 953f599415
commit 74b6099fb0
12 files changed
+168 -24

No files matched your search

-1
View File
@@ -4,7 +4,6 @@ NULL =
SUBDIRS = \
build \
ext \
images \
src \
$(NULL)
-14
View File
@@ -1,14 +0,0 @@
NULL =
appdir = $(IPA_DATA_DIR)/ui/ext
app_DATA = \
extension.js \
$(NULL)
EXTRA_DIST = \
$(app_DATA) \
$(NULL)
MAINTAINERCLEANFILES = \
*~ \
Makefile.in
View File
Whitespace-only changes.
+1
View File
@@ -0,0 +1 @@
../src/plugins/
+9 -5
View File
@@ -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);
+82
View File
@@ -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;
});
+1
View File
@@ -0,0 +1 @@
define([],function(){return[];});