Parcourir la source

Merge branch 'master' into 0.13-prereleases

Herbert Vojčík il y a 9 ans
Parent
commit
6a6e36dd83

+ 3 - 1
.travis.yml

@@ -1,7 +1,9 @@
 language: node_js
 node_js:
-#  - "0.8" # has npm problems
+  - "0.8"
   - "0.10"
+before_install:
+  - npm -g install npm@1.x.x
 install:
   - npm install -g grunt-cli
   - npm install

+ 9 - 1
API-CHANGES.txt

@@ -1,4 +1,11 @@
-0.12.5:
+0.13.0:
+
++ Object >>
+  + postMessageTo:
+  + postMessageTo:origin:
+
+
+0.12.6:
 
 + String >>
   + value:
@@ -13,6 +20,7 @@
 + amber/helpers exports
   + nil
 
+
 0.12.4:
 
 * Package Canvas renamed to Web

+ 1 - 1
external/amber-cli/package.json

@@ -40,7 +40,7 @@
     "grunt-init-amber": "~0.13.0",
     "grunt-init": "~0.3.1",
     "bower": "~1.3.2",
-    "amber-dev": "~0.1.2",
+    "amber-dev": "~0.1.6",
     "grunt-cli": "~0.1.13"
   }
 }

+ 41 - 7
external/amber-cli/src/AmberCli.js

@@ -333,11 +333,30 @@ protocol: 'action',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-_st(_st(require)._value_("amber-dev/lib/config"))._writeConfig_(_st(process)._cwd());
+self._writeConfigThenDo_((function(){
+return smalltalk.withContext(function($ctx2) {
+return _st(process)._exit();
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
 return self}, function($ctx1) {$ctx1.fill(self,"start",{},globals.Configurator)})},
 args: [],
-source: "start\x0a\x09(require value: 'amber-dev/lib/config')\x0a\x09\x09writeConfig: process cwd",
-messageSends: ["writeConfig:", "value:", "cwd"],
+source: "start\x0a\x09self writeConfigThenDo: [ process exit ]",
+messageSends: ["writeConfigThenDo:", "exit"],
+referencedClasses: []
+}),
+globals.Configurator);
+
+smalltalk.addMethod(
+smalltalk.method({
+selector: "writeConfigThenDo:",
+protocol: 'action',
+fn: function (aBlock){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+_st(_st(require)._value_("amber-dev/lib/config"))._writeConfig_toFile_thenDo_(_st(process)._cwd(),"config.js",aBlock);
+return self}, function($ctx1) {$ctx1.fill(self,"writeConfigThenDo:",{aBlock:aBlock},globals.Configurator)})},
+args: ["aBlock"],
+source: "writeConfigThenDo: aBlock\x0a\x09(require value: 'amber-dev/lib/config')\x0a\x09\x09writeConfig: process cwd\x0a\x09\x09toFile: 'config.js'\x0a\x09\x09thenDo: aBlock",
+messageSends: ["writeConfig:toFile:thenDo:", "value:", "cwd"],
 referencedClasses: []
 }),
 globals.Configurator);
@@ -1623,8 +1642,9 @@ selector: "start",
 protocol: 'action',
 fn: function (){
 var self=this;
+function $Configurator(){return globals.Configurator||(typeof Configurator=="undefined"?nil:Configurator)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5,$6,$7,$8,$receiver;
+var $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$receiver;
 self._gruntInitThenDo_((function(error){
 return smalltalk.withContext(function($ctx2) {
 if(($receiver = error) == null || $receiver.isNil){
@@ -1637,13 +1657,27 @@ if(($receiver = error3) == null || $receiver.isNil){
 return self._gruntThenDo_((function(error4){
 return smalltalk.withContext(function($ctx5) {
 if(($receiver = error4) == null || $receiver.isNil){
+return _st(_st($Configurator())._new())._writeConfigThenDo_((function(error5){
+return smalltalk.withContext(function($ctx6) {
+if(($receiver = error5) == null || $receiver.isNil){
 self._finishMessage();
 return _st(process)._exit();
 } else {
+$9=console;
+_st($9)._log_("amber config exec error:");
+$ctx6.sendIdx["log:"]=9;
+$10=_st($9)._log_(error5);
+$10;
+return _st(process)._exit();
+$ctx6.sendIdx["exit"]=5;
+};
+}, function($ctx6) {$ctx6.fillBlock({error5:error5},$ctx5,13)})}));
+} else {
 $7=console;
 _st($7)._log_("grunt exec error:");
 $ctx5.sendIdx["log:"]=7;
 $8=_st($7)._log_(error4);
+$ctx5.sendIdx["log:"]=8;
 $8;
 return _st(process)._exit();
 $ctx5.sendIdx["exit"]=4;
@@ -1684,9 +1718,9 @@ $ctx2.sendIdx["exit"]=1;
 }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,1)})}));
 return self}, function($ctx1) {$ctx1.fill(self,"start",{},globals.Initer)})},
 args: [],
-source: "start\x0a\x09self gruntInitThenDo: [ :error | error\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt-init exec error:'; log: error.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self bowerInstallThenDo: [ :error2 | error2\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'bower install exec error:'; log: error2.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self npmInstallThenDo: [ :error3 | error3\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'npm install exec error:'; log: error3.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self gruntThenDo: [ :error4 | error4\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt exec error:'; log: error4.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self finishMessage.\x0a\x09process exit ]]]]]]]]",
-messageSends: ["gruntInitThenDo:", "ifNotNil:ifNil:", "log:", "exit", "bowerInstallThenDo:", "npmInstallThenDo:", "gruntThenDo:", "finishMessage"],
-referencedClasses: []
+source: "start\x0a\x09self gruntInitThenDo: [ :error | error\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt-init exec error:'; log: error.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self bowerInstallThenDo: [ :error2 | error2\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'bower install exec error:'; log: error2.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self npmInstallThenDo: [ :error3 | error3\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'npm install exec error:'; log: error3.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self gruntThenDo: [ :error4 | error4\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt exec error:'; log: error4.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09Configurator new writeConfigThenDo: [ :error5 | error5\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'amber config exec error:'; log: error5.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self finishMessage.\x0a\x09process exit ]]]]]]]]]]",
+messageSends: ["gruntInitThenDo:", "ifNotNil:ifNil:", "log:", "exit", "bowerInstallThenDo:", "npmInstallThenDo:", "gruntThenDo:", "writeConfigThenDo:", "new", "finishMessage"],
+referencedClasses: ["Configurator"]
 }),
 globals.Initer);
 

+ 13 - 1
external/amber-cli/src/AmberCli.st

@@ -133,8 +133,14 @@ BaseFileManipulator subclass: #Configurator
 !Configurator methodsFor: 'action'!
 
 start
+	self writeConfigThenDo: [ process exit ]
+!
+
+writeConfigThenDo: aBlock
 	(require value: 'amber-dev/lib/config')
 		writeConfig: process cwd
+		toFile: 'config.js'
+		thenDo: aBlock
 ! !
 
 !Configurator methodsFor: 'initialization'!
@@ -1059,8 +1065,14 @@ start
 		process exit ]
 	ifNil: [
 
+	Configurator new writeConfigThenDo: [ :error5 | error5
+	ifNotNil: [
+		console log: 'amber config exec error:'; log: error5.
+		process exit ]
+	ifNil: [
+
 	self finishMessage.
-	process exit ]]]]]]]]
+	process exit ]]]]]]]]]]
 ! !
 
 !Initer methodsFor: 'initialization'!

+ 41 - 7
external/amber-cli/support/amber-cli.js

@@ -56783,11 +56783,30 @@ protocol: 'action',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-_st(_st(require)._value_("amber-dev/lib/config"))._writeConfig_(_st(process)._cwd());
+self._writeConfigThenDo_((function(){
+return smalltalk.withContext(function($ctx2) {
+return _st(process)._exit();
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
 return self}, function($ctx1) {$ctx1.fill(self,"start",{},globals.Configurator)})},
 args: [],
-source: "start\x0a\x09(require value: 'amber-dev/lib/config')\x0a\x09\x09writeConfig: process cwd",
-messageSends: ["writeConfig:", "value:", "cwd"],
+source: "start\x0a\x09self writeConfigThenDo: [ process exit ]",
+messageSends: ["writeConfigThenDo:", "exit"],
+referencedClasses: []
+}),
+globals.Configurator);
+
+smalltalk.addMethod(
+smalltalk.method({
+selector: "writeConfigThenDo:",
+protocol: 'action',
+fn: function (aBlock){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+_st(_st(require)._value_("amber-dev/lib/config"))._writeConfig_toFile_thenDo_(_st(process)._cwd(),"config.js",aBlock);
+return self}, function($ctx1) {$ctx1.fill(self,"writeConfigThenDo:",{aBlock:aBlock},globals.Configurator)})},
+args: ["aBlock"],
+source: "writeConfigThenDo: aBlock\x0a\x09(require value: 'amber-dev/lib/config')\x0a\x09\x09writeConfig: process cwd\x0a\x09\x09toFile: 'config.js'\x0a\x09\x09thenDo: aBlock",
+messageSends: ["writeConfig:toFile:thenDo:", "value:", "cwd"],
 referencedClasses: []
 }),
 globals.Configurator);
@@ -58073,8 +58092,9 @@ selector: "start",
 protocol: 'action',
 fn: function (){
 var self=this;
+function $Configurator(){return globals.Configurator||(typeof Configurator=="undefined"?nil:Configurator)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5,$6,$7,$8,$receiver;
+var $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$receiver;
 self._gruntInitThenDo_((function(error){
 return smalltalk.withContext(function($ctx2) {
 if(($receiver = error) == null || $receiver.isNil){
@@ -58087,13 +58107,27 @@ if(($receiver = error3) == null || $receiver.isNil){
 return self._gruntThenDo_((function(error4){
 return smalltalk.withContext(function($ctx5) {
 if(($receiver = error4) == null || $receiver.isNil){
+return _st(_st($Configurator())._new())._writeConfigThenDo_((function(error5){
+return smalltalk.withContext(function($ctx6) {
+if(($receiver = error5) == null || $receiver.isNil){
 self._finishMessage();
 return _st(process)._exit();
 } else {
+$9=console;
+_st($9)._log_("amber config exec error:");
+$ctx6.sendIdx["log:"]=9;
+$10=_st($9)._log_(error5);
+$10;
+return _st(process)._exit();
+$ctx6.sendIdx["exit"]=5;
+};
+}, function($ctx6) {$ctx6.fillBlock({error5:error5},$ctx5,13)})}));
+} else {
 $7=console;
 _st($7)._log_("grunt exec error:");
 $ctx5.sendIdx["log:"]=7;
 $8=_st($7)._log_(error4);
+$ctx5.sendIdx["log:"]=8;
 $8;
 return _st(process)._exit();
 $ctx5.sendIdx["exit"]=4;
@@ -58134,9 +58168,9 @@ $ctx2.sendIdx["exit"]=1;
 }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,1)})}));
 return self}, function($ctx1) {$ctx1.fill(self,"start",{},globals.Initer)})},
 args: [],
-source: "start\x0a\x09self gruntInitThenDo: [ :error | error\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt-init exec error:'; log: error.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self bowerInstallThenDo: [ :error2 | error2\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'bower install exec error:'; log: error2.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self npmInstallThenDo: [ :error3 | error3\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'npm install exec error:'; log: error3.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self gruntThenDo: [ :error4 | error4\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt exec error:'; log: error4.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self finishMessage.\x0a\x09process exit ]]]]]]]]",
-messageSends: ["gruntInitThenDo:", "ifNotNil:ifNil:", "log:", "exit", "bowerInstallThenDo:", "npmInstallThenDo:", "gruntThenDo:", "finishMessage"],
-referencedClasses: []
+source: "start\x0a\x09self gruntInitThenDo: [ :error | error\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt-init exec error:'; log: error.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self bowerInstallThenDo: [ :error2 | error2\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'bower install exec error:'; log: error2.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self npmInstallThenDo: [ :error3 | error3\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'npm install exec error:'; log: error3.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self gruntThenDo: [ :error4 | error4\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt exec error:'; log: error4.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09Configurator new writeConfigThenDo: [ :error5 | error5\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'amber config exec error:'; log: error5.\x0a\x09\x09process exit ]\x0a\x09ifNil: [\x0a\x0a\x09self finishMessage.\x0a\x09process exit ]]]]]]]]]]",
+messageSends: ["gruntInitThenDo:", "ifNotNil:ifNil:", "log:", "exit", "bowerInstallThenDo:", "npmInstallThenDo:", "gruntThenDo:", "writeConfigThenDo:", "new", "finishMessage"],
+referencedClasses: ["Configurator"]
 }),
 globals.Initer);
 

+ 4 - 5
external/amber-dev/lib/config.js

@@ -7,19 +7,18 @@ var configBuilder = require('amd-config-builder'),
     path = require('path'),
     fs = require('fs');
 
-exports.writeConfig = function (searchDir, fileForConfig) {
+exports.writeConfig = function (searchDir, fileForConfig, callback) {
     searchDir = searchDir || path.join(__dirname, '../../..');
     fileForConfig = fileForConfig || 'config.js';
+    callback = callback || function (err) { if (err) throw err; };
 
     configBuilder.produceConfigObject(searchDir, function (err, result) {
-        if (err) throw err;
+        if (err) return callback(err);
         var text = "/* DO NOT EDIT! This file is generated. */\n" +
             "\n" +
             "var require;\n" +
             "if (!require) require = {config: function (x) {require = x;}};\n" +
             "require.config(" + JSON.stringify(result, null, 2) + ");";
-        fs.writeFile(path.join(searchDir, fileForConfig), text, function (err) {
-            if (err) throw err;
-        });
+        fs.writeFile(path.join(searchDir, fileForConfig), text, callback);
     });
 };

+ 1 - 1
external/amber-dev/package.json

@@ -1,6 +1,6 @@
 {
   "name": "amber-dev",
-  "version": "0.1.5",
+  "version": "0.1.6",
   "description": "Development goodies for Amber Smalltalk",
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"

+ 2 - 2
internal/index.html

@@ -19,7 +19,7 @@
         }
     );
 </script>
-<p>To start legacy in-page IDE, <a href="javascript:require('amber/helpers').globals.Browser._open()">click here</a>.</p>
-<p>To popup Helios IDE, <a href="javascript:require('amber/helpers').popupHelios()">click here</a>.</p>
+<p>To start legacy in-page IDE, <a href="#" onclick="require('amber/helpers').globals.Browser._open(); return false;">click here</a>.</p>
+<p>To popup Helios IDE, <a href="#" onclick="require('amber/helpers').popupHelios(); return false;">click here</a>.</p>
 </body>
 </html> 

+ 2 - 2
package.json

@@ -23,7 +23,7 @@
     "url": "git://github.com/amber-smalltalk/amber.git"
   },
   "engines": {
-    "node": ">=0.10.0"
+    "node": ">=0.8.0"
   },
   "scripts": {
     "test": "grunt test"
@@ -33,7 +33,7 @@
     "grunt": "~0.4.0",
     "grunt-contrib-jshint": "~0.3.0",
     "grunt-execute": "~0.2.1",
-    "amber-dev": "~0.1.5",
+    "amber-dev": "~0.1.6",
     "grunt-contrib-clean": "~0.5.0"
   }
 }

+ 34 - 0
src/Web.js

@@ -3876,6 +3876,40 @@ referencedClasses: []
 }),
 globals.Object);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "postMessageTo:",
+protocol: '*Web',
+fn: function (aFrame){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+var $1;
+$1=self._postMessageTo_origin_(aFrame,"*");
+return $1;
+}, function($ctx1) {$ctx1.fill(self,"postMessageTo:",{aFrame:aFrame},globals.Object)})},
+args: ["aFrame"],
+source: "postMessageTo: aFrame\x0a^ self postMessageTo: aFrame origin: '*'",
+messageSends: ["postMessageTo:origin:"],
+referencedClasses: []
+}),
+globals.Object);
+
+smalltalk.addMethod(
+smalltalk.method({
+selector: "postMessageTo:origin:",
+protocol: '*Web',
+fn: function (aFrame,aString){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return aFrame.postMessage(self, aString);
+return self}, function($ctx1) {$ctx1.fill(self,"postMessageTo:origin:",{aFrame:aFrame,aString:aString},globals.Object)})},
+args: ["aFrame", "aString"],
+source: "postMessageTo: aFrame origin: aString\x0a<return aFrame.postMessage(self, aString)>",
+messageSends: [],
+referencedClasses: []
+}),
+globals.Object);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "appendToBrush:",

+ 8 - 0
src/Web.st

@@ -1135,6 +1135,14 @@ appendToBrush: aTagBrush
 
 appendToJQuery: aJQuery
 	aJQuery append: self asString
+!
+
+postMessageTo: aFrame
+^ self postMessageTo: aFrame origin: '*'
+!
+
+postMessageTo: aFrame origin: aString
+<return aFrame.postMessage(self, aString)>
 ! !
 
 !String methodsFor: '*Web'!