10.0.0:
- New Features:
- Blocks all the way
- all blocks in the palette are now custom blocks, except hat blocks and rings
- bootstrap global custom blocks as primitives
- new "primitive" (pragma) block for custom block definitions
- support for associating custom block definitions with primitives
- support for overloading primitives with custom block definitions and organizing them in libraries
- new experimental (hidden) option to bulk-toggle the use-primitive switch in all customized primitives
- export and include customized primitives in libraries
- New blocks and new block features
- new "skew" primitive block for costumes
- new "a new clone of 'Turtle sprite'" feature - makes a new temporary Turtle sprite that does not inherit anything
- lazy translation support for data
- Customizing Blocks
- color type input slots for custom blocks
- variadic variables type input slots for custom blocks
- destinations, locations, keys, data types, objects + self, sprites + self, collidables, object attributes, microphone, scenes, primitives, properties and extensions dropdown menus for custom blocks
- upvars in custom blocks can now have different default names than their formal parameter names
- "collapse" label support for variadic inputs in custom blocks
- variadic "collapse" (prefix label) support for custom blocks
- default values for variadic slots inside custom blocks
- initial subslot number support for variadic inputs
- special "receivers" type input slots for custom blocks (as in the "broadcast" primitive)
- special "send data" type input slots for custom blocks (as in the "switch to scene" primitive)
- max/min subslot number support for variadic inputs in custom blocks
- new "input names" selector in the (attribute OF target) primitive reporter
- prefixing a default text value in the slot-type dialog with dollar-underscore tags it as translatable selector
- support translating custom drop-downs by prefixing items with
$_
- Customizing the palette
- custom blocks can be rearranged in the palette via their context menu, thanks, Simon Mong for pioneering this!
- custom blocks can be grouped in the palette by adding vertical spaces in between them
- Customizing the IDE
- new API configuration option to hide the project name, thanks, Bernat!
- new API configuration option to hide project specific entries in the file/project menu
- Metaprogramming
- new Metaprogramming library
- allow (nested) lists of block label parts in the DEFINE command to express multi-line block labels
- metaprogramming support for color type input slots (number: 13, spec: "clr", mnemonic: "color")
- metaprogramming support for color type variadic variables slots (number: 14, spec: "scriptVars", mnemonic: "vars")
- metaprogramming support for "collapse" labels in variadic inputs
- metaprogramming support for c-slots with loop arrows (number: 15, spec: "ca", mnemonic: "loop")
- metaprogramming support for "expand" (slot prefix) labels in variadic inputs
- metaprogramming support for default values of variadic inputs
- metaprogramming support for initial variadic subslots
- metaprogramming support for message-receiver type multi-slots (number: 16, spec: "receive", mnemonic: "receivers")
- metaprogramming support for send-data type multi-slots (number: 17, spec: "send")
- metaprogramming support for max/min subslot number in variadic inputs in custom blocks
- metaprogramming support for newlines in custom block labels ("$nl")
- Extensions
- new "Code to Blocks to Code" library, translates text code to blocks and vice-versa
- new 3D Beetle Geometry extension, thank you, Bernat!
- new experimental "Embroidery" library
- new EDC Early Maths Microworlds, thanks, Zak Kolar and Bernat!
- new "writing and formatting" library, thanks, Tethrarxitet!
- new "Outlines and Halos" library
- new "snap" category with new "snap_block_selectors" extension primitive
- new "bootstrap" and "un-bootstrap" extension primitives
- new "bootstrapped(block)?" extension primitive
- new "snap_yield" extension primitive
- new extension primitives for encoding / decoding blocks to and from xml
- new 'xhr_binary(url, webIDL_type)' extension primitive
- new "binary data from (url) type (webIDL)" reporter in the web-services library
- pixels library: new "grayscales of (costume)" reporter
- pixels library: new "rectangle costume" reporter
- new "sigmoid" easing function in the animations library (for neural networks)
- Hypermutation
- new "changeBy(data, delta)" extension primitive
- Live Coding
- new live coding "performer mode" setting, thank you, Bernat!
- Matrix-kernel convolutions
- Lisp code / codification
- new LISP-like text syntax for blocks and scripts
- new "Lisp code..." entry in blocks context menu
- new "code..." entry to blocks context menu if "Codification support" setting is enabled
- User interface
- copy text from variable watchers, block result bubbles and sprite speech/thought balloons to the clipboard
- new Search feature for the library browser, thanks, Michael!
- new "svg poly" export format for vector pen trails, optimized for speed and laser-cutting
- export vector pen trails as embroidery files (DST, EXP)
- added pen trails export options to the project ("file") menu
- added ability to switch octaves in the piano keyboard menu, thanks, ego-lay-atman-bay!
- Blocks all the way
- Notable Changes:
- Blocks all the way
- renamed "primitive" blocks into "extension"
- Blocks behavior
- drawing a dot when moving zero steps now observes the flat-line-ends settings and draws a centered square or rhombus the size of current pen and in its direction
- optimized FOR-loop and FOR-EACH-loop for speed
- Custom Blocks
- keep the order & position of existing custom blocks in the project palette when overloading them with imported blocks
- support for multiple separator lines in input slot dropdown menus
- Libraries (and Costumes, etc) media files are now in a JSON format, which supports translation and additional search metadata.
- arcs library: changed label wording to TurtleStitch convention, added "arc left" version
- Metaprogramming
- automatically add generic inputs in DEFINE matching the number of placeholders in the label
- when querying the defintion of a block via metaprogramming the number of inputs of the resulting ring now matches that of the header expression
- block label symbols are now shown with their name prefixed by "$" instead of an underscore to avoid confusing them with inputs when metaprogramming
- the metaprogramming getter for "translations" block attribute selector now always returns a list
- custom block definition comments can now be deleted by setting them to nothing (empty string, zero or false)
- the "define" block now always creates a new custom block definition instead of sometimes modifying the definition body of an existing one with a matching label
- support for smooth animations in recursive control structures defined using metaprogramming
- When programmatically setting the "slots", "defaults", "menus", "editables" or "replaceables" of a custom block to a non-list type, apply the type to all slots instead of just the first one.
- Hypermutation
- the "change by" command for variables is now hyperized and even recursively mutates (!) data
- User interface
- scroll long text inside result balloons instead of shortening it
- Confirmation pop-ups when closing the browser tab only appears in the event of unsaved changes, thanks, 2-www
- more help screens, thanks, Brian and the forum gang!
- Lisp code
- splitting a LISP-formatted text by "blocks" returns a block-syntax tree
- converting a block-syntax tree to "text" using the list-selectors reporters reeturns LISP code
- Blocks all the way
- Notable Fixes:
- fixed a type error when using metaprogramming to copy default inputs from a primitive over to a custom block definition
- fixed referencing system drop-down menus in metaprogramming
- fixed correctly evaluating (reifying) static (irreplaceable) C-slots inside custom blocks
- only capture the caller once in repeating recursive calls
- fixed a rendering situation glitch for live rings
- fixed a bug in the colors library, thanks, Brian!
- Documentation Updates:
- new Snap! Lisp Syntax documentation
- updated extensions.md
- Translation Updates:
- German