Commit | Line | Data |
---|---|---|
0795d180 AE |
1 | (function(window) { |
2 | var orgRequire = window.require; | |
3 | var queue = []; | |
4 | var counter = 0; | |
5 | ||
75862143 | 6 | window.require = function(dependencies, callback, errBack) { |
0795d180 AE |
7 | if (!Array.isArray(dependencies)) { |
8 | return orgRequire.apply(window, arguments); | |
9 | } | |
10 | ||
bb8e158a TD |
11 | var promise = new Promise(function (resolve, reject) { |
12 | var i = counter++; | |
13 | queue.push(i); | |
14 | ||
15 | orgRequire(dependencies, function () { | |
75862143 TD |
16 | var args = arguments; |
17 | ||
bb8e158a | 18 | queue[queue.indexOf(i)] = function() { resolve(args); }; |
75862143 TD |
19 | |
20 | executeCallbacks(); | |
bb8e158a TD |
21 | }, function (err) { |
22 | queue[queue.indexOf(i)] = function() { reject(err); }; | |
75862143 TD |
23 | |
24 | executeCallbacks(); | |
25 | }); | |
bb8e158a TD |
26 | }); |
27 | ||
28 | if (callback) { | |
29 | promise.then(function (objects) { | |
30 | callback.apply(window, objects); | |
75862143 TD |
31 | }); |
32 | } | |
bb8e158a TD |
33 | if (errBack) { |
34 | promise.catch(errBack); | |
35 | } | |
36 | ||
37 | return promise; | |
0795d180 | 38 | }; |
45433290 | 39 | window.require.config = orgRequire.config; |
0795d180 AE |
40 | |
41 | function executeCallbacks() { | |
42 | while (queue.length) { | |
43 | if (typeof queue[0] !== 'function') { | |
44 | break; | |
45 | } | |
46 | ||
47 | queue.shift()(); | |
48 | } | |
f0115fd9 | 49 | } |
0795d180 | 50 | })(window); |