Commit Graph

3894 Commits

Author SHA1 Message Date
Beka Westberg 9909055a40 readd goog.module.get calls 2022-07-25 18:25:30 +00:00
Beka Westberg f85304f0ae chore: use import type where possible (#6279)
* chore: automatically change imports to import types

* chore: revert changes that actually need to be imports

* chore: format

* chore: add more import type statements based on importsNotUsedAsValues

* chore: fix tsconfig

* chore: add link to compiler issue
2022-07-20 08:11:17 -07:00
Christopher Allen 6f90c85a17 refactor: Migrate blockly.js to TypeScript (#6261)
* chore: Apply changes to blockly.js to blockly.ts

* fix: Build using core/blockly.ts instead of .js

  Compiles and runs in compressed mode correctly!
2022-07-06 21:55:47 +01:00
Christopher Allen d6a866db53 Merge branch 'develop' into ts/migration
Merge performed using the command

    git merge -X rename-threshold=5% develop

to ensure that all renames were successfully detected.
2022-07-05 18:27:05 +01:00
Christopher Allen aaafbc2b6f fix!: Move backwards-compatibility hacks to main.js (#6260)
* fix!: Move backwards-compatibility hacks out of blockly.js

  Move accessor properties for Blockly.alert, .confirm,
  .mainWorkspace, .prompt, .selected, .HSV_SATURATION and
  .HSV_VALUE, as well as the hack to allow loading of messages
  via <script> tags, from core/blockly.js to core/main.js,
  which becomes the entrypoint for the first chunk when
  compiled.

  BREAKING CHANGE: The aforementioned properties / hack are no
  longer available in uncompiled mode (or when using advanced
  compilation, unless also compiling against main.js.)

* fix!: Move backwards-compatibility hacks out of contextmenu.js

  Move accessor property for ContextMenu.currentBlock from
  core/contextmenu.js to core/main.js.

* chore: Update deprecation date for Generator.variableDB_ accessors

  Bring the deprecation date forward from May 2026 to September 2022.

  Not technically a breaking change—just a warning that there will
  be a breaking change earlier than previously advertised.

* fix!: Move backwards-compatibility hacks out of tooltip.js

  Move accessor properties for Blockly.Tooltip.visible and .DIV
  from core/tooltip.js to core/main.js.

* fix!: Move backwards-compatibility hacks out of widgetdiv.js

  Move accessor property for Blockly.WidgetDiv.DIV
  from core/widgetdiv.js to core/main.js.
2022-07-05 16:27:16 +01:00
Beka Westberg d7fe91cd42 fix: renamed protected parameter properties (#6252)
* fix: bad protected parameter properties

* chore:format

* fix: gesture constructor

* fix: overridden properties that were renamed
2022-06-30 12:46:21 -07:00
Beka Westberg 3e15a08228 fix: properly export interfaces that were typedefs (#6250)
* fix: properly export interfaces that were typedefs

* fix: allowCollsion -> allowCollision

* fix: convert unconverted enums

* fix: enums that were/are instance properties

* fix: revert changes to property enums
2022-06-30 12:46:05 -07:00
Christopher Allen f947b3f4f6 refactor!: Remove remaining use of goog.module.declareLegacyNamespace. (#6254)
* fix(build): Minor corrections to build_tasks.js

  - Use TSC_OUTPUT_DIR to find goog/goog.js when suppressing warnings.
  - Remove unnecessary trailing semicolons.

* refactor(blocks): Remove declareLegacyNamespace

  Remove the call to goog.module.declareLegacyNamespace from
  Blockly.libraryBlocks.  This entails:

  - Changes to the UMD wrapper to be able to find the exports object.
  - Changes to tests/bootstrap_helper.js to save the exports object
    in the libraryBlocks global variable.
  - As a precaution, renaming the tests/compile/test_blocks.js module
    so that goog.provide does not touch Blockly or
    Blockly.libraryBlocks, which may not exist / be writable.

  * feat(build): Add support named exports from chunks

  We need to convert the generators to named exports.  For backwards
  compatibility we still want e.g. Blockly.JavaScript to point at
  the generator object when the chunk is loaded using a script tag.

  Modify chunkWrapper to honour a .reexportOnly property in the
  chunks table and generate suitable additional code in the UMD
  wrapper.

* refactor(generators): Migrate JavaScript generator to named export

  - Export the JavaScript generator object as javascriptGenerator
    from the Blockly.JavaScript module(generators/javascript.js).

  - Modify the Blockly.JavaScript.all module
    (generators/javascript/all.js) to reexport the exports from
    Blockly.JavaScript.

  - Update chunk configuration so the generator object remains
    available as Blockly.JavaScript when loading
    javascript_compressed.js via a <script> tag.

    (N.B. it is otherwise necessary to destructure the require
    / import.)

  - Modify bootstrap_helper.js to store that export as
    window.javascriptGenerator for use in test code.

  - Modify test code to use javascriptGenerator instead of
    Blockly.JavaScript.

  - Modify .eslintrc.json so that javascriptGenerator is allowed
    as a global in test/.  (Also restrict use of Blockly global
    to test/.)

  N.B. that demo code in demos/code/code.js uses <script> tag
  loading and so will continue to access Blockly.JavaScript.

* refactor(generators): Migrate Lua generator to named export

* refactor(generators): Migrate PHP generator to named export

* refactor(generators): Migrate Python generator to named export

* refactor(generators): Remove declareLegacyNamespace calls

  Remove the goog.module.declareLegacyNamespace calls from the
  generators.

  This turns out to have the unexpected side-effect of causing the
  compiler to rename the core/blockly.js exports object from
  $.Blockly to just Blockly in blockly_compressed.js - presumably
  because it no longer needs to be accessed in any subsequent chunk
  because they no longer add properties to it.  This requires
  some changes (mainly simplification) to the chunkWrapper function
  in build_tasks.js.

* refactor(core): Remove declareLegacyNamespace from blockly.js

  So easy to do _now_: just need to:

  - Make sure the UMD wrapper for the first chunk knows where the
    exports object is.
  - Use that same value to set the Blockly.VERSION @define.
  - Have bootstrap_helper.js set window.Blockly to the exports
    object.
  - Fix tests/compile/test_blocks.js to not assume a Blockly
    global variable, by converting it to a goog.module so we
    can use a named require.
2022-06-30 19:53:32 +01:00
Beka Westberg 7eb56ea715 fix: remaining enums that weren't properly exported (#6251)
* fix: remaining enums that weren't properly exported

* chore: format

* fix: add enum value exports

* chore: format
2022-06-29 09:18:29 -07:00
Christopher Allen 9eeb4fea0b fix: Correct enum formatting, use merged namespaces for types that are class static members (#6246)
* fix: formatting of enum KeyCodes

* fix: Use merged namespace for ContextMenuRegistry static types

  - Create a namespace to be merged with the ContextMenuRegistry
    class containing the types that were formerly declared as static
    properties on that class.

  - Use type aliases to export them individually as well, for
    compatibility with the changes made by MigranTS (and/or
    @gonfunko) to how other modules in core/ now import these
    types.

  - Update renamings.json5 to reflect the availability of the
    direct exports for modules that import this module directly
    (though they are not available to, and will not be used by,
    code that imports only via blockly.js/blockly.ts.)

* fix: Use merged namespace for Input.Align

  - Create a merged namespace for the Input.Align enum.

  - Use type/const aliases to export it as Input too.

  - Update renamings.json5 to reflect the availability of the
    direct export.

* fix: Use merged namespace for Names.NameType

  - Create a merged namespace for the Names.NameType enum.

  - Use type/const aliases to export it as NameType too.

  - Update renamings.json5 to reflect the availability of the
    direct export.  (This ought to have happened in an earlier
    version as it was already available by both routes.)

* chore: Fix minor issues for PR #6246

  - Use `Align` instead of `Input.Align` where possible.

* fix(build): Suppress irrelevant JSC_UNUSED_LOCAL_ASSIGNMENT errors

  tsc generates code for merged namespaces that looks like:

      (function (ClassName) {
          let EnumName;
          (function (EnumName) {
              EnumName[EnumNameAlign["v1"] = 0] = "v1";
              // etc.
          })(EnumName = ClassName.EnumName || (ClassName.EnumName = {}));
      })(ClassName || (ClassName = {}));

  and Closure Compiler complains about the fact that the EnumName let
  binding is initialised but never used.  (It exists so that any other
  code that was in the namespace could see the enum.)

  Suppress this message, since it is not actionable and lint and/or tsc
  should tell us if we have actual unused variables in our .ts files.
2022-06-29 12:14:34 +01:00
Beka Westberg 8a467d730a chore: move comments back to their correct positions (#6249)
* fix: work on fixing comments

* chore: finish moving all comments

* chore: format

* chore: move some other messed up comments

* chore: format
2022-06-28 14:13:18 -07:00
Beka Westberg 29e1f0cb03 fix: tsc errors picked up from develop (#6224)
* fix: relative path for deprecation utils

* fix: checking if properties exist in svg_math

* fix: set all timeout PIDs to AnyDuringMigration

* fix: make nullability errors explicity in block drag surface

* fix: make null check in events_block_change explicit

* fix: make getEventWorkspace_ internal so we can access it from CommentCreateDeleteHelper

* fix: rename DIV -> containerDiv in tooltip

* fix: ignore backwards compat check in category

* fix: set block styles to AnyDuringMigration

* fix: type typo in KeyboardShortcut

* fix: constants name in row measurables

* fix: typecast in mutator

* fix: populateProcedures type of flattened array

* fix: ignore errors related to workspace comment deserialization

* chore: format files

* fix: renaming imports missing file extensions

* fix: remove check for sound.play

* fix: temporarily remove bad requireType.

All `export type` statements are stripped when tsc is run. This means
that when we attempt to require BlockDefinition from the block files, we
get an error because it does not exist.

We decided to temporarily remove the require, because this will no
longer be a problem when we conver the blocks to typescript, and
everything gets compiled together.

* fix: bad jsdoc in array

* fix: silence missing property errors

Closure was complaining about inexistant properties, but they actually
do exist, they're just not being transpiled by tsc in a way that closure
understands.

I.E. if things are initialized in a function called by the constructor,
rather than in a class field or in the custructor itself, closure would
error.

It would also error on enums, because they are transpiled to a weird
IIFE.

* fix: context menu action handler not knowing the type of this.

this: TypeX information gets stripped when tsc is run, so closure could
not know that this was not global. Fixed this by reorganizing to use the
option object directly instead of passing it to onAction to be bound to
this.

* fix: readd getDeveloperVars checks (should not be part of migration)

This was found because ALL_DEVELOPER_VARS_WARNINGS_BY_BLOCK_TYPE was no
longer being accessed.

* fix: silence closure errors about overriding supertype props

We propertly define the overrides in typescript, but these get removed
from the compiled output, so closure doesn't know they exist.

* fix: silence globalThis errors

this: TypeX annotations get stripped from the compiled output, so
closure can't know that we're accessing the correct things. However,
typescript makes sure that this always has the correct properties, so
silencing this should be fine.

* fix: bad jsdoc name

* chore: attempt compiling with blockly.js

* fix: attempt moving the import statement above the namespace line

* chore: add todo comments to block def files

* chore: remove todo from context menu

* chore: add comments abotu disabled errors
2022-06-27 09:25:56 -07:00
Beka Westberg 362ec011ce fix: re-add @package annotations as @internal annotations (#6232)
* fix: add ~70% of internal attributes

* fix: work on manually adding more @internal annotations

* fix: add more manual internal annotations

* fix: rename package typos to internal

* fix: final manual fixes for internal annotations

* chore: format

* chore: make unnecessary multiline jsdoc a single line

* fix: fix internal tags in serialization exceptions
2022-06-27 08:00:44 -07:00
Christopher Allen b0475b0c68 chore: Fix whitespace (#6243)
* fix: Remove spurious blank lines

  Remove extraneous blank lines introduced by deletion of
  'use strict'; pragmas.

  Also fix the location of the goog.declareModuleId call in
  core/utils/array.ts.

* fix: Add missing double-blank-line before body of modules

  Our convention is to have two blank lines between the imports (or
  module ID, if there are no imports) and the beginning of the body
  of the module.  Enforce this.

* fix: one addition format error for PR #6243
2022-06-24 19:33:39 +01:00
Christopher Allen d63670662b fix: Add missing import goog statements (#6240)
I've added the import statement immediately before the
goog.declareModuleId calls that depend on it.

There is an argument to be made that we should put the import
statement in their normal place amongst any other imports, and
move the declareModuleId statement to below the double blank
line below the imports, but as these are so tightly coupled,
replace the previous goog.module calls, and will both be deleted
at the same time once the transition to TypeScript is fully complete
I think it's fine (and certainly much easier) to do it this way.
2022-06-24 16:17:49 +01:00
Neil Fraser 161437388a chore: add declareModuleId (#6238) 2022-06-23 15:07:47 -07:00
Thomas Wehr 9797943938 fix: Theme.name does not match registered name (#6186) (#6226)
* fix: Theme.name does not match registered name (#6186)

* chore(tests): add test for defineTheme normalizing to lower case
2022-06-23 13:24:11 -07:00
Neil Fraser 889728a96a chore: Restore @fileoverview comment locations (#6237) 2022-06-23 11:43:34 -07:00
Beka Westberg 3ea312a4b6 chore: format 2022-06-17 19:53:57 +00:00
Beka Westberg cec2e80d04 fix: add alias for AnyDuringMigration so that tsc will run 2022-06-17 19:50:38 +00:00
Beka Westberg f001bfc507 fix: convert files to typescript 2022-06-17 16:45:17 +00:00
Beka Westberg bdcb2465dd fix: rename all JS files to TS files 2022-06-17 16:45:17 +00:00
Christopher Allen 4070ffc419 feat(build): Support TypeScript in core/ (#6220)
* fix(tests): Use tsc-compiled base.js to allow use of goog.js

The Closure Compiler complains if you try to feed it a file named
goog.js which is not in the same directory as the Closure Library's
base.js.  Since tsc will "compile" goog.js when it encounters an
"import ... from '.../goog.js'", it is necessary to also have tsc
"compile" base.js and base_minimal.js, so they will come from the
same directory.  This necessitates some updates to paths in

* docs(build): JSDoc update for JSCOMP_WARNING

* refactor(utils): Convert utils/deprecation.js to TypeScript

This was done manually for test/proving purposes and might need to
be corrected based on what MigranTS generated.

* chore(utils): Update utils/deprecation.ts from MigranTS output

This manually applies certain changes from BeksOmega's ts/migration2
branch, but notably:

- I did not apply the reordering of the doc comments at the top.
- I applied the deletion of types and @package from the JSDoc.
- I preserved the import goog and goog.declareModuleId lines.
- I have applied a whitespace change on line 37 which violates the
  styleguide; I want to figure out why clang-format is not fixing
  this.

* feat(build): clang-format .ts files

And fix formatting issues introduced by MigranTS in deprecation.ts.

* fix(build): Fix sources for advanced compilation test

I'm not sure why this didn't fail on my local machine previously;
perhaps it succeeded only because of leftover files and would have
failed if I'd run npm run clean.

* fix(build): Disable checkTypes diagnostic group

Unfortunately TSC doesn't output type information in a form
that Closure Compiler can understand, so the latter raises errors
for situations like omitting an optional parameter.

We may have to turn off more diagnostics in future, but for now
this is sufficient.

* chore(utils): Use @internal where we previously used @package

Per comments on PR #6220.

This requires that we disable the nonStandardJsDocs diagnostic.
2022-06-16 10:49:24 -07:00
Alex Zauzolkov 16b5ccd2ea fix: Check for empty array in thrasos.RenderInfo.addElemSpacing_ (#6211)
* fix: Check for undefined value in InputRow.measure

* Revert "fix: Check for undefined value in InputRow.measure"

This reverts commit f2e57c06ad.

* fix: thrasos: don't push elements if array is empty

- Use same array length check as geras renderer does
2022-06-15 09:06:41 -07:00
gregdyke 0afff23d49 fix: json serialize lists_getIndex with json extraState (#6136) (#6170)
* fix: json serialize lists_getIndex with json extraState (#6136)

* address review comments

* fix: move block tests to mocha/block folder
2022-05-24 19:12:03 -07:00
alschmiedt adb5ad1f3f feat: creates a new way to add shortcut key mappings (#6122) 2022-05-13 10:43:20 -07:00
Christopher Allen debdcb9907 fix!(xml): Make appendDomToWorkspace take only WorkspaceSvg (#6162)
Turns out if one runs tsc on files in core/, the output will
cause Closure Compiler to detect type errors that were not detected
previously, despite apparently only whitespace changes between tsc's
input and output.

In this case, it detects that you can't call .getBlocksBoundingBox
on a Workspace object.

appendDomToWorkspace rearranges blocks on the workspace and is
only relevant to rendered workspaces. If you use this function in
headless mode, switch to using domToWorkspace instead.

BREAKING CHANGE: have appendDomToWorkspace take a WorkspaceSvg instead
of a Workspace as its second parameter.
2022-05-13 15:00:52 +01:00
Beka Westberg 91b570ace5 fix: add timeouts to delay expensive mutation operations (#6149)
* fix: add timeouts to delay expensive operations

* fix: format
2022-05-11 19:07:01 -07:00
Rodrigo Quelhas df8349c670 fix: reuse the 'bumpObjects' module in inject.js (#6121) 2022-05-06 08:32:47 -07:00
Thomas Wehr df41c234b7 fix: replace object.mixin with Object.assign (#6138)
* fix: replace `object.mixin` with `Object.assign`

* fix: deprecate `object.mixin`
2022-05-04 14:55:29 -07:00
Beka Westberg 71e8356727 fix: Increases the speed of deleting blocks (#6128)
* fix: remove forced layout (~5ms)

* fix: remove other use of getBBox for block

* fix: Use Math.round rather than toFixed(0)
2022-04-29 09:12:38 -07:00
Neil Fraser b7cd2e187b chore: Remove Blockly.utils.global (#6120)
The Closure Compiler creates globalThis as a pollyfill.
2022-04-28 12:39:52 -07:00
Neil Fraser 63ca83b545 chore: Make startsWith faster (#6118)
by using built-in function (polyfill will handle IE).
2022-04-27 15:25:07 -07:00
Neil Fraser b1bb5c53b8 chore: Reduce number of calls to getAttribute (#6119)
* Reduce number of calls to getAttribute

~1% speedup.

* Improve comment.
2022-04-27 13:18:25 -07:00
Rachel Fenichel daf78af13e fix!: fix or silence type errors (#6105)
* fix: add isBlockCreatable to IFlyout interface

* fix: add getClickTarget to IToolboxItem interface

* fix: fix some types in zelos renderer

* fix: add scrollToStart to IFlyout interface

* fix: add setVisible_ to IToolboxItem

* fix: use instanceof check for workspace comments in gesture code

* fix: data stored on the DOM for tooltips

* fix: use blockSvg to access icons

* fix: add instanceof check in shortcut_items.js

* fix: suppress warning about onKeyDown in tolbox

* fix: add instanceof check in workspace_svg

* fix: don't use dot accessor to avoid type problem

* fix: silence type errors in ast_node.js
2022-04-22 15:55:55 -07:00
Rachel Fenichel 172a8ce212 fix: component id should be on the prototype (#6104) 2022-04-22 11:22:35 -07:00
Rachel Fenichel 619ee66b23 fix: add compose and decompose to block (#6102) 2022-04-22 09:43:07 -07:00
Rachel Fenichel 7c7cfbea63 fix: improve types in touch code (#6099) 2022-04-21 15:53:45 -07:00
Tobias Weinert 5240301611 fix: dragging fails for collapsed blocks with Icons, which have been … (#6081)
* fix: 6076 "dragging fails" improved

* fix: "dragging fails (bug #6076)" tested version

* fix: "dragging fails (bug google#6076)" moved fix-code after L625
2022-04-21 14:01:11 -07:00
Aaron Dodson 29b6b878dc fix: Silence Closure errors when modifying tooltips. (#6098) 2022-04-21 13:22:21 -07:00
Rachel Fenichel 7353c61b2b fix: type error in uneditable bubbles (#6092) 2022-04-20 11:20:12 -07:00
Aaron Dodson edc2a5cd0c fix: Fix compilation errors under Closure's strict mode (#6073)
* fix: Fix errors under strict compilation.

* fix: Fix tests that referenced properties converted to data attributes.

* fix: Incorporate feedback on resolving compiler errors.

* refactor: Revert changes to skew and translate attributes.

* refactor: Introduce LegacyContextMenuOption type to correspond to documented fields.

* refactor: Introduce PathLeftShape and PathDownShape vs casting to PuzzleTab/Notch.

* chore: Added nullability modifiers to type annotations.

* refactor: Export FlyoutItem directly.

* chore: clang-format renderers/zelos/drawer.js.
2022-04-19 14:17:17 -07:00
Neil Fraser a202558950 feat: Add margin around zoomToFit (#6042)
* Add margin around zoomToFit

* Change configurable property to fixed constant.

* VS Code keeps indenting stuff for no reason.
2022-04-06 17:22:26 -07:00
Maribeth Bottorff 55cae6ec85 fix: update extraState property in serializer typedefs (#6057)
* fix: add quotes to serializer typedefs

* fix: update typedef

Co-authored-by: Beka Westberg <bwestberg@google.com>

* fix: update typedef

Co-authored-by: Beka Westberg <bwestberg@google.com>

Co-authored-by: Beka Westberg <bwestberg@google.com>
2022-03-31 17:35:37 -07:00
Beka Westberg c4a25eb3c4 fix: revert "Delete events should animate when played (#5919)" (#6031)
* Revert "Delete events should animate when played (#5919)"

This reverts commit bce4c5e2c6.

* fix: lint in screenshot
2022-03-29 11:47:50 -07:00
Aaron Dodson 2cf8eb87dc fix: Fix bug where workspace comments could not be created. (#6024) 2022-03-28 15:56:30 -07:00
Maribeth Bottorff 2c15d002ab fix: export Blockly.Names.NameType and Blockly.Input.Align correctly (#6030)
* fix: make NameType available externally

* fix: export Input.Align
2022-03-24 15:05:38 -07:00
alschmiedt 243fc52a96 fix: opening/closing the mutators (#6000) 2022-03-21 08:43:46 -07:00
YAMADA Yutaka 85ce3b82c6 fix: comments not being restored when dragging (#6011)
* fix comment deserialization

* add restore comment test

* Fix comment.

* fix: Modify test structure.
2022-03-21 07:51:51 -07:00
Aaron Dodson 1647a3299a fix: Move @alias onto classes instead of constructors (#6003)
* fix: Move @alias onto classes instead of constructors

* fix: Fix JSDoc for constructors.
2022-03-16 15:48:32 -07:00