| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 | 
							- /* Amber package loading
 
-    usage example:
 
-    amber.load({
 
-    files: ['MyCategory1.js', 'MyCategory2.js'],
 
-    ready: function() {smalltalk.Browser._open()}
 
-    })
 
- */
 
- amber = (function() {
 
- 	var that = {};
 
- 	var scripts = document.getElementsByTagName("script");
 
- 	var src     = scripts[ scripts.length - 1 ].src;
 
- 	var home    = src.split("/").slice(0, -2).join("/") + "/";
 
- 	var debug;
 
- 	var deploy;
 
- 	var spec;
 
- 	var jsToLoad = [];
 
- 	var loadJS;
 
- 	var nocache = '';
 
- 	that.toggleIDE = function() {
 
- 		if ($('#amber').length == 0) {
 
- 			smalltalk.Browser._open();
 
- 		} else if ($('#amber').is(':visible')) {
 
- 			smalltalk.TabManager._current()._close();
 
- 		} else {
 
- 			smalltalk.TabManager._current()._open();
 
- 		}
 
- 		return false;
 
- 	};
 
- 	that.load = function(obj) {
 
- 		spec = obj || {};
 
- 		// In deployment mode, only the compressed version of Kernel
 
- 		// and Canvas are loaded
 
- 		deploy = spec.deploy || false;
 
- 		debug = spec.debug || false;
 
- 		// When debug is turned on, logs are written to the console,
 
- 		// and the user will be prompted before they leave the page.
 
- 		if (debug) {
 
- 			window.onbeforeunload = function(){ return 'You will loose all code that you have not committed'; }
 
- 		}
 
- 		// Allow loading default Amber files from a different location
 
- 		// e.g. http://amber-lang.net/amber/
 
- 		if (spec.home) home = spec.home;
 
- 		// Specify a version string to avoid wrong browser caching
 
- 		if (spec.version) {
 
- 			nocache = '?' + spec.version;
 
- 		}
 
- 		loadDependencies();
 
- 		addJSToLoad('js/lib/es5-shim-2.0.2/es5-shim.min.js');
 
- 		addJSToLoad('js/lib/es5-shim-2.0.2/es5-sham.min.js');
 
- 		addJSToLoad('js/boot.js');
 
- 		if (deploy) {
 
- 			loadPackages([
 
- 				'Kernel-Objects.deploy',
 
- 				'Kernel-Classes.deploy',
 
- 				'Kernel-Methods.deploy',
 
- 				'Kernel-Collections.deploy',
 
- 				'Kernel-Exceptions.deploy',
 
- 				'Kernel-Transcript.deploy',
 
- 				'Kernel-Announcements.deploy',
 
- 				'Canvas.deploy'
 
- 			]);
 
- 		} else {
 
- 			loadIDEDependencies();
 
- 			loadCSS('amber.css');
 
- 			loadPackages([
 
- 				'Kernel-Objects',
 
- 				'Kernel-Classes',
 
- 				'Kernel-Methods',
 
- 				'Kernel-Collections',
 
- 				'Kernel-Exceptions',
 
- 				'Kernel-Transcript',
 
- 				'Kernel-Announcements',
 
- 				'Canvas',
 
- 				'SUnit',
 
- 				'Importer-Exporter',
 
- 				'Compiler-Exceptions',
 
- 				'Compiler-Core',
 
- 				'Compiler-AST',
 
- 				'Compiler-Semantic',
 
- 				'Compiler-IR',
 
- 				'Compiler-Inlining',
 
- 				'Compiler-Interpreter',
 
- 				'Compiler-Tests',
 
- 				'parser',
 
- 				'IDE',
 
- 				'Examples',
 
- 				'Benchfib',
 
- 				'Kernel-Tests',
 
- 				'SUnit-Tests'
 
- 			]);
 
- 		}
 
- 		var additionalFiles = spec.packages || spec.files;
 
- 		var commitPathForInit = null;
 
- 		if (additionalFiles) {
 
- 			commitPathForInit = loadPackages(additionalFiles, spec.prefix, spec.packageHome);
 
- 		}
 
- 		// Be sure to setup & initialize smalltalk classes
 
- 		addJSToLoad('js/init.js');
 
- 		initializeSmalltalk(commitPathForInit);
 
- 	};
 
- 	function loadPackages(names, prefix, urlHome){
 
- 		var name;
 
- 		prefix = prefix || 'js';
 
- 		urlHome = urlHome || home;
 
- 		for (var i=0; i < names.length; i++) {
 
- 			name = names[i].split(/\.js$/)[0];
 
- 			addJSToLoad(name + '.js', prefix, urlHome);
 
- 		}
 
- 		return  {
 
- 			js: urlHome+prefix,
 
- 			st: urlHome+'st'
 
- 		};
 
- 	}
 
- 	function addJSToLoad(name, prefix, urlHome) {
 
- 		urlHome = urlHome || home;
 
- 		jsToLoad.push(buildJSURL(name, prefix, urlHome));
 
- 	}
 
- 	function resolve(base, path) {
 
- 		if (/(^|:)\/\//.test(path)) {
 
- 			// path: [http:]//foo.com/bar/; base: whatever/
 
- 			// -> http://foo.com/bar/
 
- 			return path;
 
- 		}
 
- 		if (!/^\//.test(path)) {
 
- 			// path: relative/; base: whatever/
 
- 			// -> whatever/relative/
 
- 			return base + path;
 
- 		}
 
- 		var match = base.match(/^(([^:/]*:|^)\/\/[^/]*)/);
 
- 		if (match) {
 
- 			// path: /absolute/; base: [http:]//foo.com/whatever/
 
- 			// -> [http:]//foo.com/absolute/
 
- 			return match[1] + path;
 
- 		}
 
- 		// path: /absolute/; base: whatever/path/
 
- 		// -> /absolute/
 
- 		return path;
 
- 	}
 
- 	function buildJSURL(name, prefix, urlHome) {
 
- 		prefix = prefix || '';
 
- 		urlHome = urlHome || home;
 
- 		var parts = name.match(/^(.*\/)([^/]*)$/);
 
- 		if (parts) {
 
- 			name = parts[2];
 
- 			urlHome = resolve(urlHome, parts[1]);
 
- 		}
 
- 		if (!deploy) {
 
- 			name = name + nocache;
 
- 		}
 
- 		return urlHome + prefix + '/' + name;
 
- 	}
 
- 	function loadCSS(name, prefix) {
 
- 		prefix = prefix || 'css';
 
- 		if (!deploy) {
 
- 			name = name + nocache;
 
- 		}
 
- 		var url = home + prefix + '/' + name;
 
- 		var link = document.createElement("link");
 
- 		link.setAttribute("rel", "stylesheet");
 
- 		link.setAttribute("type", "text/css");
 
- 		link.setAttribute("href", url);
 
- 		document.getElementsByTagName("head")[0].appendChild(link);
 
- 	}
 
- 	function loadDependencies() {
 
- 		if (typeof jQuery == 'undefined') {
 
- 			writeScriptTag(buildJSURL('js/lib/jQuery/jquery-1.8.2.min.js'));
 
- 		}
 
- 		if ((typeof jQuery == 'undefined') || (typeof jQuery.ui == 'undefined')) {      
 
- 			writeScriptTag(buildJSURL('js/lib/jQuery/jquery-ui-1.8.16.custom.min.js'));
 
- 		}
 
- 	}
 
- 	function loadIDEDependencies() {
 
- 		addJSToLoad('js/lib/jQuery/jquery.textarea.js');
 
- 		addJSToLoad('js/lib/CodeMirror/codemirror.js');
 
- 		addJSToLoad('js/lib/CodeMirror/smalltalk.js');
 
- 		loadCSS('lib/CodeMirror/codemirror.css', 'js');
 
- 		loadCSS('lib/CodeMirror/amber.css', 'js');
 
- 	}
 
- 	// This will be called after JS files have been loaded
 
- 	function initializeSmalltalk(commitPath) {
 
- 		window.smalltalkReady = function() {
 
- 			if (commitPath) {
 
- 				smalltalk['@@commitPath'] = commitPath;
 
- 				smalltalk.Package._commitPathsFromLoader();
 
- 			}
 
- 			if (spec.ready) {
 
- 				spec.ready();
 
- 			}
 
- 			evaluateSmalltalkScripts();
 
- 		};
 
- 		loadAllJS();
 
- 	}
 
- 	/*
 
- 	 * When loaded using AJAX, scripts order not guaranteed.
 
- 	 * Load JS in the order they have been added using addJSToLoad().
 
- 	 * If loaded, will use jQuery's getScript instead of adding a script element
 
- 	 */
 
- 	function loadAllJS() {
 
- 		loadJS = loadJSViaScriptTag;
 
- 		if (typeof jQuery != 'undefined') {
 
- 			loadJS = loadJSViaJQuery;
 
- 		}
 
- 		loadNextJS();
 
- 	}
 
- 	function loadNextJS() {
 
- 		loadJS(jsToLoad[0], function(){
 
- 			jsToLoad.shift();
 
- 			if (jsToLoad.length > 0) {
 
- 				loadNextJS();
 
- 			}
 
- 		});
 
- 	}
 
- 	function loadJSViaScriptTag(url, callback) {
 
- 		writeScriptTag(url);
 
- 		callback();
 
- 	}
 
- 	function loadJSViaJQuery(url, callback) {
 
- 		$.ajax({
 
- 			dataType: "script",
 
- 			url: url,
 
- 			cache: deploy,
 
- 			success: callback
 
- 		});
 
- 	}
 
- 	function writeScriptTag(src) {
 
- 		var scriptString = '<script src="' + src + '" type="text/javascript"></script>';
 
- 		document.write(scriptString);
 
- 	}
 
- 	function evaluateSmalltalkScripts() {
 
- 		jQuery(document).ready(function() {
 
- 			jQuery('script[type="text/smalltalk"]').each(function(i, elt) {
 
- 				smalltalk.Compiler._new()._evaluateExpression_(jQuery(elt).html());
 
- 			});
 
- 		})
 
- 	}
 
- 	var localPackages;
 
- 	function populateLocalPackages(){
 
- 		var localStorageRE = /^smalltalk\.packages\.(.*)$/;
 
- 		localPackages = {};
 
- 		var match, key;
 
- 		for(var i=0; i < localStorage.length; i++) {
 
- 			key = localStorage.key(i);
 
- 			if (match = key.match(localStorageRE)) {
 
- 				localPackages[match[1]] = localStorage[key];
 
- 			}
 
- 		}
 
- 		return localPackages;
 
- 	}
 
- 	function clearLocalPackages() {
 
- 		for (var name in localPackages) {
 
- 			log('Removing ' + name + ' from local storage');
 
- 			localStorage.removeItem('smalltalk.packages.' + name);
 
- 		}
 
- 	}
 
- 	function log(string) {
 
- 		if (debug) {
 
- 			console.log(string);
 
- 		}
 
- 	}
 
- 	return that;
 
- })();
 
- window.loadAmber = amber.load;
 
- window.toggleAmberIDE = amber.toggleIDE;
 
 
  |