jmoenig / Snap

a visual programming language inspired by Scratch
http://snap.berkeley.edu
GNU Affero General Public License v3.0
1.49k stars 743 forks source link

How can a JavaScript block run an ordinary block? #1402

Closed ToonTalk closed 8 years ago

ToonTalk commented 8 years ago

I want a JavaScript function to receive a callback in the form of a Snap! block and call it.

I tried the straight-forward

spoken_callback('test');

The block function spoken_callback is received as a Context object and playing (only) a little bit with the code I thought I could run it by

var exp = spoken_callback.expression; var length = exp.inputs().length; var rcvr = spoken_callback.receiver; var selector = exp.selector; var inputs = spoken_callback.inputs; var process = arguments[1]; if (process [selector]) { rcvr = process; } rcvr[selector].apply(rcvr, inputs);

This results in cannot read property 'body' of undefined.

data:image/png;base64,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

ToonTalk commented 8 years ago

Here's another attempt to include an image of my block:

image

dekrain commented 8 years ago

no, expression is evaluate custom block that use process.context, that is a run with inputs block

ToonTalk commented 8 years ago

Thanks. I figured out how to do it:

var process = arguments[1]; var to_speak = "test"; // will be computed process.evaluate(spoken_callback, new List([to_speak]), true);

dekrain commented 8 years ago

but remember, Process.evaluate put to stack context, so it be executed AFTER your function

ToonTalk commented 8 years ago

I think I closed this prematurely. The above code doesn't work asynchronously. E.g.

var process = arguments[1]; var to_speak = "test"; // will be computed setTimeout(function () { process.evaluate(spoken_callback, new List([to_speak]), true); });

causes

threads.js:959 Uncaught TypeError: Cannot read property 'parentContext' of null Process.evaluate @ threads.js:959(anonymous function) @ VM436:14

I assume the problem is that the process that was running the JavaScript block has terminated in the meanwhile.

Not sure how to deal with this.

dekrain commented 8 years ago

Tip: use

 ```javascript
 // some code
 ``` end

without end

dekrain commented 8 years ago

read above

remember, Process.evaluate put to stack context, so it be executed AFTER your function

instead, use invoke

ToonTalk commented 8 years ago

Great, thanks working fine now. My first use of this is to respond to voice. This block speaks whatever it hears:

image

It works fine in Chrome and hopefully soon in FireFox (https://bugzilla.mozilla.org/show_bug.cgi?id=1248897).

However to prevent it from asking permission to use the microphone every time it is run I needed to use HTTPS - https://snap.berkeley.edu/snapsource/snap.html. Is there a reason why the home page launches the HTTP version?

ToonTalk commented 8 years ago

Here's the block. listen v2.zip