blockly 7.20211209.4 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/blockly.d.ts +18963 -18432
  2. package/blockly.min.js +5 -4
  3. package/blockly_compressed.js +4 -3
  4. package/blockly_compressed.js.map +1 -1
  5. package/blocks/blocks.js +47 -0
  6. package/blocks/colour.js +13 -3
  7. package/blocks/lists.js +22 -13
  8. package/blocks/logic.js +13 -3
  9. package/blocks/loops.js +24 -11
  10. package/blocks/math.js +12 -3
  11. package/blocks/procedures.js +45 -32
  12. package/blocks/text.js +22 -13
  13. package/blocks/variables.js +14 -3
  14. package/blocks/variables_dynamic.js +13 -3
  15. package/blocks_compressed.js +1 -1
  16. package/blocks_compressed.js.map +1 -1
  17. package/core/block.js +1869 -1814
  18. package/core/block_drag_surface.js +201 -200
  19. package/core/block_dragger.js +377 -373
  20. package/core/block_svg.js +1593 -1479
  21. package/core/blockly.js +8 -22
  22. package/core/blocks.js +9 -2
  23. package/core/browser_events.js +22 -5
  24. package/core/bubble.js +841 -797
  25. package/core/bubble_dragger.js +213 -206
  26. package/core/bump_objects.js +2 -2
  27. package/core/clipboard.js +9 -9
  28. package/core/comment.js +353 -332
  29. package/core/common.js +46 -17
  30. package/core/component_manager.js +181 -174
  31. package/core/config.js +87 -0
  32. package/core/connection.js +595 -584
  33. package/core/connection_checker.js +242 -244
  34. package/core/connection_db.js +235 -230
  35. package/core/contextmenu.js +9 -6
  36. package/core/contextmenu_items.js +1 -2
  37. package/core/contextmenu_registry.js +93 -89
  38. package/core/css.js +474 -474
  39. package/core/delete_area.js +45 -42
  40. package/core/drag_target.js +57 -56
  41. package/core/dropdowndiv.js +153 -163
  42. package/core/events/events.js +2 -2
  43. package/core/events/events_abstract.js +89 -77
  44. package/core/events/events_block_base.js +37 -36
  45. package/core/events/events_block_change.js +130 -124
  46. package/core/events/events_block_create.js +73 -71
  47. package/core/events/events_block_delete.js +84 -82
  48. package/core/events/events_block_drag.js +50 -49
  49. package/core/events/events_block_move.js +147 -140
  50. package/core/events/events_bubble_open.js +51 -50
  51. package/core/events/events_click.js +48 -44
  52. package/core/events/events_comment_base.js +72 -69
  53. package/core/events/events_comment_change.js +63 -61
  54. package/core/events/events_comment_create.js +44 -42
  55. package/core/events/events_comment_delete.js +42 -40
  56. package/core/events/events_comment_move.js +106 -104
  57. package/core/events/events_marker_move.js +65 -64
  58. package/core/events/events_selected.js +46 -45
  59. package/core/events/events_theme_change.js +36 -35
  60. package/core/events/events_toolbox_item_select.js +46 -45
  61. package/core/events/events_trashcan_open.js +37 -36
  62. package/core/events/events_ui.js +47 -46
  63. package/core/events/events_ui_base.js +30 -29
  64. package/core/events/events_var_base.js +37 -36
  65. package/core/events/events_var_create.js +50 -48
  66. package/core/events/events_var_delete.js +50 -48
  67. package/core/events/events_var_rename.js +51 -49
  68. package/core/events/events_viewport.js +66 -65
  69. package/core/events/utils.js +29 -14
  70. package/core/events/workspace_events.js +49 -55
  71. package/core/extensions.js +4 -3
  72. package/core/field.js +1061 -997
  73. package/core/field_angle.js +462 -442
  74. package/core/field_checkbox.js +194 -182
  75. package/core/field_colour.js +519 -505
  76. package/core/field_dropdown.js +617 -598
  77. package/core/field_image.js +229 -220
  78. package/core/field_label.js +102 -91
  79. package/core/field_label_serializable.js +42 -41
  80. package/core/field_multilineinput.js +372 -358
  81. package/core/field_number.js +272 -253
  82. package/core/field_textinput.js +499 -467
  83. package/core/field_variable.js +458 -420
  84. package/core/flyout_base.js +1005 -952
  85. package/core/flyout_button.js +277 -260
  86. package/core/flyout_horizontal.js +304 -302
  87. package/core/flyout_metrics_manager.js +64 -64
  88. package/core/flyout_vertical.js +306 -300
  89. package/core/generator.js +459 -446
  90. package/core/gesture.js +829 -813
  91. package/core/grid.js +166 -163
  92. package/core/icon.js +168 -159
  93. package/core/inject.js +7 -5
  94. package/core/input.js +257 -248
  95. package/core/insertion_marker_manager.js +655 -624
  96. package/core/internal_constants.js +0 -129
  97. package/core/keyboard_nav/ast_node.js +605 -596
  98. package/core/keyboard_nav/basic_cursor.js +166 -165
  99. package/core/keyboard_nav/cursor.js +99 -97
  100. package/core/keyboard_nav/marker.js +83 -79
  101. package/core/keyboard_nav/tab_navigate_cursor.js +18 -23
  102. package/core/marker_manager.js +153 -141
  103. package/core/menu.js +377 -372
  104. package/core/menuitem.js +223 -217
  105. package/core/metrics_manager.js +403 -390
  106. package/core/mutator.js +468 -437
  107. package/core/names.js +229 -188
  108. package/core/options.js +290 -284
  109. package/core/procedures.js +29 -17
  110. package/core/registry.js +19 -16
  111. package/core/rendered_connection.js +482 -463
  112. package/core/renderers/common/block_rendering.js +9 -3
  113. package/core/renderers/common/constants.js +1119 -1112
  114. package/core/renderers/common/debug.js +14 -0
  115. package/core/renderers/common/debugger.js +338 -316
  116. package/core/renderers/common/drawer.js +380 -370
  117. package/core/renderers/common/i_path_object.js +2 -2
  118. package/core/renderers/common/info.js +626 -618
  119. package/core/renderers/common/marker_svg.js +579 -541
  120. package/core/renderers/common/path_object.js +203 -200
  121. package/core/renderers/common/renderer.js +220 -218
  122. package/core/renderers/geras/constants.js +36 -36
  123. package/core/renderers/geras/drawer.js +155 -147
  124. package/core/renderers/geras/highlight_constants.js +244 -238
  125. package/core/renderers/geras/highlighter.js +231 -179
  126. package/core/renderers/geras/info.js +392 -369
  127. package/core/renderers/geras/measurables/inline_input.js +25 -19
  128. package/core/renderers/geras/measurables/statement_input.js +23 -17
  129. package/core/renderers/geras/path_object.js +106 -121
  130. package/core/renderers/geras/renderer.js +96 -98
  131. package/core/renderers/measurables/base.js +30 -18
  132. package/core/renderers/measurables/bottom_row.js +83 -80
  133. package/core/renderers/measurables/connection.js +22 -15
  134. package/core/renderers/measurables/external_value_input.js +35 -22
  135. package/core/renderers/measurables/field.js +35 -20
  136. package/core/renderers/measurables/hat.js +18 -13
  137. package/core/renderers/measurables/icon.js +24 -17
  138. package/core/renderers/measurables/in_row_spacer.js +15 -13
  139. package/core/renderers/measurables/inline_input.js +43 -33
  140. package/core/renderers/measurables/input_connection.js +41 -28
  141. package/core/renderers/measurables/input_row.js +50 -44
  142. package/core/renderers/measurables/jagged_edge.js +14 -12
  143. package/core/renderers/measurables/next_connection.js +16 -14
  144. package/core/renderers/measurables/output_connection.js +26 -20
  145. package/core/renderers/measurables/previous_connection.js +16 -15
  146. package/core/renderers/measurables/round_corner.js +20 -18
  147. package/core/renderers/measurables/row.js +184 -168
  148. package/core/renderers/measurables/spacer_row.js +38 -23
  149. package/core/renderers/measurables/square_corner.js +18 -16
  150. package/core/renderers/measurables/statement_input.js +23 -20
  151. package/core/renderers/measurables/top_row.js +88 -85
  152. package/core/renderers/minimalist/constants.js +8 -7
  153. package/core/renderers/minimalist/drawer.js +11 -10
  154. package/core/renderers/minimalist/info.js +18 -18
  155. package/core/renderers/minimalist/renderer.js +40 -39
  156. package/core/renderers/thrasos/info.js +258 -248
  157. package/core/renderers/thrasos/renderer.js +20 -20
  158. package/core/renderers/zelos/constants.js +898 -873
  159. package/core/renderers/zelos/drawer.js +186 -169
  160. package/core/renderers/zelos/info.js +502 -479
  161. package/core/renderers/zelos/marker_svg.js +129 -115
  162. package/core/renderers/zelos/measurables/bottom_row.js +31 -30
  163. package/core/renderers/zelos/measurables/inputs.js +22 -21
  164. package/core/renderers/zelos/measurables/row_elements.js +14 -13
  165. package/core/renderers/zelos/measurables/top_row.js +34 -33
  166. package/core/renderers/zelos/path_object.js +181 -180
  167. package/core/renderers/zelos/renderer.js +91 -92
  168. package/core/scrollbar.js +759 -713
  169. package/core/scrollbar_pair.js +250 -245
  170. package/core/serialization/blocks.js +26 -10
  171. package/core/serialization/workspaces.js +3 -2
  172. package/core/shortcut_registry.js +286 -277
  173. package/core/sprites.js +31 -0
  174. package/core/theme.js +135 -141
  175. package/core/theme_manager.js +147 -143
  176. package/core/toolbox/category.js +602 -576
  177. package/core/toolbox/collapsible_category.js +226 -227
  178. package/core/toolbox/separator.js +70 -61
  179. package/core/toolbox/toolbox.js +934 -927
  180. package/core/toolbox/toolbox_item.js +115 -99
  181. package/core/tooltip.js +108 -35
  182. package/core/touch.js +8 -3
  183. package/core/touch_gesture.js +254 -251
  184. package/core/trashcan.js +606 -595
  185. package/core/utils/coordinate.js +97 -95
  186. package/core/utils/dom.js +2 -2
  187. package/core/utils/global.js +2 -0
  188. package/core/utils/rect.js +41 -37
  189. package/core/utils/sentinel.js +25 -0
  190. package/core/utils/size.js +30 -27
  191. package/core/utils/svg.js +18 -16
  192. package/core/variable_map.js +325 -341
  193. package/core/variable_model.js +55 -54
  194. package/core/variables.js +9 -2
  195. package/core/variables_dynamic.js +3 -1
  196. package/core/warning.js +126 -120
  197. package/core/widgetdiv.js +4 -4
  198. package/core/workspace.js +685 -664
  199. package/core/workspace_audio.js +124 -118
  200. package/core/workspace_comment.js +308 -298
  201. package/core/workspace_comment_svg.js +1029 -951
  202. package/core/workspace_drag_surface_svg.js +147 -140
  203. package/core/workspace_dragger.js +70 -71
  204. package/core/workspace_svg.js +2322 -2297
  205. package/core/xml.js +30 -20
  206. package/core/zoom_controls.js +431 -439
  207. package/generators/dart/colour.js +56 -64
  208. package/generators/dart/lists.js +61 -50
  209. package/generators/dart/math.js +160 -148
  210. package/generators/dart/text.js +83 -61
  211. package/generators/javascript/colour.js +37 -34
  212. package/generators/javascript/lists.js +50 -43
  213. package/generators/javascript/math.js +123 -139
  214. package/generators/javascript/text.js +67 -81
  215. package/generators/lua/colour.js +25 -23
  216. package/generators/lua/lists.js +97 -69
  217. package/generators/lua/logic.js +1 -2
  218. package/generators/lua/math.js +182 -144
  219. package/generators/lua/text.js +116 -99
  220. package/generators/php/colour.js +38 -32
  221. package/generators/php/lists.js +109 -89
  222. package/generators/php/math.js +90 -81
  223. package/generators/php/text.js +63 -61
  224. package/generators/python/colour.js +18 -18
  225. package/generators/python/lists.js +38 -30
  226. package/generators/python/loops.js +12 -8
  227. package/generators/python/math.js +104 -106
  228. package/generators/python/text.js +34 -30
  229. package/msg/smn.js +436 -0
  230. package/package.json +7 -6
  231. package/blocks/all.js +0 -23
@@ -25,21 +25,102 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
25
25
  * Class for the registry of context menu items. This is intended to be a
26
26
  * singleton. You should not create a new instance, and only access this class
27
27
  * from ContextMenuRegistry.registry.
28
- * @constructor
29
- * @private
30
28
  * @alias Blockly.ContextMenuRegistry
31
29
  */
32
- const ContextMenuRegistry = function() {
33
- // Singleton instance should be registered once.
34
- ContextMenuRegistry.registry = this;
30
+ class ContextMenuRegistry {
31
+ /**
32
+ * Resets the existing singleton instance of ContextMenuRegistry.
33
+ */
34
+ constructor() {
35
+ this.reset();
36
+ }
35
37
 
36
38
  /**
37
- * Registry of all registered RegistryItems, keyed by ID.
38
- * @type {!Object<string, !ContextMenuRegistry.RegistryItem>}
39
- * @private
39
+ * Clear and recreate the registry.
40
40
  */
41
- this.registry_ = Object.create(null);
42
- };
41
+ reset() {
42
+ /**
43
+ * Registry of all registered RegistryItems, keyed by ID.
44
+ * @type {!Object<string, !ContextMenuRegistry.RegistryItem>}
45
+ * @private
46
+ */
47
+ this.registry_ = Object.create(null);
48
+ }
49
+
50
+ /**
51
+ * Registers a RegistryItem.
52
+ * @param {!ContextMenuRegistry.RegistryItem} item Context menu item to
53
+ * register.
54
+ * @throws {Error} if an item with the given ID already exists.
55
+ */
56
+ register(item) {
57
+ if (this.registry_[item.id]) {
58
+ throw Error('Menu item with ID "' + item.id + '" is already registered.');
59
+ }
60
+ this.registry_[item.id] = item;
61
+ }
62
+
63
+ /**
64
+ * Unregisters a RegistryItem with the given ID.
65
+ * @param {string} id The ID of the RegistryItem to remove.
66
+ * @throws {Error} if an item with the given ID does not exist.
67
+ */
68
+ unregister(id) {
69
+ if (!this.registry_[id]) {
70
+ throw new Error('Menu item with ID "' + id + '" not found.');
71
+ }
72
+ delete this.registry_[id];
73
+ }
74
+
75
+ /**
76
+ * @param {string} id The ID of the RegistryItem to get.
77
+ * @return {?ContextMenuRegistry.RegistryItem} RegistryItem or null if not
78
+ * found
79
+ */
80
+ getItem(id) {
81
+ return this.registry_[id] || null;
82
+ }
83
+
84
+ /**
85
+ * Gets the valid context menu options for the given scope type (e.g. block or
86
+ * workspace) and scope. Blocks are only shown if the preconditionFn shows
87
+ * they should not be hidden.
88
+ * @param {!ContextMenuRegistry.ScopeType} scopeType Type of scope where menu
89
+ * should be shown (e.g. on a block or on a workspace)
90
+ * @param {!ContextMenuRegistry.Scope} scope Current scope of context menu
91
+ * (i.e., the exact workspace or block being clicked on)
92
+ * @return {!Array<!ContextMenuRegistry.ContextMenuOption>} the list of
93
+ * ContextMenuOptions
94
+ */
95
+ getContextMenuOptions(scopeType, scope) {
96
+ const menuOptions = [];
97
+ const registry = this.registry_;
98
+ Object.keys(registry).forEach(function(id) {
99
+ const item = registry[id];
100
+ if (scopeType === item.scopeType) {
101
+ const precondition = item.preconditionFn(scope);
102
+ if (precondition !== 'hidden') {
103
+ const displayText = typeof item.displayText === 'function' ?
104
+ item.displayText(scope) :
105
+ item.displayText;
106
+ /** @type {!ContextMenuRegistry.ContextMenuOption} */
107
+ const menuOption = {
108
+ text: displayText,
109
+ enabled: (precondition === 'enabled'),
110
+ callback: item.callback,
111
+ scope: scope,
112
+ weight: item.weight,
113
+ };
114
+ menuOptions.push(menuOption);
115
+ }
116
+ }
117
+ });
118
+ menuOptions.sort(function(a, b) {
119
+ return a.weight - b.weight;
120
+ });
121
+ return menuOptions;
122
+ }
123
+ }
43
124
 
44
125
  /**
45
126
  * Where this menu item should be rendered. If the menu item should be rendered
@@ -90,85 +171,8 @@ ContextMenuRegistry.ContextMenuOption;
90
171
  /**
91
172
  * Singleton instance of this class. All interactions with this class should be
92
173
  * done on this object.
93
- * @type {?ContextMenuRegistry}
94
- */
95
- ContextMenuRegistry.registry = null;
96
-
97
- /**
98
- * Registers a RegistryItem.
99
- * @param {!ContextMenuRegistry.RegistryItem} item Context menu item to
100
- * register.
101
- * @throws {Error} if an item with the given ID already exists.
102
- */
103
- ContextMenuRegistry.prototype.register = function(item) {
104
- if (this.registry_[item.id]) {
105
- throw Error('Menu item with ID "' + item.id + '" is already registered.');
106
- }
107
- this.registry_[item.id] = item;
108
- };
109
-
110
- /**
111
- * Unregisters a RegistryItem with the given ID.
112
- * @param {string} id The ID of the RegistryItem to remove.
113
- * @throws {Error} if an item with the given ID does not exist.
114
- */
115
- ContextMenuRegistry.prototype.unregister = function(id) {
116
- if (!this.registry_[id]) {
117
- throw new Error('Menu item with ID "' + id + '" not found.');
118
- }
119
- delete this.registry_[id];
120
- };
121
-
122
- /**
123
- * @param {string} id The ID of the RegistryItem to get.
124
- * @return {?ContextMenuRegistry.RegistryItem} RegistryItem or null if not found
174
+ * @type {!ContextMenuRegistry}
125
175
  */
126
- ContextMenuRegistry.prototype.getItem = function(id) {
127
- return this.registry_[id] || null;
128
- };
129
-
130
- /**
131
- * Gets the valid context menu options for the given scope type (e.g. block or
132
- * workspace) and scope. Blocks are only shown if the preconditionFn shows they
133
- * should not be hidden.
134
- * @param {!ContextMenuRegistry.ScopeType} scopeType Type of scope where menu
135
- * should be shown (e.g. on a block or on a workspace)
136
- * @param {!ContextMenuRegistry.Scope} scope Current scope of context menu
137
- * (i.e., the exact workspace or block being clicked on)
138
- * @return {!Array<!ContextMenuRegistry.ContextMenuOption>} the list of
139
- * ContextMenuOptions
140
- */
141
- ContextMenuRegistry.prototype.getContextMenuOptions = function(
142
- scopeType, scope) {
143
- const menuOptions = [];
144
- const registry = this.registry_;
145
- Object.keys(registry).forEach(function(id) {
146
- const item = registry[id];
147
- if (scopeType === item.scopeType) {
148
- const precondition = item.preconditionFn(scope);
149
- if (precondition !== 'hidden') {
150
- const displayText = typeof item.displayText === 'function' ?
151
- item.displayText(scope) :
152
- item.displayText;
153
- /** @type {!ContextMenuRegistry.ContextMenuOption} */
154
- const menuOption = {
155
- text: displayText,
156
- enabled: (precondition === 'enabled'),
157
- callback: item.callback,
158
- scope: scope,
159
- weight: item.weight,
160
- };
161
- menuOptions.push(menuOption);
162
- }
163
- }
164
- });
165
- menuOptions.sort(function(a, b) {
166
- return a.weight - b.weight;
167
- });
168
- return menuOptions;
169
- };
170
-
171
- // Creates and assigns the singleton instance.
172
- new ContextMenuRegistry();
176
+ ContextMenuRegistry.registry = new ContextMenuRegistry();
173
177
 
174
178
  exports.ContextMenuRegistry = ContextMenuRegistry;