|  | @@ -1,348 +0,0 @@
 | 
	
		
			
				|  |  | -/* 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    = resolveViaDOM(src).replace(/[^\/]+\/[^\/]+$/, "");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	var debug;
 | 
	
		
			
				|  |  | -	var deploy;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	var spec;
 | 
	
		
			
				|  |  | -	var jsToLoad = [];
 | 
	
		
			
				|  |  | -	var loadJS;
 | 
	
		
			
				|  |  | -	var nocache = '';
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	function resolveViaDOM(url) {
 | 
	
		
			
				|  |  | -		var a = document.createElement("a");
 | 
	
		
			
				|  |  | -		a.href = url;
 | 
	
		
			
				|  |  | -		return a.href;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	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;
 | 
	
		
			
				|  |  | -		if (additionalFiles) {
 | 
	
		
			
				|  |  | -			that.commitPath = loadPackages(additionalFiles, spec.prefix, spec.packageHome);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// Be sure to setup & initialize smalltalk classes
 | 
	
		
			
				|  |  | -		addJSToLoad('js/init.js');
 | 
	
		
			
				|  |  | -		initializeSmalltalk();
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	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 + (prefix.match(/\/js$/) ? prefix.replace(/\/js$/, "/st") : "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 ? 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') {
 | 
	
		
			
				|  |  | -			addJSToLoad('js/lib/jQuery/jquery-1.8.2.min.js');
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if ((typeof jQuery == 'undefined') || (typeof jQuery.ui == 'undefined')) {
 | 
	
		
			
				|  |  | -			addJSToLoad('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');
 | 
	
		
			
				|  |  | -		addJSToLoad('js/lib/CodeMirror/addon/hint/show-hint.js');
 | 
	
		
			
				|  |  | -		loadCSS('lib/CodeMirror/codemirror.css', 'js');
 | 
	
		
			
				|  |  | -		loadCSS('lib/CodeMirror/theme/ambiance.css', 'js');
 | 
	
		
			
				|  |  | -		loadCSS('lib/CodeMirror/addon/hint/show-hint.css', 'js');
 | 
	
		
			
				|  |  | -		loadCSS('lib/CodeMirror/amber.css', 'js');
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	// This will be called after JS files have been loaded
 | 
	
		
			
				|  |  | -	function initializeSmalltalk() {
 | 
	
		
			
				|  |  | -		that.smalltalkReady = function(smalltalk,nil,_st) {
 | 
	
		
			
				|  |  | -			if (spec.ready) {
 | 
	
		
			
				|  |  | -				spec.ready(smalltalk,nil,_st);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			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) {
 | 
	
		
			
				|  |  | -		// The order of loading is as specified, but order of execution may get wrong
 | 
	
		
			
				|  |  | -		// (observed when loading amber in testing environment using zombiejs).
 | 
	
		
			
				|  |  | -		// jQuery's getScript/get/ajax does not give any guarantee as to the order of execution.
 | 
	
		
			
				|  |  | -		// The callback is called after the file is fully load, but it may not have been executed.
 | 
	
		
			
				|  |  | -		// When given a small timeout between ending previous loading and start of next loading,
 | 
	
		
			
				|  |  | -		// it is very probable that the time window is used to actually start executing the script.
 | 
	
		
			
				|  |  | -		$.ajax({
 | 
	
		
			
				|  |  | -			dataType: "script",
 | 
	
		
			
				|  |  | -			url: url,
 | 
	
		
			
				|  |  | -			cache: deploy,
 | 
	
		
			
				|  |  | -			success: function () { setTimeout(callback, 5); }
 | 
	
		
			
				|  |  | -		});
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	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);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	that.loadHelios = function() {
 | 
	
		
			
				|  |  | -		loadCSS('helios_frame.css');
 | 
	
		
			
				|  |  | -		var frame = jQuery('<div id="helios"><iframe frameborder=0 src="' + home + 'helios.html"></iframe></div>');
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -		jQuery('body').append(frame);
 | 
	
		
			
				|  |  | -		jQuery(frame).resizable({
 | 
	
		
			
				|  |  | -			handles: 'n',
 | 
	
		
			
				|  |  | -			start: onResizeStart,
 | 
	
		
			
				|  |  | -			stop: onResizeStop,
 | 
	
		
			
				|  |  | -			resize: onResize
 | 
	
		
			
				|  |  | -		});
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -		function onResize() {
 | 
	
		
			
				|  |  | -			jQuery('#helios')
 | 
	
		
			
				|  |  | -				.css('top', '')
 | 
	
		
			
				|  |  | -				.css('width', '100%')
 | 
	
		
			
				|  |  | -				.css('bottom', '0px');
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -		function onResizeStart() {
 | 
	
		
			
				|  |  | -			jQuery('#helios').append('<div class="overlay"></div>');
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -		function onResizeStop() {
 | 
	
		
			
				|  |  | -			jQuery('#helios').find('.overlay').remove();
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	that.popupHelios = function() {
 | 
	
		
			
				|  |  | -		window.open(home + 'helios.html', "Helios", "menubar=no, status=no, scrollbars=no, menubar=no, width=1000, height=600");
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	return that;
 | 
	
		
			
				|  |  | -})();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -window.loadAmber  = amber.load;
 | 
	
		
			
				|  |  | -window.loadHelios = amber.loadHelios;
 | 
	
		
			
				|  |  | -window.popupHelios = amber.popupHelios;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Backward compatibility
 | 
	
		
			
				|  |  | -function toggleAmberIDE () {
 | 
	
		
			
				|  |  | -	return smalltalk.TabManager._toggleAmberIDE();
 | 
	
		
			
				|  |  | -}
 |