@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
@@ -0,0 +1,246 @@
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
+ "colourQuaternary": Blockly.Colours.sounds.quaternary,
63
+ "extensions": ["output_string"]
64
+ });
65
+ }
66
+ };
67
+
68
+ Blockly.Blocks['sound_play'] = {
69
+ /**
70
+ * Block to play sound.
71
+ * @this Blockly.Block
72
+ */
73
+ init: function() {
74
+ this.jsonInit({
75
+ "message0": Blockly.Msg.SOUND_PLAY,
76
+ "args0": [
77
+ {
78
+ "type": "input_value",
79
+ "name": "SOUND_MENU"
80
+ }
81
+ ],
82
+ "category": Blockly.Categories.sound,
83
+ "extensions": ["colours_sounds", "shape_statement"]
84
+ });
85
+ }
86
+ };
87
+
88
+ Blockly.Blocks['sound_playuntildone'] = {
89
+ /**
90
+ * Block to play sound until done.
91
+ * @this Blockly.Block
92
+ */
93
+ init: function() {
94
+ this.jsonInit({
95
+ "message0": Blockly.Msg.SOUND_PLAYUNTILDONE,
96
+ "args0": [
97
+ {
98
+ "type": "input_value",
99
+ "name": "SOUND_MENU"
100
+ }
101
+ ],
102
+ "category": Blockly.Categories.sound,
103
+ "extensions": ["colours_sounds", "shape_statement"]
104
+ });
105
+ }
106
+ };
107
+
108
+ Blockly.Blocks['sound_stopallsounds'] = {
109
+ /**
110
+ * Block to stop all sounds
111
+ * @this Blockly.Block
112
+ */
113
+ init: function() {
114
+ this.jsonInit({
115
+ "message0": Blockly.Msg.SOUND_STOPALLSOUNDS,
116
+ "category": Blockly.Categories.sound,
117
+ "extensions": ["colours_sounds", "shape_statement"]
118
+ });
119
+ }
120
+ };
121
+
122
+ Blockly.Blocks['sound_seteffectto'] = {
123
+ /**
124
+ * Block to set the audio effect
125
+ * @this Blockly.Block
126
+ */
127
+ init: function() {
128
+ this.jsonInit({
129
+ "message0": Blockly.Msg.SOUND_SETEFFECTO,
130
+ "args0": [
131
+ {
132
+ "type": "field_dropdown",
133
+ "name": "EFFECT",
134
+ "options": [
135
+ [Blockly.Msg.SOUND_EFFECTS_PITCH, 'PITCH'],
136
+ [Blockly.Msg.SOUND_EFFECTS_PAN, 'PAN']
137
+ ]
138
+ },
139
+ {
140
+ "type": "input_value",
141
+ "name": "VALUE"
142
+ }
143
+ ],
144
+ "category": Blockly.Categories.sound,
145
+ "extensions": ["colours_sounds", "shape_statement"]
146
+ });
147
+ }
148
+ };
149
+
150
+
151
+ Blockly.Blocks['sound_changeeffectby'] = {
152
+ /**
153
+ * Block to change the audio effect
154
+ * @this Blockly.Block
155
+ */
156
+ init: function() {
157
+ this.jsonInit({
158
+ "message0": Blockly.Msg.SOUND_CHANGEEFFECTBY,
159
+ "args0": [
160
+ {
161
+ "type": "field_dropdown",
162
+ "name": "EFFECT",
163
+ "options": [
164
+ [Blockly.Msg.SOUND_EFFECTS_PITCH, 'PITCH'],
165
+ [Blockly.Msg.SOUND_EFFECTS_PAN, 'PAN']
166
+ ]
167
+ },
168
+ {
169
+ "type": "input_value",
170
+ "name": "VALUE"
171
+ }
172
+ ],
173
+ "category": Blockly.Categories.sound,
174
+ "extensions": ["colours_sounds", "shape_statement"]
175
+ });
176
+ }
177
+ };
178
+
179
+ Blockly.Blocks['sound_cleareffects'] = {
180
+ /**
181
+ * Block to clear audio effects
182
+ * @this Blockly.Block
183
+ */
184
+ init: function() {
185
+ this.jsonInit({
186
+ "message0": Blockly.Msg.SOUND_CLEAREFFECTS,
187
+ "category": Blockly.Categories.sound,
188
+ "extensions": ["colours_sounds", "shape_statement"]
189
+ });
190
+ }
191
+ };
192
+
193
+ Blockly.Blocks['sound_changevolumeby'] = {
194
+ /**
195
+ * Block to change the sprite's volume by a certain value
196
+ * @this Blockly.Block
197
+ */
198
+ init: function() {
199
+ this.jsonInit({
200
+ "message0": Blockly.Msg.SOUND_CHANGEVOLUMEBY,
201
+ "args0": [
202
+ {
203
+ "type": "input_value",
204
+ "name": "VOLUME"
205
+ }
206
+ ],
207
+ "category": Blockly.Categories.sound,
208
+ "extensions": ["colours_sounds", "shape_statement"]
209
+ });
210
+ }
211
+ };
212
+
213
+ Blockly.Blocks['sound_setvolumeto'] = {
214
+ /**
215
+ * Block to set the sprite's volume to a certain percent
216
+ * @this Blockly.Block
217
+ */
218
+ init: function() {
219
+ this.jsonInit({
220
+ "message0": Blockly.Msg.SOUND_SETVOLUMETO,
221
+ "args0": [
222
+ {
223
+ "type": "input_value",
224
+ "name": "VOLUME"
225
+ }
226
+ ],
227
+ "category": Blockly.Categories.sound,
228
+ "extensions": ["colours_sounds", "shape_statement"]
229
+ });
230
+ }
231
+ };
232
+
233
+ Blockly.Blocks['sound_volume'] = {
234
+ /**
235
+ * Block to report volume
236
+ * @this Blockly.Block
237
+ */
238
+ init: function() {
239
+ this.jsonInit({
240
+ "message0": Blockly.Msg.SOUND_VOLUME,
241
+ "category": Blockly.Categories.sound,
242
+ "checkboxInFlyout": true,
243
+ "extensions": ["colours_sounds", "output_number"]
244
+ });
245
+ }
246
+ };
@@ -0,0 +1,289 @@
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, tertiary, and quaternary
39
+ * colours 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
+ colours.quaternary)) {
48
+ throw new Error('Could not find colours for category "' + category + '"');
49
+ }
50
+ /**
51
+ * Set the primary, secondary, tertiary, and quaternary colours on this block for
52
+ * the given category.
53
+ * @this {Blockly.Block}
54
+ */
55
+ return function() {
56
+ this.setColourFromRawValues_(colours.primary, colours.secondary,
57
+ colours.tertiary, colours.quaternary);
58
+ };
59
+ };
60
+
61
+ /**
62
+ * Extension to set the colours of a text field, which are all the same.
63
+ */
64
+ Blockly.ScratchBlocks.VerticalExtensions.COLOUR_TEXTFIELD = function() {
65
+ this.setColourFromRawValues_(Blockly.Colours.textField,
66
+ Blockly.Colours.textField, Blockly.Colours.textField,
67
+ Blockly.Colours.textField);
68
+ };
69
+
70
+ /**
71
+ * Extension to make a block fit into a stack of statements, regardless of its
72
+ * inputs. That means the block should have a previous connection and a next
73
+ * connection and have inline inputs.
74
+ * @this {Blockly.Block}
75
+ * @readonly
76
+ */
77
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_STATEMENT = function() {
78
+ this.setInputsInline(true);
79
+ this.setPreviousStatement(true, null);
80
+ this.setNextStatement(true, null);
81
+ };
82
+
83
+ /**
84
+ * Extension to make a block be shaped as a hat block, regardless of its
85
+ * inputs. That means the block should have a next connection and have inline
86
+ * inputs, but have no previous connection.
87
+ * @this {Blockly.Block}
88
+ * @readonly
89
+ */
90
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_HAT = function() {
91
+ this.setInputsInline(true);
92
+ this.setNextStatement(true, null);
93
+ };
94
+
95
+ /**
96
+ * Extension to make a block be shaped as an end block, regardless of its
97
+ * inputs. That means the block should have a previous connection and have
98
+ * inline inputs, but have no next connection.
99
+ * @this {Blockly.Block}
100
+ * @readonly
101
+ */
102
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_END = function() {
103
+ this.setInputsInline(true);
104
+ this.setPreviousStatement(true, null);
105
+ };
106
+
107
+ /**
108
+ * Extension to make represent a number reporter in Scratch-Blocks.
109
+ * That means the block has inline inputs, a round output shape, and a 'Number'
110
+ * output type.
111
+ * @this {Blockly.Block}
112
+ * @readonly
113
+ */
114
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_NUMBER = function() {
115
+ this.setInputsInline(true);
116
+ this.setOutputShape(Blockly.OUTPUT_SHAPE_ROUND);
117
+ this.setOutput(true, 'Number');
118
+ };
119
+
120
+ /**
121
+ * Extension to make represent a string reporter in Scratch-Blocks.
122
+ * That means the block has inline inputs, a round output shape, and a 'String'
123
+ * output type.
124
+ * @this {Blockly.Block}
125
+ * @readonly
126
+ */
127
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_STRING = function() {
128
+ this.setInputsInline(true);
129
+ this.setOutputShape(Blockly.OUTPUT_SHAPE_ROUND);
130
+ this.setOutput(true, 'String');
131
+ };
132
+
133
+ /**
134
+ * Extension to make represent a boolean reporter in Scratch-Blocks.
135
+ * That means the block has inline inputs, a round output shape, and a 'Boolean'
136
+ * output type.
137
+ * @this {Blockly.Block}
138
+ * @readonly
139
+ */
140
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_BOOLEAN = function() {
141
+ this.setInputsInline(true);
142
+ this.setOutputShape(Blockly.OUTPUT_SHAPE_HEXAGONAL);
143
+ this.setOutput(true, 'Boolean');
144
+ };
145
+
146
+ /**
147
+ * Mixin to add a context menu for a procedure definition block.
148
+ * It adds the "edit" option and removes the "duplicate" option.
149
+ * @mixin
150
+ * @augments Blockly.Block
151
+ * @package
152
+ * @readonly
153
+ */
154
+ Blockly.ScratchBlocks.VerticalExtensions.PROCEDURE_DEF_CONTEXTMENU = {
155
+ /**
156
+ * Add the "edit" option and removes the "duplicate" option from the context
157
+ * menu.
158
+ * @param {!Array.<!Object>} menuOptions List of menu options to edit.
159
+ * @this Blockly.Block
160
+ */
161
+ customContextMenu: function(menuOptions) {
162
+ // Add the edit option at the end.
163
+ menuOptions.push(Blockly.Procedures.makeEditOption(this));
164
+
165
+ // Find the delete option and update its callback to be specific to
166
+ // functions.
167
+ for (var i = 0, option; option = menuOptions[i]; i++) {
168
+ if (option.text == Blockly.Msg.DELETE_BLOCK) {
169
+ var input = this.getInput('custom_block');
170
+ // this is the root block, not the shadow block.
171
+ if (input && input.connection && input.connection.targetBlock()) {
172
+ var procCode = input.connection.targetBlock().getProcCode();
173
+ } else {
174
+ return;
175
+ }
176
+ var rootBlock = this;
177
+ option.callback = function() {
178
+ var didDelete = Blockly.Procedures.deleteProcedureDefCallback(
179
+ procCode, rootBlock);
180
+ if (!didDelete) {
181
+ alert(Blockly.Msg.PROCEDURE_USED);
182
+ }
183
+ };
184
+ }
185
+ }
186
+ // Find and remove the duplicate option
187
+ for (var i = 0, option; option = menuOptions[i]; i++) {
188
+ if (option.text == Blockly.Msg.DUPLICATE) {
189
+ menuOptions.splice(i, 1);
190
+ break;
191
+ }
192
+ }
193
+ }
194
+ };
195
+
196
+ /**
197
+ * Mixin to add a context menu for a procedure call block.
198
+ * It adds the "edit" option and the "define" option.
199
+ * @mixin
200
+ * @augments Blockly.Block
201
+ * @package
202
+ * @readonly
203
+ */
204
+ Blockly.ScratchBlocks.VerticalExtensions.PROCEDURE_CALL_CONTEXTMENU = {
205
+ /**
206
+ * Add the "edit" option to the context menu.
207
+ * @todo Add "go to definition" option once implemented.
208
+ * @param {!Array.<!Object>} menuOptions List of menu options to edit.
209
+ * @this Blockly.Block
210
+ */
211
+ customContextMenu: function(menuOptions) {
212
+ menuOptions.push(Blockly.Procedures.makeEditOption(this));
213
+ if (
214
+ !this.isInFlyout &&
215
+ Blockly.Procedures.USER_CAN_CHANGE_CALL_TYPE &&
216
+ this.workspace.procedureReturnsEnabled
217
+ ) {
218
+ menuOptions.push(Blockly.Procedures.makeChangeTypeOption(this));
219
+ }
220
+ }
221
+ };
222
+
223
+ Blockly.ScratchBlocks.VerticalExtensions.FROM_EXTENSION = function() {
224
+ this.isFromExtension = true;
225
+ };
226
+
227
+ Blockly.ScratchBlocks.VerticalExtensions.DEFAULT_EXTENSION_COLORS = function() {
228
+ this.usesDefaultExtensionColors = true;
229
+ };
230
+
231
+ Blockly.ScratchBlocks.VerticalExtensions.SCRATCH_EXTENSION = function() {
232
+ this.isScratchExtension = true;
233
+ };
234
+
235
+ /**
236
+ * Register all extensions for scratch-blocks.
237
+ * @package
238
+ */
239
+ Blockly.ScratchBlocks.VerticalExtensions.registerAll = function() {
240
+ var categoryNames =
241
+ ['control', 'data', 'data_lists', 'sounds', 'motion', 'looks', 'event',
242
+ 'sensing', 'pen', 'operators', 'more'];
243
+ // Register functions for all category colours.
244
+ for (var i = 0; i < categoryNames.length; i++) {
245
+ var name = categoryNames[i];
246
+ Blockly.Extensions.register('colours_' + name,
247
+ Blockly.ScratchBlocks.VerticalExtensions.colourHelper(name));
248
+ }
249
+
250
+ // Text fields transcend categories.
251
+ Blockly.Extensions.register('colours_textfield',
252
+ Blockly.ScratchBlocks.VerticalExtensions.COLOUR_TEXTFIELD);
253
+
254
+ // Register extensions for common block shapes.
255
+ Blockly.Extensions.register('shape_statement',
256
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_STATEMENT);
257
+ Blockly.Extensions.register('shape_hat',
258
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_HAT);
259
+ Blockly.Extensions.register('shape_end',
260
+ Blockly.ScratchBlocks.VerticalExtensions.SHAPE_END);
261
+
262
+ // Output shapes and types are related.
263
+ Blockly.Extensions.register('output_number',
264
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_NUMBER);
265
+ Blockly.Extensions.register('output_string',
266
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_STRING);
267
+ Blockly.Extensions.register('output_boolean',
268
+ Blockly.ScratchBlocks.VerticalExtensions.OUTPUT_BOOLEAN);
269
+
270
+ // Custom procedures have interesting context menus.
271
+ Blockly.Extensions.registerMixin('procedure_def_contextmenu',
272
+ Blockly.ScratchBlocks.VerticalExtensions.PROCEDURE_DEF_CONTEXTMENU);
273
+ Blockly.Extensions.registerMixin('procedure_call_contextmenu',
274
+ Blockly.ScratchBlocks.VerticalExtensions.PROCEDURE_CALL_CONTEXTMENU);
275
+
276
+ // Given to all blocks from an extension.
277
+ Blockly.Extensions.register('from_extension',
278
+ Blockly.ScratchBlocks.VerticalExtensions.FROM_EXTENSION);
279
+
280
+ // Given to blocks that use the default extension colors ("pen")
281
+ Blockly.Extensions.register('default_extension_colors',
282
+ Blockly.ScratchBlocks.VerticalExtensions.DEFAULT_EXTENSION_COLORS);
283
+
284
+ // Misleading name. Given to blocks that have an extension icon.
285
+ Blockly.Extensions.register('scratch_extension',
286
+ Blockly.ScratchBlocks.VerticalExtensions.SCRATCH_EXTENSION);
287
+ };
288
+
289
+ 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');