Sfoglia il codice sorgente

Merge branch 'master' of github.com:amber-smalltalk/amber

Nicolas Petton 10 anni fa
parent
commit
b3b87bafe0

+ 4 - 4
cli/src/AmberCli.js

@@ -1351,7 +1351,7 @@ protocol: 'private',
 fn: function (buffer,aBlock){
 var self=this;
 function $Error(){return globals.Error||(typeof Error=="undefined"?nil:Error)}
-function $ErrorHandler(){return globals.ErrorHandler||(typeof ErrorHandler=="undefined"?nil:ErrorHandler)}
+function $ConsoleErrorHandler(){return globals.ConsoleErrorHandler||(typeof ConsoleErrorHandler=="undefined"?nil:ConsoleErrorHandler)}
 return smalltalk.withContext(function($ctx1) { 
 var $3,$4,$2,$1;
 $1=self._parseAssignment_do_(buffer,(function(name,expr){
@@ -1379,7 +1379,7 @@ value=self._eval_on_($2,self["@session"]);
 return value;
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)})}))._on_do_($Error(),(function(e){
 return smalltalk.withContext(function($ctx3) {
-_st(_st($ErrorHandler())._new())._logError_(e);
+_st(_st($ConsoleErrorHandler())._new())._logError_(e);
 value=nil;
 return value;
 }, function($ctx3) {$ctx3.fillBlock({e:e},$ctx2,5)})}));
@@ -1388,9 +1388,9 @@ return _st(aBlock)._value_value_(varName,value);
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"assignNewVariable:do:",{buffer:buffer,aBlock:aBlock},globals.Repl)})},
 args: ["buffer", "aBlock"],
-source: "assignNewVariable: buffer do: aBlock\x0a\x09\x22Assigns a new variable and calls the given block with the variable's name and value\x0a\x09 if buffer contains an assignment expression. If it doesn't the block is called with nil for\x0a\x09 both arguments.\x22\x0a\x09^ self parseAssignment: buffer do: [ :name :expr || varName value |\x0a\x09\x09varName := name ifNil: [self nextResultName].\x0a\x09\x09session := self addVariableNamed: varName to: session.\x0a\x09\x09[ value := self eval: varName, ' := ', (expr ifNil: [buffer]) on: session ]\x0a\x09\x09\x09on: Error\x0a\x09\x09\x09do: [ :e | ErrorHandler new logError: e. value := nil].\x0a\x09\x09aBlock value: varName value: value]",
+source: "assignNewVariable: buffer do: aBlock\x0a\x09\x22Assigns a new variable and calls the given block with the variable's name and value\x0a\x09 if buffer contains an assignment expression. If it doesn't the block is called with nil for\x0a\x09 both arguments.\x22\x0a\x09^ self parseAssignment: buffer do: [ :name :expr || varName value |\x0a\x09\x09varName := name ifNil: [self nextResultName].\x0a\x09\x09session := self addVariableNamed: varName to: session.\x0a\x09\x09[ value := self eval: varName, ' := ', (expr ifNil: [buffer]) on: session ]\x0a\x09\x09\x09on: Error\x0a\x09\x09\x09do: [ :e | ConsoleErrorHandler new logError: e. value := nil].\x0a\x09\x09aBlock value: varName value: value]",
 messageSends: ["parseAssignment:do:", "ifNil:", "nextResultName", "addVariableNamed:to:", "on:do:", "eval:on:", ",", "logError:", "new", "value:value:"],
-referencedClasses: ["Error", "ErrorHandler"]
+referencedClasses: ["Error", "ConsoleErrorHandler"]
 }),
 globals.Repl);
 

+ 1 - 1
cli/src/AmberCli.st

@@ -1031,7 +1031,7 @@ assignNewVariable: buffer do: aBlock
 		session := self addVariableNamed: varName to: session.
 		[ value := self eval: varName, ' := ', (expr ifNil: [buffer]) on: session ]
 			on: Error
-			do: [ :e | ErrorHandler new logError: e. value := nil].
+			do: [ :e | ConsoleErrorHandler new logError: e. value := nil].
 		aBlock value: varName value: value]
 !
 

File diff suppressed because it is too large
+ 707 - 63
cli/support/amber-cli.js


+ 1 - 1
cli/support/amberc.js

@@ -293,7 +293,7 @@ function resolve_kernel(configuration) {
  * Returns a Promise object which resolves into the configuration object.
  */
 function create_compiler(configuration) {
-	var compiler_files = configuration.compiler_libraries.concat(configuration.load);
+	var compiler_files = configuration.compiler_libraries;
 	return Promise.all(
 		compiler_files.map(function(file) {
 			return resolve_js(file, configuration);

+ 4 - 4
src/IDE.js

@@ -453,7 +453,7 @@ fn: function (anError){
 var self=this;
 function $Debugger(){return globals.Debugger||(typeof Debugger=="undefined"?nil:Debugger)}
 function $Error(){return globals.Error||(typeof Error=="undefined"?nil:Error)}
-function $ErrorHandler(){return globals.ErrorHandler||(typeof ErrorHandler=="undefined"?nil:ErrorHandler)}
+function $ConsoleErrorHandler(){return globals.ConsoleErrorHandler||(typeof ConsoleErrorHandler=="undefined"?nil:ConsoleErrorHandler)}
 return smalltalk.withContext(function($ctx1) { 
 var $1,$2;
 _st((function(){
@@ -465,13 +465,13 @@ $2=_st($1)._open();
 return $2;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}))._on_do_($Error(),(function(error){
 return smalltalk.withContext(function($ctx2) {
-return _st(_st($ErrorHandler())._new())._handleError_(error);
+return _st(_st($ConsoleErrorHandler())._new())._handleError_(error);
 }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)})}));
 return self}, function($ctx1) {$ctx1.fill(self,"handleError:",{anError:anError},globals.DebugErrorHandler)})},
 args: ["anError"],
-source: "handleError: anError\x0a\x09[ Debugger new\x0a\x09\x09error: anError;\x0a\x09\x09open ] on: Error do: [ :error |\x0a\x09\x09\x09ErrorHandler new handleError: error ]",
+source: "handleError: anError\x0a\x09[ Debugger new\x0a\x09\x09error: anError;\x0a\x09\x09open ] on: Error do: [ :error |\x0a\x09\x09\x09ConsoleErrorHandler new handleError: error ]",
 messageSends: ["on:do:", "error:", "new", "open", "handleError:"],
-referencedClasses: ["Debugger", "Error", "ErrorHandler"]
+referencedClasses: ["Debugger", "Error", "ConsoleErrorHandler"]
 }),
 globals.DebugErrorHandler);
 

+ 1 - 1
src/IDE.st

@@ -159,7 +159,7 @@ handleError: anError
 	[ Debugger new
 		error: anError;
 		open ] on: Error do: [ :error |
-			ErrorHandler new handleError: error ]
+			ConsoleErrorHandler new handleError: error ]
 ! !
 
 !DebugErrorHandler class methodsFor: 'initialization'!

+ 30 - 34
support/amber.js

@@ -16,25 +16,43 @@
 var require;
 
 require = function (require) {
-    // To be able to use its path and attrubutes
-    // to map other parts of Amber, this code must find its <script> tag.
-    // It first looks for id 'amber-path-mapper'.
-    // When loading amber.js asynchronously, you must include this id,
-    // or the code can not reliably find its <script>.
-    var me = document.getElementById("amber-path-mapper");
-    if (!me || me.tagName.toLowerCase() !== "script") {
-        // If <script> with 'amber-path-mapper' id is not present,
-        // (this id is not necessary for inline <script> tag in HTML),
+    function uniquelyMapped(symbolicPath) {
+        if (require && typeof define !== "undefined" && define.amd) {
+            var mappedPath = require.toUrl(symbolicPath),
+                basePath = require.toUrl('') + symbolicPath;
+            if (resolveViaDOM(mappedPath) !== resolveViaDOM(basePath)) {
+                return mappedPath;
+            }
+        }
+    }
+    function myTag() {
+        // To be able to use its path and attributes
+        // to map other parts of Amber, this code must find its path.
+        // It first looks if require is already present && 'amber' path mapped.
+        // It not, it looks for id 'amber-path-mapper'.
+        // When loading amber.js asynchronously, you must include this id,
+        // or the code can not reliably find its <script>.
+        // If neither 'amber' mapping, nor script#amber-path-mapper is present,
+        // (the id is not necessary for inline <script> tag in HTML),
         // it uses the "find the last <script> tag present in the moment" method.
+        var result = uniquelyMapped('amber/amber');
+        if (result) {
+            return {src: result, hasAttribute: function () { return false; }};
+        }
+        var me = document.getElementById("amber-path-mapper");
+        if (me && me.tagName.toLowerCase() === "script") {
+            return me;
+        }
         var scripts = document.getElementsByTagName("script");
-        me = scripts[scripts.length - 1];
+        return scripts[scripts.length - 1];
     }
+    var me = myTag();
     var src = me.src;
     // strip the last two elements from the URL
     // e.g. http://app.com/amber/support/amber.js -> http://app.com/amber
     var amber_home = resolveViaDOM(src).replace(/\/[^\/]+\/[^\/]+$/, "");
     // In case of nonstandard deployment, you can specify libraries placement directly ...
-    var library_home = me.hasAttribute('data-libs') && me.getAttribute('data-libs');
+    var library_home = uniquelyMapped('amber_lib') || me.hasAttribute('data-libs') && me.getAttribute('data-libs');
 
     // ... otherwise, this heuristics is used:
     if (!library_home) {
@@ -64,8 +82,7 @@ require = function (require) {
             'amber_lib': library_home,
             'amber_core': amber_home + '/src',
             'amber_helios/html': amber_home,
-            'jquery': library_home + '/jquery/jquery.min',
-            'jquery-ui': library_home + '/jquery-ui/ui/minified/jquery-ui.min'
+            'jquery': library_home + '/jquery/jquery.min'
         },
         map: {
             '*': {
@@ -73,27 +90,6 @@ require = function (require) {
             }
         },
         shim: {
-            'jquery-ui': {
-                deps: [ 'jquery' ]
-            },
-            'amber_lib/bootstrap/js/bootstrap': {
-                deps: [ 'jquery', 'css!amber_lib/bootstrap/css/bootstrap' ]
-            },
-            'amber_lib/codemirror/lib/codemirror': {
-                deps: [ 'css!amber_lib/codemirror/lib/codemirror' ]
-            },
-            'amber_lib/jquery-tabby/jquery.textarea': {
-                deps: [ 'jquery' ]
-            },
-            'amber_core/IDE': {
-                deps: [ 'amber_lib/codemirror/mode/smalltalk/smalltalk' ]
-            },
-            'amber_lib/codemirror/mode/smalltalk/smalltalk': {
-                deps: [ '../../lib/codemirror' ]
-            },
-            'amber_lib/codemirror/addon/hint/show-hint': {
-                deps: [ '../../lib/codemirror' ]
-            },
             'ensure-console': {
                 exports: 'console'
             }

+ 12 - 0
support/codemirror-inner.js

@@ -0,0 +1,12 @@
+// Loading this in nested file so that require.config
+// with shim dependencies is in effect.
+// See http://stackoverflow.com/questions/21647956/how-to-config-requirejs-shim-dependencies-just-in-time/
+
+define([
+    'amber_lib/codemirror/lib/codemirror',
+    'amber_lib/codemirror/mode/smalltalk/smalltalk',
+    'amber_lib/codemirror/addon/hint/show-hint',
+    'css!amber_lib/codemirror/theme/ambiance',
+    'css!amber_lib/codemirror/lib/codemirror',
+    'css!amber_lib/codemirror/addon/hint/show-hint'
+]);

+ 15 - 8
support/codemirror.js

@@ -1,8 +1,15 @@
-define([
-		'amber_lib/codemirror/lib/codemirror',
-		'amber_lib/codemirror/mode/smalltalk/smalltalk',
-		'amber_lib/codemirror/addon/hint/show-hint',
-		'css!amber_lib/codemirror/theme/ambiance',
-		'css!amber_lib/codemirror/lib/codemirror',
-		'css!amber_lib/codemirror/addon/hint/show-hint'
-]);
+require.config({
+	shim: {
+		'amber_lib/codemirror/lib/codemirror': {
+			deps: [ 'css!amber_lib/codemirror/lib/codemirror' ]
+		},
+		'amber_lib/codemirror/mode/smalltalk/smalltalk': {
+			deps: [ '../../lib/codemirror' ]
+		},
+		'amber_lib/codemirror/addon/hint/show-hint': {
+			deps: [ '../../lib/codemirror' ]
+		}
+	}
+});
+
+define(['./codemirror-inner']);

+ 11 - 0
support/devel-inner.js

@@ -0,0 +1,11 @@
+// Loading this in nested file so that require.config
+// with shim dependencies is in effect.
+// See http://stackoverflow.com/questions/21647956/how-to-config-requirejs-shim-dependencies-just-in-time/
+
+define([
+	'jquery-ui',
+    'amber_lib/jquery-tabby/jquery.textarea',
+    'amber_core/IDE',
+    'amber_core/Examples',
+    'amber_core/Benchfib'
+]);

+ 16 - 6
support/devel.js

@@ -1,12 +1,22 @@
+require.config({
+	paths: {
+		'jquery-ui': require.toUrl('amber_lib/jquery-ui/ui/minified/jquery-ui.min')
+	},
+	shim: {
+		'jquery-ui': {
+			deps: [ 'jquery' ]
+		},
+		'amber_lib/jquery-tabby/jquery.textarea': {
+			deps: [ 'jquery' ]
+		}
+	}
+});
+
 define([
 	'./helpers', // pre-fetch, dep of ./deploy
 	'./deploy', // pre-fetch, dep of ./lang
 	'./lang',
-	'jquery-ui',
-	'amber_lib/jquery-tabby/jquery.textarea',
 	'./codemirror',
-	'css!amber_css/amber',
-	'amber_core/IDE',
-	'amber_core/Examples',
-	'amber_core/Benchfib'
+	'./devel-inner',
+	'css!amber_css/amber'
 ], function (smalltalk) { return smalltalk; });

+ 27 - 0
support/helios-inner.js

@@ -0,0 +1,27 @@
+// Loading this in nested file so that require.config
+// with shim dependencies is in effect.
+// See http://stackoverflow.com/questions/21647956/how-to-config-requirejs-shim-dependencies-just-in-time/
+
+define([
+	'./devel-inner',
+	'amber_lib/bootstrap/js/bootstrap',
+	'amber_lib/showdown/compressed/showdown',
+	'amber_core/Spaces',
+	'amber_core/Helios-Core',
+	'amber_core/Helios-Exceptions',
+	'amber_core/Helios-Helpers',
+	'amber_core/Helios-Commands-Core',
+	'amber_core/Helios-Commands-Tools',
+	'amber_core/Helios-Commands-Browser',
+	'amber_core/Helios-Layout',
+	'amber_core/Helios-KeyBindings',
+	'amber_core/Helios-Browser',
+	'amber_core/Helios-Workspace',
+	'amber_core/Helios-Transcript',
+	'amber_core/Helios-SUnit',
+	'amber_core/Helios-Debugger',
+	'amber_core/Helios-Inspector',
+	'amber_core/Helios-References',
+	'amber_core/Helios-Announcements',
+	'amber_core/Helios-Workspace-Tests'
+]);

+ 20 - 26
support/helios.js

@@ -1,32 +1,26 @@
+require.config({
+	paths: {
+		'jquery-ui': require.toUrl('amber_lib/jquery-ui/ui/minified/jquery-ui.min')
+	},
+	shim: {
+		'jquery-ui': {
+			deps: [ 'jquery' ]
+		},
+		'amber_lib/bootstrap/js/bootstrap': {
+			deps: [ 'jquery', 'css!amber_lib/bootstrap/css/bootstrap' ]
+		},
+		'amber_lib/jquery-tabby/jquery.textarea': {
+			deps: [ 'jquery' ]
+		}
+	}
+});
+
 define([
 	'./helpers', // pre-fetch, dep of ./deploy
 	'./deploy', // pre-fetch, dep of ./lang
 	'./lang',
-	'jquery-ui',
-	'amber_lib/jquery-tabby/jquery.textarea',
-	'amber_lib/bootstrap/js/bootstrap',
-	'amber_lib/showdown/compressed/showdown',
 	'./codemirror',
-	'css!amber_css/helios',
-	'amber_core/IDE',
-	'amber_core/Examples',
-	'amber_core/Benchfib',
-	'amber_core/Spaces',
-	'amber_core/Helios-Core',
-	'amber_core/Helios-Exceptions',
-	'amber_core/Helios-Helpers',
-	'amber_core/Helios-Commands-Core',
-	'amber_core/Helios-Commands-Tools',
-	'amber_core/Helios-Commands-Browser',
-	'amber_core/Helios-Layout',
-	'amber_core/Helios-KeyBindings',
-	'amber_core/Helios-Browser',
-	'amber_core/Helios-Workspace',
-	'amber_core/Helios-Transcript',
-	'amber_core/Helios-SUnit',
-	'amber_core/Helios-Debugger',
-	'amber_core/Helios-Inspector',
-	'amber_core/Helios-References',
-	'amber_core/Helios-Announcements',
-	'amber_core/Helios-Workspace-Tests'
+	'./devel-inner', // pre-fetch, dep of ./helios-inner
+	'./helios-inner',
+	'css!amber_css/helios'
 ], function (smalltalk) { return smalltalk; });

+ 18 - 14
support/helpers.js

@@ -1,10 +1,6 @@
 define("amber/helpers", ["amber_vm/smalltalk", "amber_vm/globals", "require"], function (vm, globals, require) {
     var exports = Object.create(globals);
 
-    var storage = (function (global) {
-        return 'localStorage' in global && global.localStorage;
-    })(new Function('return this')());
-
     // API
 
     exports.popupHelios = function () {
@@ -18,14 +14,18 @@ define("amber/helpers", ["amber_vm/smalltalk", "amber_vm/globals", "require"], f
         value: globals,
         enumerable: true, configurable: true, writable: false
     });
-    exports.initialize = function (options) {
+
+    function mixinToSettings(source) {
         var settings = globals.SmalltalkSettings;
-        function mixinToSettings(source) {
-            Object.keys(source).forEach(function (key) {
-                settings[key] = source[key];
-            });
-        }
-        settings['transport.defaultAmdNamespace'] = vm.defaultAmdNamespace;
+        Object.keys(source).forEach(function (key) {
+            settings[key] = source[key];
+        });
+    }
+
+    function settingsInLocalStorage() {
+        var global = new Function('return this')(),
+            storage = 'localStorage' in global && global.localStorage;
+
         if (storage) {
             var fromStorage;
             try {
@@ -37,18 +37,22 @@ define("amber/helpers", ["amber_vm/smalltalk", "amber_vm/globals", "require"], f
             if (typeof window !== "undefined") {
                 requirejs(['jquery'], function ($) {
                     $(window).on('beforeunload', function () {
-                       storage.setItem('amber.SmalltalkSettings', JSON.stringify(globals.SmalltalkSettings));
+                        storage.setItem('amber.SmalltalkSettings', JSON.stringify(globals.SmalltalkSettings));
                     });
                 });
             }
         }
+    }
+
+    exports.initialize = function (options) {
+        globals.SmalltalkSettings['transport.defaultAmdNamespace'] = vm.defaultAmdNamespace;
+        settingsInLocalStorage();
         if (exports.defaultAmdNamespace) {
             console.warn("`smalltalk.defaultAmdNamespace = 'namespace';` is deprecated. Please use `smalltalk.initialize({'transport.defaultAmdNamespace': 'namespace'});` instead.");
-            settings['transport.defaultAmdNamespace'] = settings['transport.defaultAmdNamespace'] || exports.defaultAmdNamespace;
+            globals.SmalltalkSettings['transport.defaultAmdNamespace'] = globals.SmalltalkSettings['transport.defaultAmdNamespace'] || exports.defaultAmdNamespace;
         }
         mixinToSettings(options || {});
         console.warn("smalltalk.ClassName is deprecated. Please use smalltalk.globals.ClassName instead.");
-        globals.SmalltalkSettings = settings;
         return vm.initialize();
     };
 

Some files were not shown because too many files changed in this diff