Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make scratch-blocks depend on Blockly rather than forking it #3338

Draft
wants to merge 132 commits into
base: develop
Choose a base branch
from

Conversation

cwillisf
Copy link
Contributor

Proposed Changes

Before: scratch-blocks is a heavily modified fork of a very old version of Blockly

After: scratch-blocks lists a very recent official, unmodified version of Blockly (v12 beta) as one of its dependencies

Reason for Changes

We can use new Blockly features!
We can more easily maintain scratch-blocks!
We can keep up to date with new Blockly releases!
We can hang with the cool kids at Blockly-related parties!

Test Coverage

We should really add tests to this repo, but tests in scratch-vm and scratch-gui cover this functionality somewhat.

Thank you!

Big thanks to @BeksOmega, @gonfunko, @mmathrani, @rachel-fenichel, and everyone else who helped make this happen!

gonfunko and others added 30 commits April 12, 2024 09:36
refactor: Bootstrap scratch-blocks based on Blockly 10.
* fix: readd the operator blocks and dependencies

* fix: only import core Blockly blocks_common/math.js

Co-authored-by: Beka Westberg <[email protected]>

* fix: only import core Blockly in vertical_extensions.js

---------

Co-authored-by: Beka Westberg <[email protected]>
* fix: readd the motion blocks

* fix: use the colours_motion extension instead of hardcoding colors
* fix: readd the event blocks

* fix: only import core Blockly
* fix: readd the sound blocks

* chore: remove vestigial sound_sounds_menu implementation
* fix: readd the data blocks

* fix: import constants correctly
* fix: load CSS and fix up UI appearance

* fix: fix size of flyout section header labels
* refactor: move procedures.js into src

* fix: add support for Scratch-style procedures

* chore: remove errant logging

* refactor: remove underscore from exported callback attribute
* fix: modernize and reenable the colour slider field

* refactor: clean up FieldColourSlider

* refactor: extend the FieldColour Blockly plugin

* refactor: remove redundant setting of colour on source block
* fix: reenable support for checkboxes in the flyout

* refactor: use a map instead of an object for storing checkboxes

* chore: remove debugging code

* refactor: improve variable names for checkbox position

* chore: fix line wrapping indentation

* refactor: don't store checkbox wrapper objects on blocks
* fix: reenable the vertical separator field

* refactor: clean up field_vertical_separator.js
gonfunko and others added 28 commits October 15, 2024 13:56
* chore: add Typescript dependencies

* chore: add tsconfig.json

* chore: update webpack.config.js for TS compatibility

* chore: convert index.js to TS
BREAKING CHANGE: scratch-blocks is no longer a divergent fork of
Blockly, and instead depends on Blockly as a regular node_modules
dependency.

Thanks, @gonfunko and everyone else at Google who helped with this
effort!
# [2.0.0-spork.1](v1.1.86...v2.0.0-spork.1) (2024-10-21)

### Bug Fixes

* Add support for flyout labels with status indicators ([#212](#212)) ([665d196](665d196))
* add support for Scratch-style block comments ([#83](#83)) ([8902091](8902091))
* add support for Scratch-style procedures ([#39](#39)) ([13647eb](13647eb))
* add zoom controls config ([#126](#126)) ([a09ae24](a09ae24))
* allow focusing fields in the flyout on mobile ([#184](#184)) ([6c9d3a6](6c9d3a6))
* allow specifying the function to be used for prompting about variable creation/edits ([#106](#106)) ([4cfe66f](4cfe66f))
* clean up data block definitions ([#90](#90)) ([9ea96e2](9ea96e2))
* correctly align extension block icons ([#182](#182)) ([e3dbad1](e3dbad1))
* delete context menu to display the correct number of blocks ([#127](#127)) ([a65d24a](a65d24a))
* **deps:** after installing deps, replace Blockly v11 with v12 RC ([677ff6f](677ff6f))
* **deps:** clone Blockly RC over HTTP instead of SSH ([8a861f0](8a861f0))
* display icons in the toolbox for extension categories ([#47](#47)) ([b53eadd](b53eadd))
* don't hide the drag surface ([#38](#38)) ([7f70f09](7f70f09))
* don't include Blockly RC source in npm package ([21b15d1](21b15d1))
* don't show global/local options when renaming a variable ([#123](#123)) ([22a6b73](22a6b73))
* don't show scope options when renaming a variable from the variable getter context menu ([#139](#139)) ([375e56d](375e56d))
* don't warn about procedure references when moving the definition on the workspace ([#131](#131)) ([cda58cc](cda58cc))
* enable and style workspace comments ([#82](#82)) ([98ccb62](98ccb62))
* enable dragging arguments out of procedure blocks ([#119](#119)) ([0ca0620](0ca0620))
* Export colours. ([7c346fa](7c346fa))
* Export Scratch messages. ([09326a1](09326a1))
* fix a crash when adding a broadcast message ([#150](#150)) ([8e165ce](8e165ce))
* fix alignment of "define" text baseline on custom blocks ([#220](#220)) ([cc4d9f9](cc4d9f9))
* fix bug that caused the number/string input in the custom block editor to have square corners ([#213](#213)) ([c3ee958](c3ee958))
* fix bug that could cause duplicated procedure argument blocks to create more duplicates on drag ([#217](#217)) ([6a1c8a9](6a1c8a9))
* fix bug that prevented modal dialogs from appearing on mobile ([#183](#183)) ([37e0f10](37e0f10))
* fix bug that prevented showing the contextual menu on blocks ([#176](#176)) ([2e98ff1](2e98ff1))
* fix color of block reporter dropdown text ([#205](#205)) ([73d978e](73d978e))
* fix dropdown menu metrics ([#148](#148)) ([40eee91](40eee91))
* fix exception when editing custom blocks ([#105](#105)) ([7478546](7478546))
* fix positioning of categories when scrolling via the toolbox ([#186](#186)) ([6d14530](6d14530))
* fix styling of dropdown menus ([#152](#152)) ([0e80277](0e80277))
* fix the color of procedure argument blocks ([#216](#216)) ([88c700e](88c700e))
* fix the colors of the angle picker dropdown ([#179](#179)) ([59896d2](59896d2))
* fix the flyout width at 250 pixels ([#168](#168)) ([a47aba6](a47aba6))
* fix the styling of contextual menus ([#147](#147)) ([6fbc2e5](6fbc2e5))
* fix toolbox category selection ([#141](#141)) ([d3e1a1b](d3e1a1b))
* fix wrapping of long category labels ([#166](#166)) ([7b39ac1](7b39ac1))
* fixed bug where broadcast messages would appear in the variable dropdown list ([#124](#124)) ([b1e67f6](b1e67f6))
* hide disable and inline inputs contextual menu items ([#35](#35)) ([c548298](c548298))
* improve positioning of newly created procedure blocks ([#121](#121)) ([84a9e5b](84a9e5b))
* improve reliability of block value reporting ([#77](#77)) ([cb5b068](cb5b068))
* improve sizing and rendering of comments ([#219](#219)) ([1279c0a](1279c0a))
* load CSS and fix up UI appearance ([#33](#33)) ([1645129](1645129))
* load the continuous toolbox ([#31](#31)) ([ea68b1c](ea68b1c))
* make block images work in all contexts ([#30](#30)) ([920febf](920febf))
* make FieldNumber a subclass of FieldTextInput ([#214](#214)) ([3ae2235](3ae2235))
* make variable names case-sensitive ([#122](#122)) ([46854cd](46854cd))
* match Scratch behaviors around dragging and connection stickiness ([#80](#80)) ([fd1bc58](fd1bc58))
* miscellaneous UI fixits ([#41](#41)) ([300a1ce](300a1ce))
* modernize and reenable the colour slider field ([#42](#42)) ([4f97982](4f97982))
* more closely align flyout layout with Scratch ([#45](#45)) ([49663ed](49663ed))
* prevent deleting procedure definition blocks with references by dragging to the flyout ([#120](#120)) ([fa9367d](fa9367d))
* prevent dragging blocks into the slot occupied by the procedure definition block's example caller block ([#118](#118)) ([453ffa9](453ffa9))
* re-export scratch-blocks utility functions ([#26](#26)) ([685ecfc](685ecfc))
* readd the control blocks ([#22](#22)) ([f69d4ac](f69d4ac))
* readd the data blocks ([#29](#29)) ([fafed65](fafed65))
* readd the event blocks ([#21](#21)) ([4de530f](4de530f))
* readd the looks blocks ([#23](#23)) ([34f07c0](34f07c0))
* readd the motion blocks ([#20](#20)) ([79398c2](79398c2))
* readd the operator blocks and dependencies ([#19](#19)) ([8024e9f](8024e9f))
* readd the sensing blocks ([#27](#27)) ([9f5f135](9f5f135))
* readd the sound blocks ([#24](#24)) ([6837513](6837513))
* reenable reporting block values ([#55](#55)) ([70c8cfd](70c8cfd))
* reenable shadows for blocks being dragged ([#79](#79)) ([94d2a2c](94d2a2c))
* reenable support for checkboxes in the flyout ([#43](#43)) ([e603c67](e603c67))
* reenable support for dragging blocks between sprites ([#130](#130)) ([3d8b998](3d8b998))
* reenable the matrix field ([#49](#49)) ([aa3341b](aa3341b))
* reenable the mobile numpad field ([#54](#54)) ([003afd0](003afd0))
* reenable the note block and picker field ([#48](#48)) ([de62d77](de62d77))
* reenable the vertical separator field ([#46](#46)) ([48e931f](48e931f))
* remove canvas transition ([#129](#129)) ([ff4b115](ff4b115))
* remove underscore from a few createProcedureDefCallback calls ([#40](#40)) ([4e794f6](4e794f6))
* render the procedure definition block like Scratch ([#115](#115)) ([2a543f5](2a543f5))
* resolve error when adding the stop block to the workspace ([#56](#56)) ([f3e059c](f3e059c))
* resolve various UI issues ([#117](#117)) ([4b74d5c](4b74d5c))
* select new variable blocks' monitor checkboxes after creation ([#140](#140)) ([3811d93](3811d93))
* show connection highlights for boolean inputs ([#181](#181)) ([303611a](303611a))
* show the glow only when blocks are running ([#57](#57)) ([33e9e91](33e9e91))
* show the name of the list in the list getter block context menu ([#132](#132)) ([eb839fc](eb839fc))
* update the flyout for compatibility with the new flyout API ([#209](#209)) ([7ce9991](7ce9991))
* use non-deprecated input type constants ([#78](#78)) ([1f1c859](1f1c859))
* use Scratch-style text blocks ([#37](#37)) ([6bbbdf7](6bbbdf7))
* use Scratch's FieldAngle ([#138](#138)) ([ef7911c](ef7911c))

* fix!: bump to v2.0 to reflect Blockly un-forking ([899a981](899a981))

### Features

* add a block inflater that supports recycling ([#207](#207)) ([0701679](0701679))
* add bubbles/icons for block flyout checkboxes ([#208](#208)) ([39b2162](39b2162))
* add custom Scratch variable model and creation event classes ([#86](#86)) ([2598ede](2598ede))
* clean up and export Scratch's variables.js ([#88](#88)) ([5c1acfe](5c1acfe))
* readd support for the custom Data toolbox category ([#87](#87)) ([dcfbf39](dcfbf39))
* reenable Scratch's FieldVariable subclass ([#91](#91)) ([7c891e3](7c891e3))

### Reverts

* Revert "fix: add zoom controls config (#126)" (#128) ([8e1dc14](8e1dc14)), closes [#126](#126) [#128](#128)

### BREAKING CHANGES

* scratch-blocks is no longer a divergent fork of
Blockly, and instead depends on Blockly as a regular node_modules
dependency.

Thanks, @gonfunko and everyone else at Google who helped with this
effort!
* chore: rename checkbox_buble.js to checkbox_bubble.ts

* refactor: convert CheckboxBubble to TS

* chore: rename status_indicator_label.js to status_indicator_label.ts

* refactor: convert StatusIndicatorLabel to Typescript

* chore: rename status_indicator_label_flyout_inflater.js to status_indicator_label_flyout_inflater.ts

* refactor: convert StatusIndicatorLabelFlyoutInflater to TS

* chore: rename recyclable_block_flyout_inflater.js to recyclable_block_flyout_inflater.ts

* refactor: convert RecyclableBlockFlyoutInflater to TS

* chore: rename procedures.js to procedures.ts

* refactor: modernize and convert procedures.ts to Typescript

* chore: rename variables.js to variables.ts

* refactor: convert variables.ts to Typescript

* refactor: modernize variables.ts

* chore: rename shadows.js to shadows.ts

* refactor: convert shadows.ts to Typescript

* chore: rename scratch_variable_model.js to scratch_variable_model.ts

* refactor: convert ScratchVariableModel to Typescript

* chore: rename scratch_variable_map.js to scratch_variable_map.ts

* refactor: convert ScratchVariableMap to Typescript

* chore: rename scratch_dragger.js to scratch_dragger.ts

* refactor: convert ScratchDragger to Typescript

* chore: add TSDoc to ScratchDragger

* chore: rename scratch_continuous_toolbox.js to scratch_continuous_toolbox.ts

* refactor: convert ScratchContinuousToolbox to Typescript

* chore: rename scratch_continuous_category.js to scratch_continuous_category.ts

* refactor: convert ScratchContinuousCategory to Typescript

* chore: rename scratch_connection_checker.js to scratch_connection_checker.ts

* refactor: convert ScratchConnectionChecker to Typescript

* chore: rename scratch_comment_icon.js to scratch_comment_icon.ts

* refactor: convert ScratchCommentIcon to Typescript

* chore: rename data_category.js to data_category.ts

* refactor: convert data_category.ts to Typescript

* refactor: modernize data_category.ts

* chore: rename scratch_block_paster.js to scratch_block_paster.ts

* refactor: convert ScratchBlockPaster to Typescript

* chore: rename glows.js to glows.ts

* refactor: convert glows.ts to Typescript

* chore: rename flyout_checkbox_icon.js to flyout_checkbox_icon.ts

* refactor: convert FlyoutCheckboxIcon to Typescript

* refactor: convert css.js to Typescript

* chore: rename context_menu_items.js to context_menu_items.ts

* refactor: convert context_menu_items.ts to Typescript

* refactor: convert constants.js to Typescript

* chore: add license to constants.ts

* refactor: convert colours.js to Typescript

* chore: remove the unneded categories.js

* chore: rename block_reporting.js to block_reporting.ts

* refactor: convert block_reporting.ts to Typescript

* chore: rename colour.js to colour.ts

* refactor: convert colour.ts to Typescript

* refactor: convert control.js to Typescript

* refactor: convert event.js to Typescript

* refactor: convert looks.js to Typescript

* refactor: convert math.js to Typescript

* refactor: convert matrix.js to Typescript

* refactor: convert motion.js to Typescript

* refactor: convert note.js to Typescript

* refactor: convert operators.js to Typescript

* refactor: convert sensing.js to Typescript

* refactor: convert sound.js to Typescript

* refactor: convert text.js to Typescript

* chore: rename data.js to data.ts

* refactor: convert data.ts to Typescript

* chore: rename procedures.js to procedures.ts

* refactor: convert procedures.ts to Typescript

* refactor: modernize procedures.ts

* chore: rename vertical_extensions.js to vertical_extensions.ts

* refactor: convert vertical_extensions.ts to Typescript

* chore: rename field_angle.js to scratch_field_angle.ts

* refactor: convert ScratchFieldAngle to Typescript

* refactor: clean up ScratchFieldAngle

* refactor: add typings for `this` to block definitions

* chore: rename field_variable.js to scratch_field_variable.ts

* refactor: convert ScratchFieldVariable to Typescript

* chore: rename field_vertical_separator.js to field_vertical_separator.ts

* refactor: convert FieldVerticalSeparator to Typescript

* chore: rename field_variable_getter.js to field_variable_getter.ts

* refactor: convert FieldVariableGetter to Typescript

* chore: rename field_textinput_removable.js to field_textinput_removable.ts

* refactor: convert FieldTextInputRemovable to Typescript

* chore: rename field_number.js to scratch_field_number.ts

* refactor: convert ScratchFieldNumber to Typescript

* chore: rename field_note.js to field_note.ts

* refactor: convert FieldNote to Typescript

* chore: rename field_matrix.js to field_matrix.ts

* refactor: convert FieldMatrix to Typescript

* chore: rename field_dropdown.js to scratch_field_dropdown.ts

* refactor: convert ScratchFieldDropdown to Typescript

* chore: rename field_colour_slider.js to field_colour_slider.ts

* refactor: convert FieldColourSlider to Typescript

* chore: rename events_block_comment_base.js to events_block_comment_base.ts

* refactor: convert BlockCommentBase to Typescript

* chore: rename events_block_comment_change.js to events_block_comment_change.ts

* refactor: convert BlockCommentChange to Typescript

* chore: rename events_block_comment_collapse.js to events_block_comment_collapse.ts

* refactor: convert BlockCommentCollapse to Typescript

* chore: rename events_block_comment_create.js to events_block_comment_create.ts

* refactor: convert BlockCommentCreate to Typescript

* chore: rename events_block_comment_delete.js to events_block_comment_delete.ts

* refactor: convert BlockCommentDelete to Typescript

* chore: rename events_block_comment_move.js to events_block_comment_move.ts

* refactor: convert BlockCommentMove to Typescript

* chore: rename events_block_comment_resize.js to events_block_comment_resize.ts

* refactor: convert BlockCommentResize to Typescript

* chore: rename events_block_drag_end.js to events_block_drag_end.ts

* refactor: convert BlockDragEnd to Typescript

* chore: rename events_block_drag_outside.js to events_block_drag_outside.ts

* refactor: convert BlockDragOutside to Typescript

* chore: rename events_scratch_variable_create.js to events_scratch_variable_create.ts

* refactor: convert ScratchVariableCreate to Typescript

* chore: rename bowler_hat.js to bowler_hat.ts

* refactor: convert BowlerHat to Typescript

* chore: rename constants.js to constants.ts

* refactor: convert ConstantProvider to Typescript

* chore: rename drawer.js to drawer.ts

* refactor: convert Drawer to Typescript

* chore: rename path_object.js to path_object.ts

* refactor: convert PathObject to Typescript

* chore: rename render_info.js to render_info.ts

* refactor: convert RenderInfo to Typescript

* chore: rename renderer.js to renderer.ts

* refactor: convert Renderer to Typescript

* chore: rename scratch_blocks_utils.js to scratch_blocks_utils.ts

* refactor: remove unused functions

* refactor: convert scratch_blocks_utils.ts to Typescript
# [2.0.0-spork.2](v2.0.0-spork.1...v2.0.0-spork.2) (2024-12-10)

### Bug Fixes

* **deps:** use Blockly 12 beta instead of RC ([92a8a01](92a8a01))
# [2.0.0-spork.3](v2.0.0-spork.2...v2.0.0-spork.3) (2024-12-10)

### Bug Fixes

* rename mouseDownWrapper fields for Blockly v12 compatibility ([adaf531](adaf531))
…oolbox (#226)

* refactor: update codebase for new version of Blockly and continuous toolbox

* chore: update deps to reference new versions of Blockly and continuous toolbox

* chore: rename checkable_continuous_flyout.js to checkable_continuous_flyout.ts

* refactor: convert CheckableContinuousFlyout to typescript

* chore: remove debugging

* fix: fix support for status indicator labels
# [2.0.0-spork.4](v2.0.0-spork.3...v2.0.0-spork.4) (2025-02-11)

### Bug Fixes

* new beta release for better Blockly v12 beta compatibility ([127ac8b](127ac8b))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants