@blockdia/scratch-blocks 0.1.0

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/.nvmrc +1 -0
  2. package/LICENSE +674 -0
  3. package/README.md +57 -0
  4. package/TRADEMARK +1 -0
  5. package/blockly_compressed_horizontal.js +2268 -0
  6. package/blockly_compressed_vertical.js +2296 -0
  7. package/blockly_uncompressed_horizontal.js +1212 -0
  8. package/blockly_uncompressed_vertical.js +1212 -0
  9. package/blocks_common/colour.js +61 -0
  10. package/blocks_common/math.js +159 -0
  11. package/blocks_common/matrix.js +54 -0
  12. package/blocks_common/note.js +58 -0
  13. package/blocks_common/text.js +57 -0
  14. package/blocks_compressed.js +37 -0
  15. package/blocks_compressed_horizontal.js +68 -0
  16. package/blocks_compressed_vertical.js +216 -0
  17. package/blocks_horizontal/control.js +212 -0
  18. package/blocks_horizontal/default_toolbox.js +139 -0
  19. package/blocks_horizontal/event.js +190 -0
  20. package/blocks_horizontal/wedo.js +325 -0
  21. package/blocks_vertical/control.js +532 -0
  22. package/blocks_vertical/data.js +666 -0
  23. package/blocks_vertical/default_toolbox.js +571 -0
  24. package/blocks_vertical/event.js +329 -0
  25. package/blocks_vertical/extensions.js +294 -0
  26. package/blocks_vertical/looks.js +591 -0
  27. package/blocks_vertical/motion.js +587 -0
  28. package/blocks_vertical/operators.js +470 -0
  29. package/blocks_vertical/procedures.js +1051 -0
  30. package/blocks_vertical/sensing.js +555 -0
  31. package/blocks_vertical/sound.js +246 -0
  32. package/blocks_vertical/vertical_extensions.js +289 -0
  33. package/build/gen_blocks.js +1 -0
  34. package/build/test_expect.js +1 -0
  35. package/build/test_input.js +1 -0
  36. package/build.py +647 -0
  37. package/cleanup.sh +101 -0
  38. package/core/block.js +1837 -0
  39. package/core/block_animations.js +107 -0
  40. package/core/block_drag_surface.js +299 -0
  41. package/core/block_dragger.js +424 -0
  42. package/core/block_events.js +531 -0
  43. package/core/block_render_svg_horizontal.js +892 -0
  44. package/core/block_render_svg_vertical.js +1734 -0
  45. package/core/block_svg.js +1355 -0
  46. package/core/blockly.js +620 -0
  47. package/core/blocks.js +37 -0
  48. package/core/bubble.js +664 -0
  49. package/core/bubble_dragger.js +285 -0
  50. package/core/colours.js +177 -0
  51. package/core/comment.js +293 -0
  52. package/core/comment_events.js +539 -0
  53. package/core/connection.js +776 -0
  54. package/core/connection_db.js +300 -0
  55. package/core/constants.js +408 -0
  56. package/core/contextmenu.js +534 -0
  57. package/core/css.js +1354 -0
  58. package/core/data_category.js +490 -0
  59. package/core/dragged_connection_manager.js +260 -0
  60. package/core/dropdowndiv.js +408 -0
  61. package/core/events.js +429 -0
  62. package/core/events_abstract.js +113 -0
  63. package/core/extensions.js +450 -0
  64. package/core/field.js +810 -0
  65. package/core/field_angle.js +410 -0
  66. package/core/field_checkbox.js +133 -0
  67. package/core/field_colour.js +253 -0
  68. package/core/field_colour_slider.js +387 -0
  69. package/core/field_date.js +353 -0
  70. package/core/field_dropdown.js +447 -0
  71. package/core/field_iconmenu.js +309 -0
  72. package/core/field_image.js +200 -0
  73. package/core/field_label.js +136 -0
  74. package/core/field_label_serializable.js +125 -0
  75. package/core/field_matrix.js +566 -0
  76. package/core/field_note.js +850 -0
  77. package/core/field_number.js +366 -0
  78. package/core/field_numberdropdown.js +77 -0
  79. package/core/field_textdropdown.js +164 -0
  80. package/core/field_textinput.js +675 -0
  81. package/core/field_textinput_removable.js +105 -0
  82. package/core/field_variable.js +385 -0
  83. package/core/field_variable_getter.js +185 -0
  84. package/core/field_vertical_separator.js +161 -0
  85. package/core/flyout_base.js +935 -0
  86. package/core/flyout_button.js +324 -0
  87. package/core/flyout_dragger.js +83 -0
  88. package/core/flyout_extension_category_header.js +159 -0
  89. package/core/flyout_horizontal.js +475 -0
  90. package/core/flyout_vertical.js +770 -0
  91. package/core/generator.js +426 -0
  92. package/core/gesture.js +1010 -0
  93. package/core/grid.js +227 -0
  94. package/core/icon.js +205 -0
  95. package/core/inject.js +496 -0
  96. package/core/input.js +285 -0
  97. package/core/insertion_marker_manager.js +678 -0
  98. package/core/intersection_observer.js +102 -0
  99. package/core/msg.js +62 -0
  100. package/core/mutator.js +426 -0
  101. package/core/names.js +198 -0
  102. package/core/options.js +244 -0
  103. package/core/procedures.js +739 -0
  104. package/core/rendered_connection.js +417 -0
  105. package/core/scratch_block_comment.js +646 -0
  106. package/core/scratch_blocks_utils.js +246 -0
  107. package/core/scratch_bubble.js +699 -0
  108. package/core/scratch_events.js +131 -0
  109. package/core/scratch_msgs.js +85 -0
  110. package/core/scrollbar.js +875 -0
  111. package/core/toolbox.js +803 -0
  112. package/core/tooltip.js +337 -0
  113. package/core/touch.js +226 -0
  114. package/core/trashcan.js +343 -0
  115. package/core/ui_events.js +91 -0
  116. package/core/ui_menu_utils.js +68 -0
  117. package/core/utils.js +825 -0
  118. package/core/variable_events.js +259 -0
  119. package/core/variable_map.js +415 -0
  120. package/core/variable_model.js +116 -0
  121. package/core/variables.js +674 -0
  122. package/core/warning.js +199 -0
  123. package/core/widgetdiv.js +344 -0
  124. package/core/workspace.js +673 -0
  125. package/core/workspace_audio.js +170 -0
  126. package/core/workspace_comment.js +426 -0
  127. package/core/workspace_comment_render_svg.js +706 -0
  128. package/core/workspace_comment_svg.js +609 -0
  129. package/core/workspace_drag_surface_svg.js +195 -0
  130. package/core/workspace_dragger.js +132 -0
  131. package/core/workspace_svg.js +2382 -0
  132. package/core/xml.js +930 -0
  133. package/core/zoom_controls.js +301 -0
  134. package/dist/horizontal.js +222 -0
  135. package/dist/vertical.js +222 -0
  136. package/dist/web/horizontal.js +232 -0
  137. package/dist/web/vertical.js +232 -0
  138. package/i18n/common.py +234 -0
  139. package/i18n/create_messages.py +162 -0
  140. package/i18n/create_scratch_msgs.js +69 -0
  141. package/i18n/dedup_json.py +73 -0
  142. package/i18n/js_to_json.js +46 -0
  143. package/i18n/js_to_json.py +136 -0
  144. package/i18n/json_to_js.js +52 -0
  145. package/i18n/json_to_js.py +185 -0
  146. package/i18n/sync_tx_translations.js +111 -0
  147. package/i18n/test_scratch_msgs.js +87 -0
  148. package/i18n/tests.py +47 -0
  149. package/i18n/xliff_to_json.py +232 -0
  150. package/local_build.sh +70 -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/status-not-ready.svg +13 -0
  216. package/media/status-ready.svg +13 -0
  217. package/media/zoom-in.svg +1 -0
  218. package/media/zoom-out.svg +1 -0
  219. package/media/zoom-reset.svg +1 -0
  220. package/msg/js/en.js +290 -0
  221. package/msg/json/en.json +285 -0
  222. package/msg/messages.js +359 -0
  223. package/msg/scratch_msgs.js +22969 -0
  224. package/package.json +60 -0
  225. package/pull_from_blockly.sh +151 -0
  226. package/renovate.json5 +15 -0
  227. package/shim/blockly_compressed_horizontal-blocks_compressed.js +1 -0
  228. package/shim/blockly_compressed_horizontal.Blockly.js +1 -0
  229. package/shim/blockly_compressed_horizontal.goog.js +1 -0
  230. package/shim/blockly_compressed_horizontal.js +1 -0
  231. package/shim/blockly_compressed_vertical-blocks_compressed.js +1 -0
  232. package/shim/blockly_compressed_vertical.Blockly.js +1 -0
  233. package/shim/blockly_compressed_vertical.goog.js +1 -0
  234. package/shim/blockly_compressed_vertical.js +1 -0
  235. package/shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages.js +1 -0
  236. package/shim/blocks_compressed_horizontal.js +1 -0
  237. package/shim/blocks_compressed_vertical-blockly_compressed_vertical-messages.js +1 -0
  238. package/shim/blocks_compressed_vertical.js +1 -0
  239. package/shim/gh-pages.js +1 -0
  240. package/shim/horizontal.js +1 -0
  241. package/shim/index.js +17 -0
  242. package/shim/vertical.js +1 -0
  243. package/universal-python.js +82 -0
package/core/input.js ADDED
@@ -0,0 +1,285 @@
1
+ /**
2
+ * @license
3
+ * Visual Blocks Editor
4
+ *
5
+ * Copyright 2012 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 representing an input (value, statement, or dummy).
23
+ * @author fraser@google.com (Neil Fraser)
24
+ */
25
+ 'use strict';
26
+
27
+ goog.provide('Blockly.Input');
28
+
29
+ goog.require('Blockly.Connection');
30
+ goog.require('Blockly.FieldLabel');
31
+ goog.require('goog.asserts');
32
+
33
+
34
+ /**
35
+ * Class for an input with an optional field.
36
+ * @param {number} type The type of the input.
37
+ * @param {string} name Language-neutral identifier which may used to find this
38
+ * input again.
39
+ * @param {!Blockly.Block} block The block containing this input.
40
+ * @param {Blockly.Connection} connection Optional connection for this input.
41
+ * @constructor
42
+ */
43
+ Blockly.Input = function(type, name, block, connection) {
44
+ if (type != Blockly.DUMMY_INPUT && !name) {
45
+ throw 'Value inputs and statement inputs must have non-empty name.';
46
+ }
47
+ /** @type {number} */
48
+ this.type = type;
49
+ /** @type {string} */
50
+ this.name = name;
51
+ /**
52
+ * @type {!Blockly.Block}
53
+ * @private
54
+ */
55
+ this.sourceBlock_ = block;
56
+ /** @type {Blockly.Connection} */
57
+ this.connection = connection;
58
+ /** @type {!Array.<!Blockly.Field>} */
59
+ this.fieldRow = [];
60
+
61
+ /**
62
+ * The shape that is displayed when this input is rendered but not filled.
63
+ * @type {SVGElement}
64
+ * @package
65
+ */
66
+ this.outlinePath = null;
67
+ };
68
+
69
+ /**
70
+ * Alignment of input's fields (left, right or centre).
71
+ * @type {number}
72
+ */
73
+ Blockly.Input.prototype.align = Blockly.ALIGN_LEFT;
74
+
75
+ /**
76
+ * Is the input visible?
77
+ * @type {boolean}
78
+ * @private
79
+ */
80
+ Blockly.Input.prototype.visible_ = true;
81
+
82
+ /**
83
+ * Add a field (or label from string), and all prefix and suffix fields, to the
84
+ * end of the input's field row.
85
+ * @param {string|!Blockly.Field} field Something to add as a field.
86
+ * @param {string=} opt_name Language-neutral identifier which may used to find
87
+ * this field again. Should be unique to the host block.
88
+ * @return {!Blockly.Input} The input being append to (to allow chaining).
89
+ */
90
+ Blockly.Input.prototype.appendField = function(field, opt_name) {
91
+ this.insertFieldAt(this.fieldRow.length, field, opt_name);
92
+ return this;
93
+ };
94
+
95
+ /**
96
+ * Inserts a field (or label from string), and all prefix and suffix fields, at
97
+ * the location of the input's field row.
98
+ * @param {number} index The index at which to insert field.
99
+ * @param {string|!Blockly.Field} field Something to add as a field.
100
+ * @param {string=} opt_name Language-neutral identifier which may used to find
101
+ * this field again. Should be unique to the host block.
102
+ * @return {number} The index following the last inserted field.
103
+ */
104
+ Blockly.Input.prototype.insertFieldAt = function(index, field, opt_name) {
105
+ if (index < 0 || index > this.fieldRow.length) {
106
+ throw new Error('index ' + index + ' out of bounds.');
107
+ }
108
+
109
+ // Empty string, Null or undefined generates no field, unless field is named.
110
+ if (!field && !opt_name) {
111
+ return this;
112
+ }
113
+ // Generate a FieldLabel when given a plain text field.
114
+ if (goog.isString(field)) {
115
+ field = new Blockly.FieldLabel(/** @type {string} */ (field));
116
+ }
117
+ field.setSourceBlock(this.sourceBlock_);
118
+ if (this.sourceBlock_.rendered) {
119
+ field.init();
120
+ }
121
+ field.name = opt_name;
122
+
123
+ if (field.prefixField) {
124
+ // Add any prefix.
125
+ index = this.insertFieldAt(index, field.prefixField);
126
+ }
127
+ // Add the field to the field row.
128
+ this.fieldRow.splice(index, 0, field);
129
+ ++index;
130
+ if (field.suffixField) {
131
+ // Add any suffix.
132
+ index = this.insertFieldAt(index, field.suffixField);
133
+ }
134
+
135
+ if (this.sourceBlock_.rendered) {
136
+ this.sourceBlock_.render();
137
+ // Adding a field will cause the block to change shape.
138
+ this.sourceBlock_.bumpNeighbours_();
139
+ }
140
+ return index;
141
+ };
142
+
143
+ /**
144
+ * Remove a field from this input.
145
+ * @param {string} name The name of the field.
146
+ * @throws {goog.asserts.AssertionError} if the field is not present.
147
+ */
148
+ Blockly.Input.prototype.removeField = function(name) {
149
+ for (var i = 0, field; field = this.fieldRow[i]; i++) {
150
+ if (field.name === name) {
151
+ field.dispose();
152
+ this.fieldRow.splice(i, 1);
153
+ if (this.sourceBlock_.rendered) {
154
+ this.sourceBlock_.render();
155
+ // Removing a field will cause the block to change shape.
156
+ this.sourceBlock_.bumpNeighbours_();
157
+ }
158
+ return;
159
+ }
160
+ }
161
+ goog.asserts.fail('Field "%s" not found.', name);
162
+ };
163
+
164
+ /**
165
+ * Gets whether this input is visible or not.
166
+ * @return {boolean} True if visible.
167
+ */
168
+ Blockly.Input.prototype.isVisible = function() {
169
+ return this.visible_;
170
+ };
171
+
172
+ /**
173
+ * Sets whether this input is visible or not.
174
+ * Used to collapse/uncollapse a block.
175
+ * @param {boolean} visible True if visible.
176
+ * @return {!Array.<!Blockly.Block>} List of blocks to render.
177
+ */
178
+ Blockly.Input.prototype.setVisible = function(visible) {
179
+ var renderList = [];
180
+ if (this.visible_ == visible) {
181
+ return renderList;
182
+ }
183
+ this.visible_ = visible;
184
+
185
+ var display = visible ? 'block' : 'none';
186
+ for (var y = 0, field; field = this.fieldRow[y]; y++) {
187
+ field.setVisible(visible);
188
+ }
189
+ if (this.connection) {
190
+ // Has a connection.
191
+ if (visible) {
192
+ renderList = this.connection.unhideAll();
193
+ } else {
194
+ this.connection.hideAll();
195
+ }
196
+ var child = this.connection.targetBlock();
197
+ if (child) {
198
+ child.getSvgRoot().style.display = display;
199
+ if (!visible) {
200
+ child.rendered = false;
201
+ }
202
+ }
203
+ }
204
+ return renderList;
205
+ };
206
+
207
+ /**
208
+ * Change a connection's compatibility.
209
+ * @param {string|Array.<string>|null} check Compatible value type or
210
+ * list of value types. Null if all types are compatible.
211
+ * @return {!Blockly.Input} The input being modified (to allow chaining).
212
+ */
213
+ Blockly.Input.prototype.setCheck = function(check) {
214
+ if (!this.connection) {
215
+ throw 'This input does not have a connection.';
216
+ }
217
+ this.connection.setCheck(check);
218
+ return this;
219
+ };
220
+
221
+ /**
222
+ * Change the alignment of the connection's field(s).
223
+ * @param {number} align One of Blockly.ALIGN_LEFT, ALIGN_CENTRE, ALIGN_RIGHT.
224
+ * In RTL mode directions are reversed, and ALIGN_RIGHT aligns to the left.
225
+ * @return {!Blockly.Input} The input being modified (to allow chaining).
226
+ */
227
+ Blockly.Input.prototype.setAlign = function(align) {
228
+ this.align = align;
229
+ if (this.sourceBlock_.rendered) {
230
+ this.sourceBlock_.render();
231
+ }
232
+ return this;
233
+ };
234
+
235
+ /**
236
+ * Initialize the fields on this input.
237
+ */
238
+ Blockly.Input.prototype.init = function() {
239
+ if (!this.sourceBlock_.workspace.rendered) {
240
+ return; // Headless blocks don't need fields initialized.
241
+ }
242
+ for (var i = 0; i < this.fieldRow.length; i++) {
243
+ this.fieldRow[i].init(this.sourceBlock_);
244
+ }
245
+ };
246
+
247
+ /**
248
+ * Sever all links to this input.
249
+ */
250
+ Blockly.Input.prototype.dispose = function() {
251
+ if (this.outlinePath) {
252
+ goog.dom.removeNode(this.outlinePath);
253
+ }
254
+ for (var i = 0, field; field = this.fieldRow[i]; i++) {
255
+ field.dispose();
256
+ }
257
+ if (this.connection) {
258
+ this.connection.dispose();
259
+ }
260
+ this.sourceBlock_ = null;
261
+ };
262
+
263
+ /**
264
+ * Create the input shape path element and attach it to the given SVG element.
265
+ * @param {!SVGElement} svgRoot The parent on which ot append the new element.
266
+ * @package
267
+ */
268
+ Blockly.Input.prototype.initOutlinePath = function(svgRoot) {
269
+ if (!this.sourceBlock_.workspace.rendered) {
270
+ return; // Headless blocks don't need field outlines.
271
+ }
272
+ if (this.outlinePath) {
273
+ return;
274
+ }
275
+ if (this.type == Blockly.INPUT_VALUE) {
276
+ this.outlinePath = Blockly.utils.createSvgElement(
277
+ 'path',
278
+ {
279
+ 'class': 'blocklyPath',
280
+ 'style': 'visibility: hidden', // Hide by default - shown when not connected.
281
+ 'd': '' // IE doesn't like paths without the data definition, set an empty default
282
+ },
283
+ svgRoot);
284
+ }
285
+ };