Commit 7a6aed85e4a8fc8da5fac41e50e609894ec0479a

Golmote 2015-10-07T07:37:32

Merge pull request #797 from podgorskiy/master Fixed components order.

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;
 			}