1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/* 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/>.
*/
define([
'dojo/_base/array',
'dojo/_base/lang',
'dojo/Deferred',
'dojo/promise/all'
],function(array, lang, Deferred, all) {
/**
* Plugin loader
* @class
* @singleton
*/
var plugin_loader = {
/**
* Register plugins
* @param {Array.<string>} plugins
*/
register_plugins: function(plugins) {
var packages = [];
array.forEach(plugins, function(name) {
packages.push({
name: name,
location: 'plugins/'+name
});
});
require({ packages: packages});
},
/**
* Load plugin
* @param {string} name
* @return {Promise}
*/
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
*
* - loads plugin list from `freeipa/plugins` module.
* @return {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;
});
|