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,245 @@
1
+ /**
2
+ * @license
3
+ * Visual Blocks Editor
4
+ *
5
+ * Copyright 2016 Massachusetts Institute of Technology
6
+ * All rights reserved.
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
+ 'use strict';
22
+
23
+ goog.provide('Blockly.Blocks.sound');
24
+
25
+ goog.require('Blockly.Blocks');
26
+ goog.require('Blockly.Colours');
27
+ goog.require('Blockly.constants');
28
+ goog.require('Blockly.ScratchBlocks.VerticalExtensions');
29
+
30
+ Blockly.Blocks['sound_sounds_menu'] = {
31
+ /**
32
+ * Sound effects drop-down menu.
33
+ * @this Blockly.Block
34
+ */
35
+ init: function() {
36
+ this.jsonInit({
37
+ "message0": "%1",
38
+ "args0": [
39
+ {
40
+ "type": "field_dropdown",
41
+ "name": "SOUND_MENU",
42
+ "options": [
43
+ ['1', '0'],
44
+ ['2', '1'],
45
+ ['3', '2'],
46
+ ['4', '3'],
47
+ ['5', '4'],
48
+ ['6', '5'],
49
+ ['7', '6'],
50
+ ['8', '7'],
51
+ ['9', '8'],
52
+ ['10', '9'],
53
+ ['call a function', function() {
54
+ window.alert('function called!');}
55
+ ]
56
+ ]
57
+ }
58
+ ],
59
+ "colour": Blockly.Colours.sounds.secondary,
60
+ "colourSecondary": Blockly.Colours.sounds.secondary,
61
+ "colourTertiary": Blockly.Colours.sounds.tertiary,
62
+ "extensions": ["output_string"]
63
+ });
64
+ }
65
+ };
66
+
67
+ Blockly.Blocks['sound_play'] = {
68
+ /**
69
+ * Block to play sound.
70
+ * @this Blockly.Block
71
+ */
72
+ init: function() {
73
+ this.jsonInit({
74
+ "message0": Blockly.Msg.SOUND_PLAY,
75
+ "args0": [
76
+ {
77
+ "type": "input_value",
78
+ "name": "SOUND_MENU"
79
+ }
80
+ ],
81
+ "category": Blockly.Categories.sound,
82
+ "extensions": ["colours_sounds", "shape_statement"]
83
+ });
84
+ }
85
+ };
86
+
87
+ Blockly.Blocks['sound_playuntildone'] = {
88
+ /**
89
+ * Block to play sound until done.
90
+ * @this Blockly.Block
91
+ */
92
+ init: function() {
93
+ this.jsonInit({
94
+ "message0": Blockly.Msg.SOUND_PLAYUNTILDONE,
95
+ "args0": [
96
+ {
97
+ "type": "input_value",
98
+ "name": "SOUND_MENU"
99
+ }
100
+ ],
101
+ "category": Blockly.Categories.sound,
102
+ "extensions": ["colours_sounds", "shape_statement"]
103
+ });
104
+ }
105
+ };
106
+
107
+ Blockly.Blocks['sound_stopallsounds'] = {
108
+ /**
109
+ * Block to stop all sounds
110
+ * @this Blockly.Block
111
+ */
112
+ init: function() {
113
+ this.jsonInit({
114
+ "message0": Blockly.Msg.SOUND_STOPALLSOUNDS,
115
+ "category": Blockly.Categories.sound,
116
+ "extensions": ["colours_sounds", "shape_statement"]
117
+ });
118
+ }
119
+ };
120
+
121
+ Blockly.Blocks['sound_seteffectto'] = {
122
+ /**
123
+ * Block to set the audio effect
124
+ * @this Blockly.Block
125
+ */
126
+ init: function() {
127
+ this.jsonInit({
128
+ "message0": Blockly.Msg.SOUND_SETEFFECTO,
129
+ "args0": [
130
+ {
131
+ "type": "field_dropdown",
132
+ "name": "EFFECT",
133
+ "options": [
134
+ [Blockly.Msg.SOUND_EFFECTS_PITCH, 'PITCH'],
135
+ [Blockly.Msg.SOUND_EFFECTS_PAN, 'PAN']
136
+ ]
137
+ },
138
+ {
139
+ "type": "input_value",
140
+ "name": "VALUE"
141
+ }
142
+ ],
143
+ "category": Blockly.Categories.sound,
144
+ "extensions": ["colours_sounds", "shape_statement"]
145
+ });
146
+ }
147
+ };
148
+
149
+
150
+ Blockly.Blocks['sound_changeeffectby'] = {
151
+ /**
152
+ * Block to change the audio effect
153
+ * @this Blockly.Block
154
+ */
155
+ init: function() {
156
+ this.jsonInit({
157
+ "message0": Blockly.Msg.SOUND_CHANGEEFFECTBY,
158
+ "args0": [
159
+ {
160
+ "type": "field_dropdown",
161
+ "name": "EFFECT",
162
+ "options": [
163
+ [Blockly.Msg.SOUND_EFFECTS_PITCH, 'PITCH'],
164
+ [Blockly.Msg.SOUND_EFFECTS_PAN, 'PAN']
165
+ ]
166
+ },
167
+ {
168
+ "type": "input_value",
169
+ "name": "VALUE"
170
+ }
171
+ ],
172
+ "category": Blockly.Categories.sound,
173
+ "extensions": ["colours_sounds", "shape_statement"]
174
+ });
175
+ }
176
+ };
177
+
178
+ Blockly.Blocks['sound_cleareffects'] = {
179
+ /**
180
+ * Block to clear audio effects
181
+ * @this Blockly.Block
182
+ */
183
+ init: function() {
184
+ this.jsonInit({
185
+ "message0": Blockly.Msg.SOUND_CLEAREFFECTS,
186
+ "category": Blockly.Categories.sound,
187
+ "extensions": ["colours_sounds", "shape_statement"]
188
+ });
189
+ }
190
+ };
191
+
192
+ Blockly.Blocks['sound_changevolumeby'] = {
193
+ /**
194
+ * Block to change the sprite's volume by a certain value
195
+ * @this Blockly.Block
196
+ */
197
+ init: function() {
198
+ this.jsonInit({
199
+ "message0": Blockly.Msg.SOUND_CHANGEVOLUMEBY,
200
+ "args0": [
201
+ {
202
+ "type": "input_value",
203
+ "name": "VOLUME"
204
+ }
205
+ ],
206
+ "category": Blockly.Categories.sound,
207
+ "extensions": ["colours_sounds", "shape_statement"]
208
+ });
209
+ }
210
+ };
211
+
212
+ Blockly.Blocks['sound_setvolumeto'] = {
213
+ /**
214
+ * Block to set the sprite's volume to a certain percent
215
+ * @this Blockly.Block
216
+ */
217
+ init: function() {
218
+ this.jsonInit({
219
+ "message0": Blockly.Msg.SOUND_SETVOLUMETO,
220
+ "args0": [
221
+ {
222
+ "type": "input_value",
223
+ "name": "VOLUME"
224
+ }
225
+ ],
226
+ "category": Blockly.Categories.sound,
227
+ "extensions": ["colours_sounds", "shape_statement"]
228
+ });
229
+ }
230
+ };
231
+
232
+ Blockly.Blocks['sound_volume'] = {
233
+ /**
234
+ * Block to report volume
235
+ * @this Blockly.Block
236
+ */
237
+ init: function() {
238
+ this.jsonInit({
239
+ "message0": Blockly.Msg.SOUND_VOLUME,
240
+ "category": Blockly.Categories.sound,
241
+ "checkboxInFlyout": true,
242
+ "extensions": ["colours_sounds", "output_number"]
243
+ });
244
+ }
245
+ };
@@ -0,0 +1,264 @@
1
+ /**
2
+ * @license
3
+ * Visual Blocks Editor
4
+ *
5
+ * Copyright 2017 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 Extensions for vertical blocks in scratch-blocks.
23
+ * The following extensions can be used to describe a block in Scratch terms.
24
+ * For instance, a block in the operators colour scheme with a number output
25
+ * would have the "colours_operators" and "output_number" extensions.
26
+ * @author fenichel@google.com (Rachel Fenichel)
27
+ */
28
+ 'use strict';
29
+
30
+ goog.provide('Blockly.ScratchBlocks.VerticalExtensions');
31
+
32
+ goog.require('Blockly.Colours');
33
+ goog.require('Blockly.constants');
34
+
35
+
36
+ /**
37
+ * Helper function that generates an extension based on a category name.
38
+ * The generated function will set primary, secondary, and tertiary colours
39
+ * based on the category name.
40
+ * @param {String} category The name of the category to set colours for.
41
+ * @return {function} An extension function that sets colours based on the given
42
+ * category.
43
+ */
44
+ Blockly.ScratchBlocks.VerticalExtensions.colourHelper = function(category) {
45
+ var colours = Blockly.Colours[category];
46
+ if (!(colours && colours.primary && colours.secondary && colours.tertiary)) {
47
+ throw new Error('Could not find colours for category "' + category + '"');
48
+ }
49
+ /**
50
+ * Set the primary, secondary, and tertiary colours on this block for the
51
+ * given category.
52
+ * @this {Blockly.Block}
53
+ */
54
+ return function() {
55
+ this.setColourFromRawValues_(colours.primary, colours.secondary,
56
+ colours.tertiary);
57
+ };
58
+ };
59
+
60
+ /**
61
+ * Extension to set the colours of a text field, which are all the same.
62
+ */
63
+ Blockly.ScratchBlocks.VerticalExtensions.COLOUR_TEXTFIELD = function() {
64
+ this.setColourFromRawValues_(Blockly.Colours.textField,
65
+ Blockly.Colours.textField, Blockly.Colours.textField);
66
+ };
67
+
68
+ /**
69
+ * Extension to make a block fit into a stack of statements, regardless of its
70
+ * inputs. That means the block should have a previous connection and a next
71
+ * connection and have inline inputs.
72
+ * @this {Blockly.Block}
73
+ * @readonly
74
+ */
75
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_STATEMENT = function() {
76
+ this.setInputsInline(true);
77
+ this.setPreviousStatement(true, null);
78
+ this.setNextStatement(true, null);
79
+ };
80
+
81
+ /**
82
+ * Extension to make a block be shaped as a hat block, regardless of its
83
+ * inputs. That means the block should have a next connection and have inline
84
+ * inputs, but have no previous connection.
85
+ * @this {Blockly.Block}
86
+ * @readonly
87
+ */
88
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_HAT = function() {
89
+ this.setInputsInline(true);
90
+ this.setNextStatement(true, null);
91
+ };
92
+
93
+ /**
94
+ * Extension to make a block be shaped as an end block, regardless of its
95
+ * inputs. That means the block should have a previous connection and have
96
+ * inline inputs, but have no next connection.
97
+ * @this {Blockly.Block}
98
+ * @readonly
99
+ */
100
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_END = function() {
101
+ this.setInputsInline(true);
102
+ this.setPreviousStatement(true, null);
103
+ };
104
+
105
+ /**
106
+ * Extension to make represent a number reporter in Scratch-Blocks.
107
+ * That means the block has inline inputs, a round output shape, and a 'Number'
108
+ * output type.
109
+ * @this {Blockly.Block}
110
+ * @readonly
111
+ */
112
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_NUMBER = function() {
113
+ this.setInputsInline(true);
114
+ this.setOutputShape(Blockly.OUTPUT_SHAPE_ROUND);
115
+ this.setOutput(true, 'Number');
116
+ };
117
+
118
+ /**
119
+ * Extension to make represent a string reporter in Scratch-Blocks.
120
+ * That means the block has inline inputs, a round output shape, and a 'String'
121
+ * output type.
122
+ * @this {Blockly.Block}
123
+ * @readonly
124
+ */
125
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_STRING = function() {
126
+ this.setInputsInline(true);
127
+ this.setOutputShape(Blockly.OUTPUT_SHAPE_ROUND);
128
+ this.setOutput(true, 'String');
129
+ };
130
+
131
+ /**
132
+ * Extension to make represent a boolean reporter in Scratch-Blocks.
133
+ * That means the block has inline inputs, a round output shape, and a 'Boolean'
134
+ * output type.
135
+ * @this {Blockly.Block}
136
+ * @readonly
137
+ */
138
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_BOOLEAN = function() {
139
+ this.setInputsInline(true);
140
+ this.setOutputShape(Blockly.OUTPUT_SHAPE_HEXAGONAL);
141
+ this.setOutput(true, 'Boolean');
142
+ };
143
+
144
+ /**
145
+ * Mixin to add a context menu for a procedure definition block.
146
+ * It adds the "edit" option and removes the "duplicate" option.
147
+ * @mixin
148
+ * @augments Blockly.Block
149
+ * @package
150
+ * @readonly
151
+ */
152
+ Blockly.ScratchBlocks.VerticalExtensions.PROCEDURE_DEF_CONTEXTMENU = {
153
+ /**
154
+ * Add the "edit" option and removes the "duplicate" option from the context
155
+ * menu.
156
+ * @param {!Array.<!Object>} menuOptions List of menu options to edit.
157
+ * @this Blockly.Block
158
+ */
159
+ customContextMenu: function(menuOptions) {
160
+ // Add the edit option at the end.
161
+ menuOptions.push(Blockly.Procedures.makeEditOption(this));
162
+
163
+ // Find the delete option and update its callback to be specific to
164
+ // functions.
165
+ for (var i = 0, option; option = menuOptions[i]; i++) {
166
+ if (option.text == Blockly.Msg.DELETE_BLOCK) {
167
+ var input = this.getInput('custom_block');
168
+ // this is the root block, not the shadow block.
169
+ if (input && input.connection && input.connection.targetBlock()) {
170
+ var procCode = input.connection.targetBlock().getProcCode();
171
+ } else {
172
+ return;
173
+ }
174
+ var rootBlock = this;
175
+ option.callback = function() {
176
+ var didDelete = Blockly.Procedures.deleteProcedureDefCallback(
177
+ procCode, rootBlock);
178
+ if (!didDelete) {
179
+ alert(Blockly.Msg.PROCEDURE_USED);
180
+ }
181
+ };
182
+ }
183
+ }
184
+ // Find and remove the duplicate option
185
+ for (var i = 0, option; option = menuOptions[i]; i++) {
186
+ if (option.text == Blockly.Msg.DUPLICATE) {
187
+ menuOptions.splice(i, 1);
188
+ break;
189
+ }
190
+ }
191
+ }
192
+ };
193
+
194
+ /**
195
+ * Mixin to add a context menu for a procedure call block.
196
+ * It adds the "edit" option and the "define" option.
197
+ * @mixin
198
+ * @augments Blockly.Block
199
+ * @package
200
+ * @readonly
201
+ */
202
+ Blockly.ScratchBlocks.VerticalExtensions.PROCEDURE_CALL_CONTEXTMENU = {
203
+ /**
204
+ * Add the "edit" option to the context menu.
205
+ * @todo Add "go to definition" option once implemented.
206
+ * @param {!Array.<!Object>} menuOptions List of menu options to edit.
207
+ * @this Blockly.Block
208
+ */
209
+ customContextMenu: function(menuOptions) {
210
+ menuOptions.push(Blockly.Procedures.makeEditOption(this));
211
+ }
212
+ };
213
+
214
+
215
+ Blockly.ScratchBlocks.VerticalExtensions.SCRATCH_EXTENSION = function() {
216
+ this.isScratchExtension = true;
217
+ };
218
+ /**
219
+ * Register all extensions for scratch-blocks.
220
+ * @package
221
+ */
222
+ Blockly.ScratchBlocks.VerticalExtensions.registerAll = function() {
223
+ var categoryNames =
224
+ ['control', 'data', 'data_lists', 'sounds', 'motion', 'looks', 'event',
225
+ 'sensing', 'pen', 'operators', 'more'];
226
+ // Register functions for all category colours.
227
+ for (var i = 0; i < categoryNames.length; i++) {
228
+ var name = categoryNames[i];
229
+ Blockly.Extensions.register('colours_' + name,
230
+ Blockly.ScratchBlocks.VerticalExtensions.colourHelper(name));
231
+ }
232
+
233
+ // Text fields transcend categories.
234
+ Blockly.Extensions.register('colours_textfield',
235
+ Blockly.ScratchBlocks.VerticalExtensions.COLOUR_TEXTFIELD);
236
+
237
+ // Register extensions for common block shapes.
238
+ Blockly.Extensions.register('shape_statement',
239
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_STATEMENT);
240
+ Blockly.Extensions.register('shape_hat',
241
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_HAT);
242
+ Blockly.Extensions.register('shape_end',
243
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_END);
244
+
245
+ // Output shapes and types are related.
246
+ Blockly.Extensions.register('output_number',
247
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_NUMBER);
248
+ Blockly.Extensions.register('output_string',
249
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_STRING);
250
+ Blockly.Extensions.register('output_boolean',
251
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_BOOLEAN);
252
+
253
+ // Custom procedures have interesting context menus.
254
+ Blockly.Extensions.registerMixin('procedure_def_contextmenu',
255
+ Blockly.ScratchBlocks.VerticalExtensions.PROCEDURE_DEF_CONTEXTMENU);
256
+ Blockly.Extensions.registerMixin('procedure_call_contextmenu',
257
+ Blockly.ScratchBlocks.VerticalExtensions.PROCEDURE_CALL_CONTEXTMENU);
258
+
259
+ // Extension blocks have slightly different block rendering.
260
+ Blockly.Extensions.register('scratch_extension',
261
+ Blockly.ScratchBlocks.VerticalExtensions.SCRATCH_EXTENSION);
262
+ };
263
+
264
+ Blockly.ScratchBlocks.VerticalExtensions.registerAll();
@@ -0,0 +1 @@
1
+ goog.provide('Blockly.Blocks');
@@ -0,0 +1 @@
1
+ var Blockly={Blocks:{}};
@@ -0,0 +1 @@
1
+ goog.provide('Blockly.Blocks');