* refact: move super call to top of block svg
* refact: run conversion script on block svg and block
* fix: make debug build happy
* fix: tests
* style: format
* fix: cleanup from rebase
* fix: use new.target instead of a new parameter
* fix: add more overridden casted methods to BlockSvg
* style: fix typos
* style: move override tags to the end of JSDoc
* fix: cleanup from rebase
* refactor: Initial test at refactoring fields to ES6
* refact: reorganize text input and descendants to call super first
* refact: run conversion script on text input field and subclasses
* clean: cleanup fields post-conversion script
* refact: reorganize dropdown and variable fields to call super first
* refact: run class conversion script on dropdown and variable
* clean: clean fields post conversion script
* refact: reorganize misc fields to call super first
* refact: run conversion script on misc fields
* clean: cleanup misc fields after conversion
* fix: add setting the value and whatnot back to the base field. Pass sentinel conistently
* format
* refact: work on making debug compiler happy
* clean: finish making debug build happy
* fix: work on making tests happy
* fix: finish making tests happy
* Fix: fixup angle and multiline fields
* clean: format
* fix: move default value back to DEFAULT_VALUE
* fix: change SENTINEL to SKIP_SETUP
* fix: inline docs
* fix: some misc PR comments
* fix: format
* fix: make compiler hapy with new.target
* fix: types in FieldDropdown
* fix: add @final annotations to Field
* feat: move Sentinel to a utils file
* fix: remove ImageProperties from external API
* clean: cleanup chunks and deps
* fix: remove unnecessary properties from rows
* refactor: run conversion script on measurables
* clean: cleanup from conversion
* fix: make debug build happy
* clean: format
* fix: remove widthWithConnectedBlocks assignment on element
* fix: add inline docs for statementEdge
...and rename Blockly.blocks.all (blocks/all.js) to
Blockly.libraryBlocks (blocks/blocks.js
BREAKING CHANGE: (only) because the exports object from the
`blocks_compressed.js` chunk will be accessed as
`Blockly.libraryBlocks` instead of `Blockly.blocks.all` when the
chunk is loaded in a browser via a `<script>` tag. There will
be no changes visible when the chunk is loaded via ES module
`import` or CJS `require`.
* chore(deps): Update closure/goog/base.js, add goog.js
* Update base.js from the latest version (20220104.0.0).
* Also copy over goog.js, which provides access to asuitable subset
of goog.* via an importable module).
* refactor(tests): Have playground.html load Blockly as a module
N.B.:
* We still need a preparation step, in order to load base.js and
deps.js via <script> tags in uncompiled mode; in compiled mode
it will instead load all the *_compressed.js files via <script>
tags.
Acess to the Blockly object is via:
import Blockly from './playgrounds/blockly.mjs';
(N.B: no "* as", since blockly.mjs has only a default export.)
* There remain two serious defects when running in uncompiled mode:
* It does not attempt to load msg/messages.js, causing startup to
fail.
* Module loading only works if there are no ES Modules; if there
are, something goes wrong with base.js's attempt to sequence
module loads causing goog.modules that import ES modules to get
a null exports object for that import. X-(
* fix(tests): Have playground.html load messages.js before generators
This fixes the issue caused by missing messages when loading
the generators.
* fix(tests): Move bootsrap calls to prepare.js
Move the calls to goog.bootstrap from blockly.mjs to prepare.mjs.
This is needed to work around a bug in the Cosure Library debug
loader (https://github.com/google/closure-library/issues/1152).
This gets a bit ugly because most of the code has to go in a
<script> (because it needs goog.bootstrap, which was loaded by
an earlier <script> tag).
* fix(documentation): Minor comment corrections for PR #5931
* refact: convert toolbox items to ES6 classes
* fix: and SENTINEL so that contents can be parsed properly
* fix: fix types and whatnot related to new SENTINEL
* clean: format
* refactor: reorganize overridable calls into the init function, and remove sentinel
* clean: format
* fix: inline docs and organization
* refactor: convert shortcut registry to es6 class
* refactor: convert context menu registry to es6 class
* refactor: convert registry type to es6 class
* chore: format
* chore: respond to PR comments
* refactor: move optional function declarations into the constructor
* refactor: convert options.js to es6 class
* refactor: convert generator.js to es6 class
* refactor: convert workspace_events.js to es6 class
* refactor: convert events_abstract.js to an es6 class
* chore: format
* chore: fix lint
* chore: rebuild
* chore: respond to PR feedback
Same as PR #5640, except for the addition of a parameter in the JSON to turn this on or off. While one would normally want animations/sounds on (e.g. undo/redo stack) sometimes they'd be annoying (e.g. events from realtime collaborators).
* refactor: update several files to es6 classes
* refactor: update several files to es6 classes
* chore: add some type casts for specificity about event types
* chore: run formatter
* chore: rebuild
* refactor: update workspace_comment and _svg to es classes
* refactor: update classes that extend icon to es classes
* refactor: update icon to es6 class
* refactor: update connection classes to es6 classes and add casts as needed
* refactor: update scrollbar to es6 class and add casts as needed
* refactor: update workspace_svg to es6 class
* refactor: update several files to es6 classes
* refactor: update several files to es6 classes
* refactor: update renderers/common/info.js to es6 class
* refactor: update several files to es6 classes
* chore: rebuild deps.js
* chore: run format
* chore: use casts to narrow types in renderers
* chore: add @struct and type information on common measurables
* refactor: update some renderer measurables to es6 classes
* refactor: convert many measurables to es6 classes
* chore: format
* chore: rebuild
* refactor: Provide a BlockDefinition type
* refactor: Split defineBlocksWithJsonArray
Split defineBlocksWithJsonArray into:
- createBlockDefinitionsFromJsonArray, which creates BlockDefinitions
from a (possibly JSON-originated) POJsO array, having no side-effects
except possibly issuing warnings to the console.
- defineBlocks, which add any dictionary of BlockDefinitions to
the Blocks dictionary.
* feat(blocks): Export block definitions per-module
- Define all blocks in a local blocks dictionary, often using
createBlockDefinitionFromJsonArray, without registering them.
- Separately, use defineBlocks to register the exported
BlockDefinitions at the end of each Blockly.blocks.*
module.
- In Blockly.blocks.all, create a blocks export that combines all
of the blocks exports from the individual blocks modules.
* chore: have format script run clang-format on blocks/ too
* refactor(blocks): Make loopTypes a Set
This is likely to slightly improve performance, especially if there
are many entries.
* refactor(blocks): Re-export individual block modules from Blockly.blocks.all
* fix!(blocks): Have blocks_compressed.js export Blockly.blocks.all
Previously the value obtained by
const blocks = require('blockly/blocks'); // Node.js
or
import blocks from 'blockly/blocks.js'; // ES Modules
would be the block definitions dictionary (Blockly.Blocks).
Change this so that it is instead the export object from
Blockly.blocks.all.
This means you can now access loopTypes via:
import blocks from 'blockly/blocks.js';
blocks.loops.loopTypes.add('my_loop_blocktype');
This is a breaking change for any code which depended on the value
that was exported by blocks_compressed.js.
BREAKING CHANGE: the exports provided by blocks_compressed.js (and
therefore by `import ... from 'blockly/blocks'`) have changed; see above.
* refactor: convert flyout_button.js to ES6 class
* chore: move some properties into constructor and add annotations for flyout base
* refactor: convert flyout_horizontal.js to ES6 class
* refactor: convert flyout_vertical.js to ES6 class
* refactor: convert flyout_base.js to ES6 class
* refactor: convert flyout_metrics_manager.js to ES6 class
* refactor: convert insertion_marker_manager.js to ES6 class
* refactor: convert metrics_manager.js to ES6 class
* refactor: convert grid.js to ES6 class
* refactor: convert input.js to ES6 class
* refactor: convert touch_gesture.js to ES6 class
* refactor: convert gesture.js to ES6 class
* refactor: convert trashcan.js to ES6 class
* chore: rebuild and run format
* chore: fix review comments
* chore: respond to PR comments
* chore(tests): update event assert functions to pass in types directly
* refactor: move event types from prototypes to constructors
* refactor: convert events/events_block_change.js to ES6 class
* refactor: convert events/events_block_create.js to ES6 class
* refactor: convert events/events_block_delete.js to ES6 class
* refactor: convert events/events_block_drag.js to ES6 class
* refactor: convert events/events_block_move.js to ES6 class
* refactor: convert events/events_click.js to ES6 class
* refactor: convert events/events_comment_change.js to ES6 class
* refactor: convert events/events_comment_create.js to ES6 class
* refactor: convert events/events_comment_delete.js to ES6 class
* refactor: convert events/events_comment_move.js to ES6 class
* refactor: convert events/events_marker_move.js to ES6 class
* refactor: convert events/events_selected.js to ES6 class
* refactor: convert events/events_theme_change.js to ES6 class
* refactor: convert events/events_toolbox_item_select.js to ES6 class
* refactor: convert events/events_trashcan_open.js to ES6 class
* refactor: convert events/events_ui.js to ES6 class
* refactor: convert events/events_var_create.js to ES6 class
* refactor: convert events/events_var_delete.js to ES6 class
* refactor: convert events/events_var_rename.js to ES6 class
* refactor: convert events/events_viewport.js to ES6 class
* chore: rebuild
* chore: run clang-format
* chore(deps): Remove deprecated babel-lint package
When dependabot submitted PR #5791, it became apparent that eslint
version >= 8 is incompatible with babel-eslint v10.1.0 despite the
latter not having a version restriction against it. This is probably
because v10.1.0 is the last version of the package before it was
deprecated and renamed @babel/eslint-parser.
A little more investigation determined that there is no longer any
need to have eslint use a non-default parser for tests/mocha/**/*.js,
so the most straight forward solution is just to remove the dependency
entirely.
* refactor(tests): Simplify tests/mocha/.eslintrc.json
Remove all rules that seem to be redundant with our top-level
.eslintrc.json.
This finishes reverting most of the changes made in PR #4062.
* Add deprecation warnings and reorganize blockly.js
* Update usages of deprecated properties
* chore: make dates consistent, remove extra function
* chore: run clang-format and fix lint
* chore: add more tags
* chore: fix updated location of Align types
* chore: fix deprecated usages in tests
* chore: rebuild deps
* chore: fix moved Align types in demos and tests
* chore: update which properties are actually deprecated
* chore: don't deprecate Blockly.selected.
* chore: Remove requires that duplicate those in blockly.js
* refactor: Remove core/requires.js, make blockly.js be entry point
It sort of makes sense, doesn't it?
The only remaining require not duplicated in `blockly.js` was that for
`Blockly.themes.Classic`, but it is already required by
`Blockly.themes` (itself required by `Blockly`).
* fix(test): Fix advanced compilation test
- Fix loading of blocks in `tests/compile/main.js` caused by
recent `goog.module`-ification work.
- Fix problem caused by ADVANCED_OPTIMISATIONS renaming the Msg
property on the fake Blockly object created by the
translation-loading hack in `blockly.js`.
* chore(build): Reenable advanced compilation test
Fixes#5602.
* chore: Fix inadvertent block migration inconsistencies
- Reinstate `goog.require`s-for-side-effects that were inadvertently
removed.
- Always use a destructuring import for `defineBlocksWithJsonArray`.
- Consistently use `CONSTANT_CASE` names for block-common objects.
(We could alternatively always use `camelCase` names, but since
all the `MIXIN`s and `EXTENSIONS` remain all-uppercase this seems
the more consistent.)
* chore: Fix import ordering
* refactor: convert generators/python/colour.js to goog.module
* refactor: convert generators/python/colour.js to named requires
* chore: run clang-format
* refactor: convert generators/python/lists.js to goog.module
* refactor: convert generators/python/lists.js to named requires
* chore: run clang-format
* refactor: convert generators/python/logic.js to goog.module
* refactor: convert generators/python/logic.js to named requires
* chore: run clang-format
* refactor: convert generators/python/loops.js to goog.module
* refactor: convert generators/python/loops.js to named requires
* chore: run clang-format
* refactor: convert generators/python/math.js to goog.module
* refactor: convert generators/python/math.js to named requires
* chore: run clang-format
* refactor: convert generators/python/procedures.js to goog.module
* refactor: convert generators/python/procedures.js to named requires
* chore: run clang-format
* refactor: convert generators/python/text.js to goog.module
* refactor: convert generators/python/text.js to named requires
* chore: run clang-format
* refactor: convert generators/python/variables_dynamic.js to named requires
* refactor: convert generators/python/variables.js to named requires
* chore: run clang-format
* refactor: convert generators/python.js to goog.module
* refactor: convert generators/python.js to named requires
* chore: run clang-format
* chore: remove spurious @private annotations
* chore: rebuild
* refactor: convert generators/lua.js to goog.module
* refactor: convert generator/lua.js to named requires
* chore: run clang-format
* refactor: convert generators/php/colour.js to goog.module
* refactor: convert generators/php/colour.js to named requires
* chore: run clang-format
* refactor: convert generators/php/lists.js to goog.module
* refactor: convert generators/php/lists.js to named requires
* chore: run clang-format
* refactor: convert generators/php/logic.js to goog.module
* refactor: convert generators/php/logic.js to named requires
* chore: run clang-format
* refactor: convert generators/php/loops.js to goog.module
* refactor: convert generators/php/loops.js to named requires
* chore: run clang-format
* refactor: convert generators/php/math.js to goog.module
* refactor: convert generators/php/math.js to named requires
* chore: run clang-format
* refactor: convert generators/php/procedures.js to goog.module
* refactor: convert generators/php/procedures.js to named requires
* chore: run clang-format
* refactor: convert generators/php/text.js to goog.module
* refactor: convert generators/php/text.js to named requires
* chore: run clang-format
* refactor: convert generators/php/variables.js to goog.module
* refactor: convert generators/php/variables.js to named requires
* chore: run clang-format
* refactor: convert generators/php/variables_dynamic.js to goog.module
* refactor: convert generators/php/variables_dynamic.js to named requires
* refactor: convert generators/php.js to goog.module
* refactor: convert generators/php.js to named requires
* chore: run clang-format
* chore: rebuild deps.js
* refactor: convert generators/lua/colour.js to goog.module
* refactor: convert generators/lua/colour.js to named requires
* chore: run clang-format
* refactor: convert generators/lua/lists.js to goog.module
* refactor: convert generators/lua/lists.js to named requires
* chore: run clang-format
* fix: use getListIndex helper function in lua list generators
* refactor: convert generators/lua/logic.js to goog.module
* refactor: convert generators/lua/logic.js to named requires
* chore: run clang-format
* refactor: convert generators/lua/loops.js to goog.module
* refactor: convert generators/lua/loops.js to named requires
* chore: run clang-format
* refactor: convert generators/lua/math.js to goog.module
* refactor: convert generators/lua/math.js to named requires
* chore: run clang-format
* refcator: convert generators/lua/procedures.js to goog.module
* refactor: convert generators/lua/procedures.js to named requires
* chore: run clang-format
* chore: rebuild deps.js
* refactor: convert generators/lua/text.js to goog.module
* refactor: convert generators/lua/text.js to named requires
* refactor: convert generators/lua/variables_dynamic.js to goog.module
* refactor: convert generators/lua/variables_dynamic.js to named requires
* chore: run clang-format on text.js
* refactor: convert generators/lua/variables.js to goog.module
* refactor: convert generators/lua/variables.js to named requires
* chore: run clang-format
* chore: make a lua generator function internal
* chore: rebuild deps.js
* refactor: convert generators/javascript.js to goog.module
* refactor: convert generators/javascript.js to named requires
* chore: run clang-format
* refactor: convert generators/dart/variables.js to goog.module
* refactor: convert generators/dart/variables.js to named requires
* chore: run clang-format
* refactor: convert generators/dart/variables_dynamic.js to goog.module
* refactor: convert generators/dart/variables_dynamic.js to named requires
* refactor: convert generators/dart/text.js to goog.module
* refactor: convert generators/dart/text.js to named requires
* chore: run clang-format
* refactor: convert generators/dart/procedures.js to goog.module
* refactor: convert generators/dart/procedures.js to named requires
* chore: run clang-format
* refactor: convert generators/dart/math.js to goog.module
* refactor: convert generators/dart/math.js to named requires
* chore: run clang-format
* refactor: convert generators/dart/loops.js to goog.module
* refactor: convert generators/dart/loops.js to named requires
* chore: run clang-format
* refactor: convert generators/dart/logic.js to goog.module
* refactor: convert generators/dart/logic.js to named requires
* chore: run clang-format
* refactor: convert generators/dart/lists.js to goog.module
* refactor: convert generators/dart/lists.js to named requires
* chore: run clang-format
* refactor: convert generators/dart/colour.js to goog.module
* refactor: convert generators/dart/colour.js to named requires
* chore: rebuild deps.js
* chore: lint
* refactor: convert generators/javascript/colour.js to goog.module
* refactor: convert generators/javascript/colour.js to named requires
* chore: run clang-format
* refactor: convert generators/javascript/lists.js to goog.module
* refactor: convert generators/javascript/lists.js to named requires
* chore: run clang-format
* refactor: convert generators/javascript/logic.js to goog.module
* refactor: convert generators/javascript/logic.js to named requires
* chore: run clang-format
* refactor: convert genereators/javascript/math.js to goog.module
* refactor: convert generators/javascript/math.js to named requires
* chore: rebuild deps.js
* refactor: convert generators/javascript/procedures.js to goog.module
* refactor: convert generators/javascript/procedures.js to named requires
* chore: run clang-format
* refactor: Turn .getSurroundLoop into a (Block) method
This considerably simplifies the code in the genrators, obviating
the need for generators to import Blockly.Constants.Loops, and
allowing the compiler to remove blocks/loops.js from the first
(Blockly) chunk of the compilation.
(The latter could and should have been arranged by making the
generator chunks depend on the blocks chunk, but that is no longer
necessary.)
* refactor: Migrate blocks/loops.js to goog.module
* refactor: Migrate blocks/loops.js named requires
* chore: clang-format blocks/loops.js