1
0
فهرست منبع

Amber can now be loaded through Ajax

Laurent Laffont 13 سال پیش
والد
کامیت
67c745fca7
1فایلهای تغییر یافته به همراه35 افزوده شده و 7 حذف شده
  1. 35 7
      js/amber.js

+ 35 - 7
js/amber.js

@@ -21,6 +21,7 @@ amber = (function() {
 	var localStorageSource = [];
 	var localPackages;
 	var spec;
+	var jsToLoad = [];
 
 	that.load = function(obj) {
 		spec = obj || {};
@@ -110,6 +111,10 @@ amber = (function() {
 	};
 
 	function loadJS(name, prefix) {
+		jsToLoad.push(buildJSURL(name, prefix));
+	};
+
+	function buildJSURL(name, prefix) {
 		var prefix = prefix || 'js';
 		var name = name;
 
@@ -117,9 +122,7 @@ amber = (function() {
 			name = name + nocache;
 		}
 
-		var url = home + prefix + '/' + name;
-		var scriptString = '<script src="' + url + '" type="text/javascript"></script>';
-		document.write(scriptString);
+		return home + prefix + '/' + name;
 	};
 
 	function loadCSS(name, prefix) {
@@ -138,13 +141,18 @@ amber = (function() {
 		document.getElementsByTagName("head")[0].appendChild(link);
 	};
 
+	function addScriptTag(src) {
+		var scriptString = '<script src="' + src + '" type="text/javascript"></script>';
+		document.write(scriptString);
+	}
+
   function loadDependencies() {
 		if (typeof jQuery == 'undefined') {
-			loadJS('lib/jQuery/jquery-1.6.4.min.js');
+			addScriptTag(buildJSURL('lib/jQuery/jquery-1.6.4.min.js'));
 		}
 
 		if ((typeof jQuery == 'undefined') || (typeof jQuery.ui == 'undefined')) {      
-			loadJS('lib/jQuery/jquery-ui-1.8.16.custom.min.js');
+			addScriptTag(buildJSURL('lib/jQuery/jquery-ui-1.8.16.custom.min.js'));
 		}
   };
 
@@ -158,9 +166,7 @@ amber = (function() {
 
 	// This will be called after JS files have been loaded
 	function initializeSmalltalk() {
-
 		window.smalltalkReady = function() {
-
 			for (var i=0; i < localStorageSource.length; i++) {
 				eval(localStorageSource[i]);
 			}
@@ -173,8 +179,30 @@ amber = (function() {
 				spec.ready();
 			}
 		}
+
+		if (typeof jQuery == 'undefined') {
+			for(var i in jsToLoad)
+				addScriptTag(jsToLoad[i]);
+		} else {
+			getScript(jsToLoad[0]); 
+		}
 	};
 
+	/* 
+	 * When loaded using AJAX, scripts order not guaranteed.
+	 * Load JS in the order they have been added
+	 * using loadJS.
+	 */
+	function getScript(url) {
+		$.getScript(url, 
+								function(){
+									jsToLoad.shift();
+									if (jsToLoad.length > 0)
+										getScript(jsToLoad[0]);
+								});
+	}
+	
+
 	function populateLocalPackages(){
 		var localStorageRE = /^smalltalk\.packages\.(.*)$/;
 		localPackages = {};