@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.
- package/.nvmrc +1 -0
- package/LICENSE +674 -0
- package/README.md +57 -0
- package/TRADEMARK +1 -0
- package/blockly_compressed_horizontal.js +2268 -0
- package/blockly_compressed_vertical.js +2296 -0
- package/blockly_uncompressed_horizontal.js +1212 -0
- package/blockly_uncompressed_vertical.js +1212 -0
- package/blocks_common/colour.js +61 -0
- package/blocks_common/math.js +159 -0
- package/blocks_common/matrix.js +54 -0
- package/blocks_common/note.js +58 -0
- package/blocks_common/text.js +57 -0
- package/blocks_compressed.js +37 -0
- package/blocks_compressed_horizontal.js +68 -0
- package/blocks_compressed_vertical.js +216 -0
- package/blocks_horizontal/control.js +212 -0
- package/blocks_horizontal/default_toolbox.js +139 -0
- package/blocks_horizontal/event.js +190 -0
- package/blocks_horizontal/wedo.js +325 -0
- package/blocks_vertical/control.js +532 -0
- package/blocks_vertical/data.js +666 -0
- package/blocks_vertical/default_toolbox.js +571 -0
- package/blocks_vertical/event.js +329 -0
- package/blocks_vertical/extensions.js +294 -0
- package/blocks_vertical/looks.js +591 -0
- package/blocks_vertical/motion.js +587 -0
- package/blocks_vertical/operators.js +470 -0
- package/blocks_vertical/procedures.js +1051 -0
- package/blocks_vertical/sensing.js +555 -0
- package/blocks_vertical/sound.js +246 -0
- package/blocks_vertical/vertical_extensions.js +289 -0
- package/build/gen_blocks.js +1 -0
- package/build/test_expect.js +1 -0
- package/build/test_input.js +1 -0
- package/build.py +647 -0
- package/cleanup.sh +101 -0
- package/core/block.js +1837 -0
- package/core/block_animations.js +107 -0
- package/core/block_drag_surface.js +299 -0
- package/core/block_dragger.js +424 -0
- package/core/block_events.js +531 -0
- package/core/block_render_svg_horizontal.js +892 -0
- package/core/block_render_svg_vertical.js +1734 -0
- package/core/block_svg.js +1355 -0
- package/core/blockly.js +620 -0
- package/core/blocks.js +37 -0
- package/core/bubble.js +664 -0
- package/core/bubble_dragger.js +285 -0
- package/core/colours.js +177 -0
- package/core/comment.js +293 -0
- package/core/comment_events.js +539 -0
- package/core/connection.js +776 -0
- package/core/connection_db.js +300 -0
- package/core/constants.js +408 -0
- package/core/contextmenu.js +534 -0
- package/core/css.js +1354 -0
- package/core/data_category.js +490 -0
- package/core/dragged_connection_manager.js +260 -0
- package/core/dropdowndiv.js +408 -0
- package/core/events.js +429 -0
- package/core/events_abstract.js +113 -0
- package/core/extensions.js +450 -0
- package/core/field.js +810 -0
- package/core/field_angle.js +410 -0
- package/core/field_checkbox.js +133 -0
- package/core/field_colour.js +253 -0
- package/core/field_colour_slider.js +387 -0
- package/core/field_date.js +353 -0
- package/core/field_dropdown.js +447 -0
- package/core/field_iconmenu.js +309 -0
- package/core/field_image.js +200 -0
- package/core/field_label.js +136 -0
- package/core/field_label_serializable.js +125 -0
- package/core/field_matrix.js +566 -0
- package/core/field_note.js +850 -0
- package/core/field_number.js +366 -0
- package/core/field_numberdropdown.js +77 -0
- package/core/field_textdropdown.js +164 -0
- package/core/field_textinput.js +675 -0
- package/core/field_textinput_removable.js +105 -0
- package/core/field_variable.js +385 -0
- package/core/field_variable_getter.js +185 -0
- package/core/field_vertical_separator.js +161 -0
- package/core/flyout_base.js +935 -0
- package/core/flyout_button.js +324 -0
- package/core/flyout_dragger.js +83 -0
- package/core/flyout_extension_category_header.js +159 -0
- package/core/flyout_horizontal.js +475 -0
- package/core/flyout_vertical.js +770 -0
- package/core/generator.js +426 -0
- package/core/gesture.js +1010 -0
- package/core/grid.js +227 -0
- package/core/icon.js +205 -0
- package/core/inject.js +496 -0
- package/core/input.js +285 -0
- package/core/insertion_marker_manager.js +678 -0
- package/core/intersection_observer.js +102 -0
- package/core/msg.js +62 -0
- package/core/mutator.js +426 -0
- package/core/names.js +198 -0
- package/core/options.js +244 -0
- package/core/procedures.js +739 -0
- package/core/rendered_connection.js +417 -0
- package/core/scratch_block_comment.js +646 -0
- package/core/scratch_blocks_utils.js +246 -0
- package/core/scratch_bubble.js +699 -0
- package/core/scratch_events.js +131 -0
- package/core/scratch_msgs.js +85 -0
- package/core/scrollbar.js +875 -0
- package/core/toolbox.js +803 -0
- package/core/tooltip.js +337 -0
- package/core/touch.js +226 -0
- package/core/trashcan.js +343 -0
- package/core/ui_events.js +91 -0
- package/core/ui_menu_utils.js +68 -0
- package/core/utils.js +825 -0
- package/core/variable_events.js +259 -0
- package/core/variable_map.js +415 -0
- package/core/variable_model.js +116 -0
- package/core/variables.js +674 -0
- package/core/warning.js +199 -0
- package/core/widgetdiv.js +344 -0
- package/core/workspace.js +673 -0
- package/core/workspace_audio.js +170 -0
- package/core/workspace_comment.js +426 -0
- package/core/workspace_comment_render_svg.js +706 -0
- package/core/workspace_comment_svg.js +609 -0
- package/core/workspace_drag_surface_svg.js +195 -0
- package/core/workspace_dragger.js +132 -0
- package/core/workspace_svg.js +2382 -0
- package/core/xml.js +930 -0
- package/core/zoom_controls.js +301 -0
- package/dist/horizontal.js +222 -0
- package/dist/vertical.js +222 -0
- package/dist/web/horizontal.js +232 -0
- package/dist/web/vertical.js +232 -0
- package/i18n/common.py +234 -0
- package/i18n/create_messages.py +162 -0
- package/i18n/create_scratch_msgs.js +69 -0
- package/i18n/dedup_json.py +73 -0
- package/i18n/js_to_json.js +46 -0
- package/i18n/js_to_json.py +136 -0
- package/i18n/json_to_js.js +52 -0
- package/i18n/json_to_js.py +185 -0
- package/i18n/sync_tx_translations.js +111 -0
- package/i18n/test_scratch_msgs.js +87 -0
- package/i18n/tests.py +47 -0
- package/i18n/xliff_to_json.py +232 -0
- package/local_build.sh +70 -0
- package/media/click.mp3 +0 -0
- package/media/click.ogg +0 -0
- package/media/click.wav +0 -0
- package/media/comment-arrow-down.svg +10 -0
- package/media/comment-arrow-up.svg +10 -0
- package/media/delete-x.svg +10 -0
- package/media/delete.mp3 +0 -0
- package/media/delete.ogg +0 -0
- package/media/delete.wav +0 -0
- package/media/dropdown-arrow-dark.svg +1 -0
- package/media/dropdown-arrow.svg +1 -0
- package/media/extensions/microbit-block-icon.svg +130 -0
- package/media/extensions/music-block-icon.svg +17 -0
- package/media/extensions/pen-block-icon.svg +19 -0
- package/media/extensions/wedo2-block-icon.svg +36 -0
- package/media/eyedropper.svg +22 -0
- package/media/green-flag.svg +17 -0
- package/media/handclosed.cur +0 -0
- package/media/handdelete.cur +0 -0
- package/media/handopen.cur +0 -0
- package/media/icons/arrow.svg +12 -0
- package/media/icons/arrow_button.svg +1 -0
- package/media/icons/control_forever.svg +1 -0
- package/media/icons/control_repeat.svg +1 -0
- package/media/icons/control_stop.svg +1 -0
- package/media/icons/control_wait.svg +1 -0
- package/media/icons/event_broadcast_blue.svg +1 -0
- package/media/icons/event_broadcast_coral.svg +1 -0
- package/media/icons/event_broadcast_green.svg +1 -0
- package/media/icons/event_broadcast_magenta.svg +1 -0
- package/media/icons/event_broadcast_orange.svg +1 -0
- package/media/icons/event_broadcast_purple.svg +1 -0
- package/media/icons/event_when-broadcast-received_blue.svg +1 -0
- package/media/icons/event_when-broadcast-received_coral.svg +1 -0
- package/media/icons/event_when-broadcast-received_green.svg +1 -0
- package/media/icons/event_when-broadcast-received_magenta.svg +1 -0
- package/media/icons/event_when-broadcast-received_orange.svg +1 -0
- package/media/icons/event_when-broadcast-received_purple.svg +1 -0
- package/media/icons/event_whenflagclicked.svg +1 -0
- package/media/icons/remove.svg +19 -0
- package/media/icons/set-led_blue.svg +1 -0
- package/media/icons/set-led_coral.svg +1 -0
- package/media/icons/set-led_green.svg +1 -0
- package/media/icons/set-led_magenta.svg +1 -0
- package/media/icons/set-led_mystery.svg +1 -0
- package/media/icons/set-led_orange.svg +1 -0
- package/media/icons/set-led_purple.svg +1 -0
- package/media/icons/set-led_white.svg +1 -0
- package/media/icons/set-led_yellow.svg +1 -0
- package/media/icons/wedo_motor-clockwise.svg +1 -0
- package/media/icons/wedo_motor-counterclockwise.svg +1 -0
- package/media/icons/wedo_motor-speed_fast.svg +1 -0
- package/media/icons/wedo_motor-speed_med.svg +1 -0
- package/media/icons/wedo_motor-speed_slow.svg +1 -0
- package/media/icons/wedo_when-distance_close.svg +1 -0
- package/media/icons/wedo_when-tilt-backward.svg +1 -0
- package/media/icons/wedo_when-tilt-forward.svg +1 -0
- package/media/icons/wedo_when-tilt-left.svg +1 -0
- package/media/icons/wedo_when-tilt-right.svg +1 -0
- package/media/icons/wedo_when-tilt.svg +1 -0
- package/media/repeat.svg +18 -0
- package/media/rotate-left.svg +1 -0
- package/media/rotate-right.svg +1 -0
- package/media/sprites.png +0 -0
- package/media/status-not-ready.svg +13 -0
- package/media/status-ready.svg +13 -0
- package/media/zoom-in.svg +1 -0
- package/media/zoom-out.svg +1 -0
- package/media/zoom-reset.svg +1 -0
- package/msg/js/en.js +290 -0
- package/msg/json/en.json +285 -0
- package/msg/messages.js +359 -0
- package/msg/scratch_msgs.js +22969 -0
- package/package.json +60 -0
- package/pull_from_blockly.sh +151 -0
- package/renovate.json5 +15 -0
- package/shim/blockly_compressed_horizontal-blocks_compressed.js +1 -0
- package/shim/blockly_compressed_horizontal.Blockly.js +1 -0
- package/shim/blockly_compressed_horizontal.goog.js +1 -0
- package/shim/blockly_compressed_horizontal.js +1 -0
- package/shim/blockly_compressed_vertical-blocks_compressed.js +1 -0
- package/shim/blockly_compressed_vertical.Blockly.js +1 -0
- package/shim/blockly_compressed_vertical.goog.js +1 -0
- package/shim/blockly_compressed_vertical.js +1 -0
- package/shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages.js +1 -0
- package/shim/blocks_compressed_horizontal.js +1 -0
- package/shim/blocks_compressed_vertical-blockly_compressed_vertical-messages.js +1 -0
- package/shim/blocks_compressed_vertical.js +1 -0
- package/shim/gh-pages.js +1 -0
- package/shim/horizontal.js +1 -0
- package/shim/index.js +17 -0
- package/shim/vertical.js +1 -0
- 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');
|