Commit graph

55 commits

Author SHA1 Message Date
Karishma Chadha
2fbd152c53 Make loadExtensionURL consistent with error handling logic in loadExtensionIdSync 2019-03-27 17:42:10 -04:00
Karishma Chadha
eccdeff2ce Use async require with coreExample extension. Log a warning when attempting to load a non-built in extension synchronously. Simplify unit test. 2019-03-26 12:03:00 -04:00
Karishma Chadha
061b0b081f Refactor loadExtensionURL for readability. 2019-03-25 16:39:00 -04:00
Karishma Chadha
efcb801fe3
Apply suggestions from code review
Add error cases in new functions and remove todo comment.

Co-Authored-By: kchadha <kchadha@media.mit.edu>
2019-03-25 16:32:51 -04:00
Karishma Chadha
0e710ba3d9 Allow loading extensions synchronously. Add example extension to list of known internal extensions. 2019-03-22 12:20:06 -04:00
Michael "Z" Goddard
a5009b4c59
delay extension evaluation until that extension is installed
Reduce the amount of code that needs to evaluated before we can
starting the target project if there is one. It is key to note that the
music extension includes ~2MB of base64 encoded sound samples. This
skips evaluating those samples and decoding base64 into binary typed
arrays.
2019-03-06 11:11:44 -05:00
Chris Willis-Ford
a02fb3877b
Merge pull request #1871 from Affonso-Gui/fix_dynamic_menu_string
Fix dynamic menus for string arrays
2019-02-13 10:41:36 -08:00
Eric Rosenbaum
5d329663aa do not load vernier extension yet 2019-01-15 15:20:05 -05:00
Valerie Young
a0bf69f17c Change extension name 2019-01-07 11:29:26 -05:00
Valerie R Young
26067a9287 Draft of goforce blocks 2019-01-07 11:29:26 -05:00
Guilherme Affonso
f4c6816ea7 Fix dynamic menus for string arrays 2018-12-26 19:26:59 +09:00
Eric Rosenbaum
7198ace595
Makey Makey extension (#1782)
* Initial working makey makey extension

* Cleanup and localization

* Add block icon

* Localization and cleanup

* Docs and cleanup

* Update block icon

* Cleanup

* Fix key press args
2018-11-29 10:45:40 -05:00
Eric Rosenbaum
64a1d3e02b
fix ids and names for text2speech and speech2text extensions (#1583) 2018-09-13 15:44:18 -04:00
chrisgarrity
849412ba82 Switch setLocale to return a promise
Convert refreshBlocks to a function returning a promise, and return that from setLocale. Now GUI can ensure that refreshing the toolbox and workspace only happens after all the blocks have refreshed.
2018-07-11 08:35:22 -04:00
Andrew Sliwinski
c9d71488c3
Merge pull request #1311 from thisandagain/feature/polly
Update text-to-speech extension to use new audio engine
2018-07-10 08:30:52 -04:00
Andrew Sliwinski
ace5ae40d0 Update text-to-speech extension to use new audio engine 2018-07-09 14:40:13 -04:00
Evelyn Eastmond
2d8ad05a78 Adding Ev3 extension with three test blocks to latest device-connection work, auto-connecting to device for now. 2018-07-09 13:49:40 -04:00
Andrew Sliwinski
55b1a794ce Add initial working version of the Amazon Polly extension 2018-06-05 17:51:55 -04:00
picklesrus
968eeaf936 Fix missing comma from bad merge. 2018-05-31 12:14:55 -07:00
picklesrus
adf5d0acfd Add speech extension to the extension manager. 2018-05-30 13:22:07 -07:00
Kreg Hanning
82fd6f0d2f Add micro:bit Scratch 3.0 extension (#1113)
* Add micro:bit Scratch 3.0 extension

* Fix lint errors in micro:bit extension

* Fix doc. Incorrect return type

* Check for valid pin in when pin connected block

* Drop mapping function

* Drop question mark from tilt hat block

* Generate list of symbols from object keys

* Trim display text block to max 20 characters
2018-05-14 13:52:49 -04:00
picklesrus
37e5c638c1 Add translate extension to the extension manager. 2018-05-10 13:42:23 -07:00
Andrew Sliwinski
f86cad3305 Replace extension delimeter with '_' 2018-04-20 07:54:02 -04:00
Chris Willis-Ford
631d7fb4de
Merge pull request #1021 from cwillisf/features-for-control-extension
Features for control extension
2018-04-10 12:17:43 -07:00
Christopher Willis-Ford
f8db6c3f02 Support extension translation
The new `maybeFormatMessage` function detects whether its argument
looks like a message descriptor object and, if so, will call
`formatMessage` on it. This is now used for all user-visible text fields
in extensions.

Also, messages may use "select" to check the target type with a message
like this: '{targetType, select, stage {text for stage} sprite {text for
sprite} other {text for other}'. Note that the "other" clause is
required by `formatMessage`.
2018-04-05 12:17:05 -07:00
Christopher Willis-Ford
de9e2be265 Add EVENT extension block type
An EVENT block is like a HAT block but it has no implementation
function. Its stack runs when the VM emits the corresponding event.
2018-04-04 23:44:59 -07:00
Christopher Willis-Ford
af058b8146 Support LOOP and CONDITIONAL blocks in extensions
A LOOP block is like a conditional, but the LOOP block will be
re-evaluated after any child branch runs.

Also:
- Support using '---' as a block separator
- Refactor common code from `_registerExtensionPrimitives` and
  `_refreshExtensionPrimitives` into new `_fillExtensionCategory`
- Improve error reporting during block conversion
2018-04-04 22:19:48 -07:00
Michael "Z" Goddard
3c473f6ba8
Translate scratch 2 video sensing into scratch 3 extension
- Add videoSensing extension to extension-manager
2018-03-29 15:15:11 -04:00
Christopher Willis-Ford
1049e90a8f Wrap extension menu function to provide context
When the extension system calls a function to retrieve extension menu
items, it now provides the ID of the current editing target. There's
also now a little bit of error-checking on the results.
2018-03-20 15:26:27 -07:00
Christopher Willis-Ford
2932f232c4 Improve developer feedback for missing block func 2018-03-20 15:26:12 -07:00
picklesrus
16ecaab1be Fix up comment. 2018-03-02 11:07:22 -08:00
picklesrus
1910968b13 Fix lint errors. 2018-02-16 10:49:26 -08:00
picklesrus
b6bb92d8f6 Adding support for dynamic menus in extensions. 2018-01-26 14:36:36 -08:00
chrisgarrity
f51cf9877e
Preliminary localization (#777)
* localize the block and menu strings in the pen extension
* adds .tx/config to be able to push translations to transifex
* includes format-message to localize strings and extracting them.
* add setLocale function to VM to allow GUI to pass in locale data.
* refresh block definitions when the locale changes.

### Still to be decided
For now just extracting messages from the pen extension into their own file. We’ll need to decide if each category gets its own file, or group all the strings into one resource.
2017-12-11 15:41:45 -05:00
Eric Rosenbaum
9611401e1c Move pen and wedo into extensions folder 2017-12-01 10:31:04 -05:00
Eric Rosenbaum
961b3476b2 Move the music extension into a new extensions directory 2017-11-13 16:22:37 -05:00
Eric Rosenbaum
b2941f8c5a Load music as internal extension 2017-11-07 11:27:33 -05:00
Chris Willis-Ford
91420375d5
Merge pull request #724 from cwillisf/no-dupe-extensions
Prevent duplicate extensions
2017-11-01 21:29:00 -07:00
Paul Kaplan
18398d010b Add hideFromPalette flag for hiding legacy blocks 2017-11-01 11:30:15 -04:00
Christopher Willis-Ford
8bb48e2a53 Add built-in extension "URL" to _loadedExtensions
Dupe prevention works better when you actually record the necessary
info...
2017-10-31 13:00:19 -07:00
Christopher Willis-Ford
ae878b2050 Simplify extension duplication prevention station
Since we will only have builtin extensions for a while, the
more-complicated, watchdog-based extension duplication prevention has
been replaced with one that treats the extension URL as equivalent to
the extension ID. This is true only for built-in extensions, so once we
start supporting third-party extensions we will likely need to bring
back the watchdog (commit e4381b4693) and
the more-complex duplication prevention (commit
670e51d335).

The code here should be treated as a last resort: ideally the GUI should
check if a particular extension is loaded (maybe by calling the
Extension Manager's new `isExtensionLoaded` method) and avoid calling
`loadExtensionURL` if it is.
2017-10-31 12:35:18 -07:00
Christopher Willis-Ford
670e51d335 Refuse to register second extension with same ID
If an extension attempts to register with the same ID as another
extension which has already registered, the new registration is refused.
If the extension is in a worker and no other extension is successfully
registered by that worker, the watchdog system will terminate the
"empty" worker.
2017-10-31 12:24:26 -07:00
Christopher Willis-Ford
e4381b4693 Add an init watchdog for extension workers
If an extension worker does not complete initialization in a reasonable
amount of time (currently 15 seconds) then the worker will be
terminated. A complete initialization includes registering an extension.
2017-10-31 11:28:56 -07:00
Chris Willis-Ford
a8ae7bc5b4 Merge pull request #700 from cwillisf/extension-menus
Extensions: implement drop-down menus
2017-10-13 09:49:42 -07:00
Christopher Willis-Ford
c1681e54d5 Implement drop-down menus for extension blocks
Also, add `ANGLE` argument type (like `NUMBER` but adds an angle picker)
2017-10-06 23:33:33 -07:00
Christopher Willis-Ford
b6727a766f Fix pen tests 2017-10-04 16:07:50 -07:00
Christopher Willis-Ford
e9aed49a05 Make loadExtensionURL handle built-in extensions
WeDo2 and Pen blocks have been converted to internal extensions, and can
now be loaded by giving `loadExtensionURL` the string 'pen' or 'wedo2'
instead of an actual URL.
2017-10-04 13:00:39 -07:00
Christopher Willis-Ford
772da24d9e Add integration test for a non-worker extension 2017-10-02 12:02:44 -07:00
Christopher Willis-Ford
7a21d619bf Add a way to load an extension without a Worker
The new `_registerInternalExtension` method on the extension manager
will register an extension object (an object with a `getInfo()` method)
with the extension system without sandboxing the object in a Worker.
2017-09-27 00:01:47 -04:00
Christopher Willis-Ford
799d61ac98 Cleanup 2017-09-06 00:57:03 -06:00