Parcourir la source

Merge pull request #830 from herby/smalltalkoptions

Using SmalltalkSettings object
Nicolas Petton il y a 11 ans
Parent
commit
ff660c4914
7 fichiers modifiés avec 47 ajouts et 17 suppressions
  1. 1 1
      cli/index.html
  2. 1 1
      helios.html
  3. 1 1
      index.html
  4. 10 8
      js/Kernel-Infrastructure.js
  5. 2 2
      st/Kernel-Infrastructure.st
  6. 1 0
      support/boot.js
  7. 31 4
      support/helpers.js

+ 1 - 1
cli/index.html

@@ -22,7 +22,7 @@
         ["amber/devel",
             "amber_cli/AmberCli" ],
         function (smalltalk) {
-            smalltalk.initialize({defaultAmdNamespace: 'amber_cli'});
+            smalltalk.initialize({'vm.defaultAmdNamespace': 'amber_cli'});
             smalltalk.globals.Browser._openOn_(smalltalk.AmberCli);
         }
     );

+ 1 - 1
helios.html

@@ -20,7 +20,7 @@
                           return 'Do you want to close Amber? All uncommitted changes will be lost.';
                       };
 
-                      smalltalk.initialize({defaultAmdNamespace: "amber_core"});
+                      smalltalk.initialize({'vm.defaultAmdNamespace': "amber_core"});
 					  smalltalk.globals.HLManager._setup();
                   }
           );

+ 1 - 1
index.html

@@ -14,7 +14,7 @@
     require(
         ["amber/devel"],
         function (smalltalk) {
-            smalltalk.initialize({defaultAmdNamespace: "amber_core"});
+            smalltalk.initialize({'vm.defaultAmdNamespace': "amber_core"});
 
             smalltalk.globals.Browser._open();
         }

+ 10 - 8
js/Kernel-Infrastructure.js

@@ -2543,15 +2543,16 @@ selector: "defaultAmdNamespace",
 protocol: 'accessing amd',
 fn: function (){
 var self=this;
+function $SmalltalkSettings(){return globals.SmalltalkSettings||(typeof SmalltalkSettings=="undefined"?nil:SmalltalkSettings)}
 return smalltalk.withContext(function($ctx1) { 
 var $1;
-$1=_st(self._vm())._defaultAmdNamespace();
+$1=_st($SmalltalkSettings())._at_("vm.defaultAmdNamespace");
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"defaultAmdNamespace",{},globals.SmalltalkImage)})},
 args: [],
-source: "defaultAmdNamespace\x0a\x09^ self vm defaultAmdNamespace",
-messageSends: ["defaultAmdNamespace", "vm"],
-referencedClasses: []
+source: "defaultAmdNamespace\x0a\x09^ SmalltalkSettings at: 'vm.defaultAmdNamespace'",
+messageSends: ["at:"],
+referencedClasses: ["SmalltalkSettings"]
 }),
 globals.SmalltalkImage);
 
@@ -2561,13 +2562,14 @@ selector: "defaultAmdNamespace:",
 protocol: 'accessing amd',
 fn: function (aString){
 var self=this;
+function $SmalltalkSettings(){return globals.SmalltalkSettings||(typeof SmalltalkSettings=="undefined"?nil:SmalltalkSettings)}
 return smalltalk.withContext(function($ctx1) { 
-_st(self._vm())._defaultAmdNamespace_(aString);
+_st($SmalltalkSettings())._at_put_("vm.defaultAmdNamespace",aString);
 return self}, function($ctx1) {$ctx1.fill(self,"defaultAmdNamespace:",{aString:aString},globals.SmalltalkImage)})},
 args: ["aString"],
-source: "defaultAmdNamespace: aString\x0a\x09self vm defaultAmdNamespace: aString",
-messageSends: ["defaultAmdNamespace:", "vm"],
-referencedClasses: []
+source: "defaultAmdNamespace: aString\x0a\x09SmalltalkSettings at: 'vm.defaultAmdNamespace' put: aString",
+messageSends: ["at:put:"],
+referencedClasses: ["SmalltalkSettings"]
 }),
 globals.SmalltalkImage);
 

+ 2 - 2
st/Kernel-Infrastructure.st

@@ -1003,11 +1003,11 @@ amdRequire
 !
 
 defaultAmdNamespace
-	^ self vm defaultAmdNamespace
+	^ SmalltalkSettings at: 'vm.defaultAmdNamespace'
 !
 
 defaultAmdNamespace: aString
-	self vm defaultAmdNamespace: aString
+	SmalltalkSettings at: 'vm.defaultAmdNamespace' put: aString
 ! !
 
 !SmalltalkImage methodsFor: 'classes'!

+ 1 - 0
support/boot.js

@@ -93,6 +93,7 @@ define("amber_vm/boot", [ 'require', './browser-compatibility' ], function (requ
 	}
 
 	var globals = {};
+    globals.SmalltalkSettings = {};
 	var api = Object.create(globals);
 	var brikz = new Brikz(api);
 

+ 31 - 4
support/helpers.js

@@ -1,6 +1,10 @@
 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 () {
@@ -15,13 +19,36 @@ define("amber/helpers", ["amber_vm/smalltalk", "amber_vm/globals", "require"], f
         enumerable: true, configurable: true, writable: false
     });
     exports.initialize = function (options) {
-        options = options || {};
+        var settings = globals.SmalltalkSettings;
+        function mixinToSettings(source) {
+            Object.keys(source).forEach(function (key) {
+                settings[key] = source[key];
+            });
+        }
+        settings['vm.defaultAmdNamespace'] = vm.defaultAmdNamespace;
+        if (storage) {
+            var fromStorage;
+            try {
+                fromStorage = JSON.parse(storage.getItem('amber.SmalltalkSettings'));
+            } catch (ex) {
+                // pass
+            }
+            mixinToSettings(fromStorage || {});
+            if (typeof window !== "undefined") {
+                requirejs(['jquery'], function ($) {
+                    $(window).on('beforeunload', function () {
+                       storage.setItem('amber.SmalltalkSettings', JSON.stringify(globals.SmalltalkSettings));
+                    });
+                });
+            }
+        }
         if (exports.defaultAmdNamespace) {
-            console.warn("`smalltalk.defaultAmdNamespace = 'namespace';` is deprecated. Please use `smalltalk.initialize({defaultAmdNamespace: 'namespace'});` instead.");
-            options.defaultAmdNamespace = options.defaultAmdNamespace || exports.defaultAmdNamespace;
+            console.warn("`smalltalk.defaultAmdNamespace = 'namespace';` is deprecated. Please use `smalltalk.initialize({'vm.defaultAmdNamespace': 'namespace'});` instead.");
+            settings['vm.defaultAmdNamespace'] = settings['vm.defaultAmdNamespace'] || exports.defaultAmdNamespace;
         }
-        vm.defaultAmdNamespace = options.defaultAmdNamespace || vm.defaultAmdNamespace;
+        mixinToSettings(options);
         console.warn("smalltalk.ClassName is deprecated. Please  use smalltalk.globals.ClassName instead.");
+        globals.SmalltalkSettings = settings;
         return vm.initialize();
     };