Merge pull request #797 from podgorskiy/master Fixed components order.
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
diff --git a/download.js b/download.js
index 1a1da40..a8c9e97 100644
--- a/download.js
+++ b/download.js
@@ -374,6 +374,35 @@ function delayedGenerateCode(){
timerId = setTimeout(generateCode, 500);
}
+function getSortedComponentsByRequirements(components){
+ var sorted = [];
+ for (var component in components) {
+ sorted.push(component);
+ }
+ var i = 0;
+ while (i < sorted.length) {
+ var id = sorted[i];
+ var indexOfRequirement = i;
+ var notNow = false;
+ for (var requirement in components[id].require) {
+ indexOfRequirement = sorted.indexOf(components[id].require[requirement]);
+ if (indexOfRequirement > i) {
+ notNow = true;
+ break;
+ }
+ }
+ if (notNow) {
+ tmp = sorted[i];
+ sorted[i] = sorted[indexOfRequirement];
+ sorted[indexOfRequirement] = tmp;
+ }
+ else {
+ i++;
+ }
+ }
+ return sorted;
+}
+
function generateCode(){
var promises = [];
var redownload = {};
@@ -381,7 +410,12 @@ function generateCode(){
for (var category in components) {
var all = components[category];
- for (var id in all) {
+ // In case if one component requires other, required component should go first.
+ var sorted = getSortedComponentsByRequirements(all);
+
+ for (var i = 0; i < sorted.length; i++) {
+ var id = sorted[i];
+
if(id === 'meta') {
continue;
}