scratch-blocks 0.1.0-prerelease.20211005172512

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 (243) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +23 -0
  3. package/TRADEMARK +1 -0
  4. package/blockly_compressed_horizontal.js +2253 -0
  5. package/blockly_compressed_vertical.js +2281 -0
  6. package/blockly_uncompressed_horizontal.js +1210 -0
  7. package/blockly_uncompressed_vertical.js +1210 -0
  8. package/blocks_common/colour.js +61 -0
  9. package/blocks_common/math.js +154 -0
  10. package/blocks_common/matrix.js +54 -0
  11. package/blocks_common/note.js +57 -0
  12. package/blocks_common/text.js +56 -0
  13. package/blocks_compressed.js +36 -0
  14. package/blocks_compressed_horizontal.js +58 -0
  15. package/blocks_compressed_vertical.js +207 -0
  16. package/blocks_horizontal/control.js +207 -0
  17. package/blocks_horizontal/default_toolbox.js +139 -0
  18. package/blocks_horizontal/event.js +185 -0
  19. package/blocks_horizontal/wedo.js +316 -0
  20. package/blocks_vertical/control.js +531 -0
  21. package/blocks_vertical/data.js +670 -0
  22. package/blocks_vertical/default_toolbox.js +564 -0
  23. package/blocks_vertical/event.js +328 -0
  24. package/blocks_vertical/extensions.js +294 -0
  25. package/blocks_vertical/looks.js +589 -0
  26. package/blocks_vertical/motion.js +584 -0
  27. package/blocks_vertical/operators.js +470 -0
  28. package/blocks_vertical/procedures.js +971 -0
  29. package/blocks_vertical/sensing.js +539 -0
  30. package/blocks_vertical/sound.js +245 -0
  31. package/blocks_vertical/vertical_extensions.js +264 -0
  32. package/build/gen_blocks.js +1 -0
  33. package/build/test_expect.js +1 -0
  34. package/build/test_input.js +1 -0
  35. package/build.py +630 -0
  36. package/cleanup.sh +101 -0
  37. package/core/block.js +1811 -0
  38. package/core/block_animations.js +107 -0
  39. package/core/block_drag_surface.js +299 -0
  40. package/core/block_dragger.js +421 -0
  41. package/core/block_events.js +531 -0
  42. package/core/block_render_svg_horizontal.js +890 -0
  43. package/core/block_render_svg_vertical.js +1732 -0
  44. package/core/block_svg.js +1314 -0
  45. package/core/blockly.js +622 -0
  46. package/core/blocks.js +37 -0
  47. package/core/bubble.js +664 -0
  48. package/core/bubble_dragger.js +285 -0
  49. package/core/colours.js +147 -0
  50. package/core/comment.js +293 -0
  51. package/core/comment_events.js +539 -0
  52. package/core/connection.js +766 -0
  53. package/core/connection_db.js +300 -0
  54. package/core/constants.js +387 -0
  55. package/core/contextmenu.js +519 -0
  56. package/core/css.js +1350 -0
  57. package/core/data_category.js +490 -0
  58. package/core/dragged_connection_manager.js +260 -0
  59. package/core/dropdowndiv.js +408 -0
  60. package/core/events.js +429 -0
  61. package/core/events_abstract.js +113 -0
  62. package/core/extensions.js +450 -0
  63. package/core/field.js +807 -0
  64. package/core/field_angle.js +398 -0
  65. package/core/field_checkbox.js +133 -0
  66. package/core/field_colour.js +253 -0
  67. package/core/field_colour_slider.js +386 -0
  68. package/core/field_date.js +353 -0
  69. package/core/field_dropdown.js +483 -0
  70. package/core/field_iconmenu.js +307 -0
  71. package/core/field_image.js +193 -0
  72. package/core/field_label.js +136 -0
  73. package/core/field_label_serializable.js +125 -0
  74. package/core/field_matrix.js +566 -0
  75. package/core/field_note.js +850 -0
  76. package/core/field_number.js +366 -0
  77. package/core/field_numberdropdown.js +77 -0
  78. package/core/field_textdropdown.js +164 -0
  79. package/core/field_textinput.js +675 -0
  80. package/core/field_textinput_removable.js +105 -0
  81. package/core/field_variable.js +385 -0
  82. package/core/field_variable_getter.js +185 -0
  83. package/core/field_vertical_separator.js +161 -0
  84. package/core/flyout_base.js +923 -0
  85. package/core/flyout_button.js +322 -0
  86. package/core/flyout_dragger.js +83 -0
  87. package/core/flyout_extension_category_header.js +159 -0
  88. package/core/flyout_horizontal.js +475 -0
  89. package/core/flyout_vertical.js +770 -0
  90. package/core/generator.js +426 -0
  91. package/core/gesture.js +1011 -0
  92. package/core/grid.js +227 -0
  93. package/core/icon.js +205 -0
  94. package/core/inject.js +491 -0
  95. package/core/input.js +285 -0
  96. package/core/insertion_marker_manager.js +678 -0
  97. package/core/msg.js +62 -0
  98. package/core/mutator.js +426 -0
  99. package/core/names.js +198 -0
  100. package/core/options.js +244 -0
  101. package/core/procedures.js +577 -0
  102. package/core/rendered_connection.js +417 -0
  103. package/core/scratch_block_comment.js +653 -0
  104. package/core/scratch_blocks_utils.js +244 -0
  105. package/core/scratch_bubble.js +696 -0
  106. package/core/scratch_events.js +131 -0
  107. package/core/scratch_msgs.js +85 -0
  108. package/core/scrollbar.js +875 -0
  109. package/core/toolbox.js +801 -0
  110. package/core/tooltip.js +337 -0
  111. package/core/touch.js +226 -0
  112. package/core/trashcan.js +343 -0
  113. package/core/ui_events.js +91 -0
  114. package/core/ui_menu_utils.js +68 -0
  115. package/core/utils.js +948 -0
  116. package/core/variable_events.js +259 -0
  117. package/core/variable_map.js +415 -0
  118. package/core/variable_model.js +116 -0
  119. package/core/variables.js +674 -0
  120. package/core/warning.js +199 -0
  121. package/core/widgetdiv.js +344 -0
  122. package/core/workspace.js +673 -0
  123. package/core/workspace_audio.js +170 -0
  124. package/core/workspace_comment.js +432 -0
  125. package/core/workspace_comment_render_svg.js +723 -0
  126. package/core/workspace_comment_svg.js +611 -0
  127. package/core/workspace_drag_surface_svg.js +195 -0
  128. package/core/workspace_dragger.js +132 -0
  129. package/core/workspace_svg.js +2267 -0
  130. package/core/xml.js +919 -0
  131. package/core/zoom_controls.js +301 -0
  132. package/dist/horizontal.js +222 -0
  133. package/dist/vertical.js +222 -0
  134. package/dist/web/horizontal.js +232 -0
  135. package/dist/web/vertical.js +232 -0
  136. package/i18n/common.py +234 -0
  137. package/i18n/create_messages.py +165 -0
  138. package/i18n/create_scratch_msgs.js +69 -0
  139. package/i18n/dedup_json.py +73 -0
  140. package/i18n/js_to_json.js +46 -0
  141. package/i18n/js_to_json.py +136 -0
  142. package/i18n/json_to_js.js +52 -0
  143. package/i18n/json_to_js.py +185 -0
  144. package/i18n/sync_translations.sh +17 -0
  145. package/i18n/sync_tx_translations.js +121 -0
  146. package/i18n/test_scratch_msgs.js +87 -0
  147. package/i18n/tests.py +47 -0
  148. package/i18n/xliff_to_json.py +232 -0
  149. package/local_build.sh +70 -0
  150. package/media/1x1.gif +0 -0
  151. package/media/click.mp3 +0 -0
  152. package/media/click.ogg +0 -0
  153. package/media/click.wav +0 -0
  154. package/media/comment-arrow-down.svg +10 -0
  155. package/media/comment-arrow-up.svg +10 -0
  156. package/media/delete-x.svg +10 -0
  157. package/media/delete.mp3 +0 -0
  158. package/media/delete.ogg +0 -0
  159. package/media/delete.wav +0 -0
  160. package/media/dropdown-arrow-dark.svg +1 -0
  161. package/media/dropdown-arrow.svg +1 -0
  162. package/media/extensions/microbit-block-icon.svg +130 -0
  163. package/media/extensions/music-block-icon.svg +17 -0
  164. package/media/extensions/pen-block-icon.svg +19 -0
  165. package/media/extensions/wedo2-block-icon.svg +36 -0
  166. package/media/eyedropper.svg +22 -0
  167. package/media/green-flag.svg +17 -0
  168. package/media/handclosed.cur +0 -0
  169. package/media/handdelete.cur +0 -0
  170. package/media/handopen.cur +0 -0
  171. package/media/icons/arrow.svg +12 -0
  172. package/media/icons/arrow_button.svg +1 -0
  173. package/media/icons/control_forever.svg +1 -0
  174. package/media/icons/control_repeat.svg +1 -0
  175. package/media/icons/control_stop.svg +1 -0
  176. package/media/icons/control_wait.svg +1 -0
  177. package/media/icons/event_broadcast_blue.svg +1 -0
  178. package/media/icons/event_broadcast_coral.svg +1 -0
  179. package/media/icons/event_broadcast_green.svg +1 -0
  180. package/media/icons/event_broadcast_magenta.svg +1 -0
  181. package/media/icons/event_broadcast_orange.svg +1 -0
  182. package/media/icons/event_broadcast_purple.svg +1 -0
  183. package/media/icons/event_when-broadcast-received_blue.svg +1 -0
  184. package/media/icons/event_when-broadcast-received_coral.svg +1 -0
  185. package/media/icons/event_when-broadcast-received_green.svg +1 -0
  186. package/media/icons/event_when-broadcast-received_magenta.svg +1 -0
  187. package/media/icons/event_when-broadcast-received_orange.svg +1 -0
  188. package/media/icons/event_when-broadcast-received_purple.svg +1 -0
  189. package/media/icons/event_whenflagclicked.svg +1 -0
  190. package/media/icons/remove.svg +19 -0
  191. package/media/icons/set-led_blue.svg +1 -0
  192. package/media/icons/set-led_coral.svg +1 -0
  193. package/media/icons/set-led_green.svg +1 -0
  194. package/media/icons/set-led_magenta.svg +1 -0
  195. package/media/icons/set-led_mystery.svg +1 -0
  196. package/media/icons/set-led_orange.svg +1 -0
  197. package/media/icons/set-led_purple.svg +1 -0
  198. package/media/icons/set-led_white.svg +1 -0
  199. package/media/icons/set-led_yellow.svg +1 -0
  200. package/media/icons/wedo_motor-clockwise.svg +1 -0
  201. package/media/icons/wedo_motor-counterclockwise.svg +1 -0
  202. package/media/icons/wedo_motor-speed_fast.svg +1 -0
  203. package/media/icons/wedo_motor-speed_med.svg +1 -0
  204. package/media/icons/wedo_motor-speed_slow.svg +1 -0
  205. package/media/icons/wedo_when-distance_close.svg +1 -0
  206. package/media/icons/wedo_when-tilt-backward.svg +1 -0
  207. package/media/icons/wedo_when-tilt-forward.svg +1 -0
  208. package/media/icons/wedo_when-tilt-left.svg +1 -0
  209. package/media/icons/wedo_when-tilt-right.svg +1 -0
  210. package/media/icons/wedo_when-tilt.svg +1 -0
  211. package/media/repeat.svg +18 -0
  212. package/media/rotate-left.svg +1 -0
  213. package/media/rotate-right.svg +1 -0
  214. package/media/sprites.png +0 -0
  215. package/media/sprites.svg +74 -0
  216. package/media/status-not-ready.svg +13 -0
  217. package/media/status-ready.svg +13 -0
  218. package/media/zoom-in.svg +1 -0
  219. package/media/zoom-out.svg +1 -0
  220. package/media/zoom-reset.svg +1 -0
  221. package/msg/js/en.js +290 -0
  222. package/msg/json/en.json +285 -0
  223. package/msg/messages.js +353 -0
  224. package/msg/scratch_msgs.js +21247 -0
  225. package/package.json +52 -0
  226. package/pull_from_blockly.sh +151 -0
  227. package/renovate.json5 +15 -0
  228. package/shim/blockly_compressed_horizontal-blocks_compressed.js +1 -0
  229. package/shim/blockly_compressed_horizontal.Blockly.js +1 -0
  230. package/shim/blockly_compressed_horizontal.goog.js +1 -0
  231. package/shim/blockly_compressed_horizontal.js +1 -0
  232. package/shim/blockly_compressed_vertical-blocks_compressed.js +1 -0
  233. package/shim/blockly_compressed_vertical.Blockly.js +1 -0
  234. package/shim/blockly_compressed_vertical.goog.js +1 -0
  235. package/shim/blockly_compressed_vertical.js +1 -0
  236. package/shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages.js +1 -0
  237. package/shim/blocks_compressed_horizontal.js +1 -0
  238. package/shim/blocks_compressed_vertical-blockly_compressed_vertical-messages.js +1 -0
  239. package/shim/blocks_compressed_vertical.js +1 -0
  240. package/shim/gh-pages.js +1 -0
  241. package/shim/horizontal.js +1 -0
  242. package/shim/index.js +17 -0
  243. package/shim/vertical.js +1 -0
@@ -0,0 +1,244 @@
1
+ /**
2
+ * @license
3
+ * Visual Blocks Editor
4
+ *
5
+ * Copyright 2016 Google Inc.
6
+ * https://developers.google.com/blockly/
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ /**
22
+ * @fileoverview Object that controls settings for the workspace.
23
+ * @author fenichel@google.com (Rachel Fenichel)
24
+ */
25
+ 'use strict';
26
+
27
+ goog.provide('Blockly.Options');
28
+ goog.require('Blockly.Colours');
29
+
30
+
31
+ /**
32
+ * Parse the user-specified options, using reasonable defaults where behaviour
33
+ * is unspecified.
34
+ * @param {!Object} options Dictionary of options. Specification:
35
+ * https://developers.google.com/blockly/guides/get-started/web#configuration
36
+ * @constructor
37
+ */
38
+ Blockly.Options = function(options) {
39
+ var readOnly = !!options['readOnly'];
40
+ if (readOnly) {
41
+ var languageTree = null;
42
+ var hasCategories = false;
43
+ var hasTrashcan = false;
44
+ var hasCollapse = false;
45
+ var hasComments = false;
46
+ var hasDisable = false;
47
+ var hasSounds = false;
48
+ } else {
49
+ if (!options['toolbox'] && Blockly.Blocks.defaultToolbox) {
50
+ var oParser = new DOMParser();
51
+ var dom = oParser.parseFromString(Blockly.Blocks.defaultToolbox, 'text/xml');
52
+ options['toolbox'] = dom.documentElement;
53
+ }
54
+ var languageTree = Blockly.Options.parseToolboxTree(options['toolbox']);
55
+ var hasCategories = Boolean(languageTree &&
56
+ languageTree.getElementsByTagName('category').length);
57
+ var hasTrashcan = options['trashcan'];
58
+ if (hasTrashcan === undefined) {
59
+ hasTrashcan = false;
60
+ }
61
+ var hasCollapse = options['collapse'];
62
+ if (hasCollapse === undefined) {
63
+ hasCollapse = hasCategories;
64
+ }
65
+ var hasComments = options['comments'];
66
+ if (hasComments === undefined) {
67
+ hasComments = hasCategories;
68
+ }
69
+ var hasDisable = options['disable'];
70
+ if (hasDisable === undefined) {
71
+ hasDisable = hasCategories;
72
+ }
73
+ var hasSounds = options['sounds'];
74
+ if (hasSounds === undefined) {
75
+ hasSounds = true;
76
+ }
77
+ }
78
+ var rtl = !!options['rtl'];
79
+ var horizontalLayout = options['horizontalLayout'];
80
+ if (horizontalLayout === undefined) {
81
+ horizontalLayout = false;
82
+ }
83
+ var toolboxAtStart = options['toolboxPosition'];
84
+ if (toolboxAtStart === 'end') {
85
+ toolboxAtStart = false;
86
+ } else {
87
+ toolboxAtStart = true;
88
+ }
89
+
90
+ if (horizontalLayout) {
91
+ var toolboxPosition = toolboxAtStart ?
92
+ Blockly.TOOLBOX_AT_TOP : Blockly.TOOLBOX_AT_BOTTOM;
93
+ } else {
94
+ var toolboxPosition = (toolboxAtStart == rtl) ?
95
+ Blockly.TOOLBOX_AT_RIGHT : Blockly.TOOLBOX_AT_LEFT;
96
+ }
97
+
98
+ var hasScrollbars = options['scrollbars'];
99
+ if (hasScrollbars === undefined) {
100
+ hasScrollbars = hasCategories;
101
+ }
102
+ var hasCss = options['css'];
103
+ if (hasCss === undefined) {
104
+ hasCss = true;
105
+ }
106
+ var pathToMedia = 'https://blockly-demo.appspot.com/static/media/';
107
+ if (options['media']) {
108
+ pathToMedia = options['media'];
109
+ } else if (options['path']) {
110
+ // 'path' is a deprecated option which has been replaced by 'media'.
111
+ pathToMedia = options['path'] + 'media/';
112
+ }
113
+ if (options['oneBasedIndex'] === undefined) {
114
+ var oneBasedIndex = true;
115
+ } else {
116
+ var oneBasedIndex = !!options['oneBasedIndex'];
117
+ }
118
+
119
+ Blockly.Colours.overrideColours(options['colours']);
120
+
121
+ this.RTL = rtl;
122
+ this.oneBasedIndex = oneBasedIndex;
123
+ this.collapse = hasCollapse;
124
+ this.comments = hasComments;
125
+ this.disable = hasDisable;
126
+ this.readOnly = readOnly;
127
+ this.pathToMedia = pathToMedia;
128
+ this.hasCategories = hasCategories;
129
+ this.hasScrollbars = hasScrollbars;
130
+ this.hasTrashcan = hasTrashcan;
131
+ this.hasSounds = hasSounds;
132
+ this.hasCss = hasCss;
133
+ this.horizontalLayout = horizontalLayout;
134
+ this.languageTree = languageTree;
135
+ this.gridOptions = Blockly.Options.parseGridOptions_(options);
136
+ this.zoomOptions = Blockly.Options.parseZoomOptions_(options);
137
+ this.toolboxPosition = toolboxPosition;
138
+ };
139
+
140
+ /**
141
+ * The parent of the current workspace, or null if there is no parent workspace.
142
+ * @type {Blockly.Workspace}
143
+ **/
144
+ Blockly.Options.prototype.parentWorkspace = null;
145
+
146
+ /**
147
+ * If set, sets the translation of the workspace to match the scrollbars.
148
+ */
149
+ Blockly.Options.prototype.setMetrics = null;
150
+
151
+ /**
152
+ * Return an object with the metrics required to size the workspace.
153
+ * @return {Object} Contains size and position metrics, or null.
154
+ */
155
+ Blockly.Options.prototype.getMetrics = null;
156
+
157
+ /**
158
+ * Parse the user-specified zoom options, using reasonable defaults where
159
+ * behaviour is unspecified. See zoom documentation:
160
+ * https://developers.google.com/blockly/guides/configure/web/zoom
161
+ * @param {!Object} options Dictionary of options.
162
+ * @return {!Object} A dictionary of normalized options.
163
+ * @private
164
+ */
165
+ Blockly.Options.parseZoomOptions_ = function(options) {
166
+ var zoom = options['zoom'] || {};
167
+ var zoomOptions = {};
168
+ if (zoom['controls'] === undefined) {
169
+ zoomOptions.controls = false;
170
+ } else {
171
+ zoomOptions.controls = !!zoom['controls'];
172
+ }
173
+ if (zoom['wheel'] === undefined) {
174
+ zoomOptions.wheel = false;
175
+ } else {
176
+ zoomOptions.wheel = !!zoom['wheel'];
177
+ }
178
+ if (zoom['startScale'] === undefined) {
179
+ zoomOptions.startScale = 1;
180
+ } else {
181
+ zoomOptions.startScale = parseFloat(zoom['startScale']);
182
+ }
183
+ if (zoom['maxScale'] === undefined) {
184
+ zoomOptions.maxScale = 3;
185
+ } else {
186
+ zoomOptions.maxScale = parseFloat(zoom['maxScale']);
187
+ }
188
+ if (zoom['minScale'] === undefined) {
189
+ zoomOptions.minScale = 0.3;
190
+ } else {
191
+ zoomOptions.minScale = parseFloat(zoom['minScale']);
192
+ }
193
+ if (zoom['scaleSpeed'] === undefined) {
194
+ zoomOptions.scaleSpeed = 1.2;
195
+ } else {
196
+ zoomOptions.scaleSpeed = parseFloat(zoom['scaleSpeed']);
197
+ }
198
+ return zoomOptions;
199
+ };
200
+
201
+ /**
202
+ * Parse the user-specified grid options, using reasonable defaults where
203
+ * behaviour is unspecified. See grid documentation:
204
+ * https://developers.google.com/blockly/guides/configure/web/grid
205
+ * @param {!Object} options Dictionary of options.
206
+ * @return {!Object} A dictionary of normalized options.
207
+ * @private
208
+ */
209
+ Blockly.Options.parseGridOptions_ = function(options) {
210
+ var grid = options['grid'] || {};
211
+ var gridOptions = {};
212
+ gridOptions.spacing = parseFloat(grid['spacing']) || 0;
213
+ gridOptions.colour = grid['colour'] || '#888';
214
+ gridOptions.length = parseFloat(grid['length']) || 1;
215
+ gridOptions.snap = gridOptions.spacing > 0 && !!grid['snap'];
216
+ return gridOptions;
217
+ };
218
+
219
+ /**
220
+ * Parse the provided toolbox tree into a consistent DOM format.
221
+ * @param {Node|string} tree DOM tree of blocks, or text representation of same.
222
+ * @return {Node} DOM tree of blocks, or null.
223
+ */
224
+ Blockly.Options.parseToolboxTree = function(tree) {
225
+ if (tree) {
226
+ if (typeof tree != 'string') {
227
+ if (typeof XSLTProcessor == 'undefined' && tree.outerHTML) {
228
+ // In this case the tree will not have been properly built by the
229
+ // browser. The HTML will be contained in the element, but it will
230
+ // not have the proper DOM structure since the browser doesn't support
231
+ // XSLTProcessor (XML -> HTML). This is the case in IE 9+.
232
+ tree = tree.outerHTML;
233
+ } else if (!(tree instanceof Element)) {
234
+ tree = null;
235
+ }
236
+ }
237
+ if (typeof tree == 'string') {
238
+ tree = Blockly.Xml.textToDom(tree);
239
+ }
240
+ } else {
241
+ tree = null;
242
+ }
243
+ return tree;
244
+ };