-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathnode_compressed_block.js
294 lines (281 loc) · 107 KB
/
node_compressed_block.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
// Do not edit this file; automatically generated by nodejs node_compress_block.js
'use strict';
/*
Visual Blocks Editor
Copyright 2012 Google Inc.
https://developers.google.com/blockly/
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
Blockly.Blocks.variables={};Blockly.Blocks.procedures={};Blockly.Blocks.colour={};Blockly.Constants={};Blockly.Constants.Colour={};Blockly.Constants.Colour.HUE=20;Blockly.Blocks.colour.HUE=Blockly.Constants.Colour.HUE;
Blockly.defineBlocksWithJsonArray([{"type":"colour_picker","message0":"%1","args0":[{"type":"field_colour","name":"COLOUR","colour":"#ff0000"}],"output":"Colour","colour":"%{BKY_COLOUR_HUE}","helpUrl":"%{BKY_COLOUR_PICKER_HELPURL}","tooltip":"%{BKY_COLOUR_PICKER_TOOLTIP}","extensions":["parent_tooltip_when_inline"]},{"type":"colour_random","message0":"%{BKY_COLOUR_RANDOM_TITLE}","output":"Colour","colour":"%{BKY_COLOUR_HUE}","helpUrl":"%{BKY_COLOUR_RANDOM_HELPURL}","tooltip":"%{BKY_COLOUR_RANDOM_TOOLTIP}"},
{"type":"colour_rgb","message0":"%{BKY_COLOUR_RGB_TITLE} %{BKY_COLOUR_RGB_RED} %1 %{BKY_COLOUR_RGB_GREEN} %2 %{BKY_COLOUR_RGB_BLUE} %3","args0":[{"type":"input_value","name":"RED","check":"Number","align":"RIGHT"},{"type":"input_value","name":"GREEN","check":"Number","align":"RIGHT"},{"type":"input_value","name":"BLUE","check":"Number","align":"RIGHT"}],"output":"Colour","colour":"%{BKY_COLOUR_HUE}","helpUrl":"%{BKY_COLOUR_RGB_HELPURL}","tooltip":"%{BKY_COLOUR_RGB_TOOLTIP}"},{"type":"colour_blend",
"message0":"%{BKY_COLOUR_BLEND_TITLE} %{BKY_COLOUR_BLEND_COLOUR1} "+"%1 %{BKY_COLOUR_BLEND_COLOUR2} %2 %{BKY_COLOUR_BLEND_RATIO} %3","args0":[{"type":"input_value","name":"COLOUR1","check":"Colour","align":"RIGHT"},{"type":"input_value","name":"COLOUR2","check":"Colour","align":"RIGHT"},{"type":"input_value","name":"RATIO","check":"Number","align":"RIGHT"}],"output":"Colour","colour":"%{BKY_COLOUR_HUE}","helpUrl":"%{BKY_COLOUR_BLEND_HELPURL}","tooltip":"%{BKY_COLOUR_BLEND_TOOLTIP}"}]);Blockly.Blocks.lists={};Blockly.Constants.Lists={};Blockly.Constants.Lists.HUE=260;Blockly.Blocks.lists.HUE=Blockly.Constants.Lists.HUE;
Blockly.defineBlocksWithJsonArray([{"type":"lists_create_empty","message0":"%{BKY_LISTS_CREATE_EMPTY_TITLE}","output":"Array","colour":"%{BKY_LISTS_HUE}","tooltip":"%{BKY_LISTS_CREATE_EMPTY_TOOLTIP}","helpUrl":"%{BKY_LISTS_CREATE_EMPTY_HELPURL}"},{"type":"lists_repeat","message0":"%{BKY_LISTS_REPEAT_TITLE}","args0":[{"type":"input_value","name":"ITEM"},{"type":"input_value","name":"NUM","check":"Number"}],"output":"Array","colour":"%{BKY_LISTS_HUE}","tooltip":"%{BKY_LISTS_REPEAT_TOOLTIP}","helpUrl":"%{BKY_LISTS_REPEAT_HELPURL}"},
{"type":"lists_reverse","message0":"%{BKY_LISTS_REVERSE_MESSAGE0}","args0":[{"type":"input_value","name":"LIST","check":"Array"}],"output":"Array","inputsInline":true,"colour":"%{BKY_LISTS_HUE}","tooltip":"%{BKY_LISTS_REVERSE_TOOLTIP}","helpUrl":"%{BKY_LISTS_REVERSE_HELPURL}"},{"type":"lists_isEmpty","message0":"%{BKY_LISTS_ISEMPTY_TITLE}","args0":[{"type":"input_value","name":"VALUE","check":["String","Array"]}],"output":"Boolean","colour":"%{BKY_LISTS_HUE}","tooltip":"%{BKY_LISTS_ISEMPTY_TOOLTIP}",
"helpUrl":"%{BKY_LISTS_ISEMPTY_HELPURL}"},{"type":"lists_length","message0":"%{BKY_LISTS_LENGTH_TITLE}","args0":[{"type":"input_value","name":"VALUE","check":["String","Array"]}],"output":"Number","colour":"%{BKY_LISTS_HUE}","tooltip":"%{BKY_LISTS_LENGTH_TOOLTIP}","helpUrl":"%{BKY_LISTS_LENGTH_HELPURL}"}]);
Blockly.Blocks["lists_create_with"]={init:function(){this.setHelpUrl(Blockly.Msg.LISTS_CREATE_WITH_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);this.itemCount_=3;this.updateShape_();this.setOutput(true,"Array");this.setMutator(new Blockly.Mutator(["lists_create_with_item"]));this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){var container=document.createElement("mutation");container.setAttribute("items",this.itemCount_);return container},domToMutation:function(xmlElement){this.itemCount_=
parseInt(xmlElement.getAttribute("items"),10);this.updateShape_()},decompose:function(workspace){var containerBlock=workspace.newBlock("lists_create_with_container");containerBlock.initSvg();var connection=containerBlock.getInput("STACK").connection;for(var i=0;i<this.itemCount_;i++){var itemBlock=workspace.newBlock("lists_create_with_item");itemBlock.initSvg();connection.connect(itemBlock.previousConnection);connection=itemBlock.nextConnection}return containerBlock},compose:function(containerBlock){var itemBlock=
containerBlock.getInputTargetBlock("STACK");var connections=[];while(itemBlock){connections.push(itemBlock.valueConnection_);itemBlock=itemBlock.nextConnection&&itemBlock.nextConnection.targetBlock()}for(var i=0;i<this.itemCount_;i++){var connection=this.getInput("ADD"+i).connection.targetConnection;if(connection&&connections.indexOf(connection)==-1)connection.disconnect()}this.itemCount_=connections.length;this.updateShape_();for(var i=0;i<this.itemCount_;i++)Blockly.Mutator.reconnect(connections[i],
this,"ADD"+i)},saveConnections:function(containerBlock){var itemBlock=containerBlock.getInputTargetBlock("STACK");var i=0;while(itemBlock){var input=this.getInput("ADD"+i);itemBlock.valueConnection_=input&&input.connection.targetConnection;i++;itemBlock=itemBlock.nextConnection&&itemBlock.nextConnection.targetBlock()}},updateShape_:function(){if(this.itemCount_&&this.getInput("EMPTY"))this.removeInput("EMPTY");else if(!this.itemCount_&&!this.getInput("EMPTY"))this.appendDummyInput("EMPTY").appendField(Blockly.Msg.LISTS_CREATE_EMPTY_TITLE);
for(var i=0;i<this.itemCount_;i++)if(!this.getInput("ADD"+i)){var input=this.appendValueInput("ADD"+i);if(i==0)input.appendField(Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH)}while(this.getInput("ADD"+i)){this.removeInput("ADD"+i);i++}}};
Blockly.Blocks["lists_create_with_container"]={init:function(){this.setColour(Blockly.Blocks.lists.HUE);this.appendDummyInput().appendField(Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD);this.appendStatementInput("STACK");this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP);this.contextMenu=false}};
Blockly.Blocks["lists_create_with_item"]={init:function(){this.setColour(Blockly.Blocks.lists.HUE);this.appendDummyInput().appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE);this.setPreviousStatement(true);this.setNextStatement(true);this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP);this.contextMenu=false}};
Blockly.Blocks["lists_indexOf"]={init:function(){var OPERATORS=[[Blockly.Msg.LISTS_INDEX_OF_FIRST,"FIRST"],[Blockly.Msg.LISTS_INDEX_OF_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.LISTS_INDEX_OF_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);this.setOutput(true,"Number");this.appendValueInput("VALUE").setCheck("Array").appendField(Blockly.Msg.LISTS_INDEX_OF_INPUT_IN_LIST);this.appendValueInput("FIND").appendField(new Blockly.FieldDropdown(OPERATORS),"END");this.setInputsInline(true);var thisBlock=
this;this.setTooltip(function(){return Blockly.Msg.LISTS_INDEX_OF_TOOLTIP.replace("%1",thisBlock.workspace.options.oneBasedIndex?"0":"-1")})}};
Blockly.Blocks["lists_getIndex"]={init:function(){var MODE=[[Blockly.Msg.LISTS_GET_INDEX_GET,"GET"],[Blockly.Msg.LISTS_GET_INDEX_GET_REMOVE,"GET_REMOVE"],[Blockly.Msg.LISTS_GET_INDEX_REMOVE,"REMOVE"]];this.WHERE_OPTIONS=[[Blockly.Msg.LISTS_GET_INDEX_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_INDEX_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_INDEX_FIRST,"FIRST"],[Blockly.Msg.LISTS_GET_INDEX_LAST,"LAST"],[Blockly.Msg.LISTS_GET_INDEX_RANDOM,"RANDOM"]];this.setHelpUrl(Blockly.Msg.LISTS_GET_INDEX_HELPURL);
this.setColour(Blockly.Blocks.lists.HUE);var modeMenu=new Blockly.FieldDropdown(MODE,function(value){var isStatement=value=="REMOVE";this.sourceBlock_.updateStatement_(isStatement)});this.appendValueInput("VALUE").setCheck("Array").appendField(Blockly.Msg.LISTS_GET_INDEX_INPUT_IN_LIST);this.appendDummyInput().appendField(modeMenu,"MODE").appendField("","SPACE");this.appendDummyInput("AT");if(Blockly.Msg.LISTS_GET_INDEX_TAIL)this.appendDummyInput("TAIL").appendField(Blockly.Msg.LISTS_GET_INDEX_TAIL);
this.setInputsInline(true);this.setOutput(true);this.updateAt_(true);var thisBlock=this;this.setTooltip(function(){var mode=thisBlock.getFieldValue("MODE");var where=thisBlock.getFieldValue("WHERE");var tooltip="";switch(mode+" "+where){case "GET FROM_START":case "GET FROM_END":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case "GET FIRST":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;break;case "GET LAST":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;break;case "GET RANDOM":tooltip=
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;break;case "GET_REMOVE FROM_START":case "GET_REMOVE FROM_END":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;break;case "GET_REMOVE FIRST":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;break;case "GET_REMOVE LAST":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;break;case "GET_REMOVE RANDOM":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;break;case "REMOVE FROM_START":case "REMOVE FROM_END":tooltip=
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;break;case "REMOVE FIRST":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;break;case "REMOVE LAST":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;break;case "REMOVE RANDOM":tooltip=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM;break}if(where=="FROM_START"||where=="FROM_END"){var msg=where=="FROM_START"?Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP:Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP;tooltip+=" "+msg.replace("%1",thisBlock.workspace.options.oneBasedIndex?
"#1":"#0")}return tooltip})},mutationToDom:function(){var container=document.createElement("mutation");var isStatement=!this.outputConnection;container.setAttribute("statement",isStatement);var isAt=this.getInput("AT").type==Blockly.INPUT_VALUE;container.setAttribute("at",isAt);return container},domToMutation:function(xmlElement){var isStatement=xmlElement.getAttribute("statement")=="true";this.updateStatement_(isStatement);var isAt=xmlElement.getAttribute("at")!="false";this.updateAt_(isAt)},updateStatement_:function(newStatement){var oldStatement=
!this.outputConnection;if(newStatement!=oldStatement){this.unplug(true,true);if(newStatement){this.setOutput(false);this.setPreviousStatement(true);this.setNextStatement(true)}else{this.setPreviousStatement(false);this.setNextStatement(false);this.setOutput(true)}}},updateAt_:function(isAt){this.removeInput("AT");this.removeInput("ORDINAL",true);if(isAt){this.appendValueInput("AT").setCheck("Number");if(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)}else this.appendDummyInput("AT");
var menu=new Blockly.FieldDropdown(this.WHERE_OPTIONS,function(value){var newAt=value=="FROM_START"||value=="FROM_END";if(newAt!=isAt){var block=this.sourceBlock_;block.updateAt_(newAt);block.setFieldValue(value,"WHERE");return null}return undefined});this.getInput("AT").appendField(menu,"WHERE");if(Blockly.Msg.LISTS_GET_INDEX_TAIL)this.moveInputBefore("TAIL",null)}};
Blockly.Blocks["lists_setIndex"]={init:function(){var MODE=[[Blockly.Msg.LISTS_SET_INDEX_SET,"SET"],[Blockly.Msg.LISTS_SET_INDEX_INSERT,"INSERT"]];this.WHERE_OPTIONS=[[Blockly.Msg.LISTS_GET_INDEX_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_INDEX_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_INDEX_FIRST,"FIRST"],[Blockly.Msg.LISTS_GET_INDEX_LAST,"LAST"],[Blockly.Msg.LISTS_GET_INDEX_RANDOM,"RANDOM"]];this.setHelpUrl(Blockly.Msg.LISTS_SET_INDEX_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);this.appendValueInput("LIST").setCheck("Array").appendField(Blockly.Msg.LISTS_SET_INDEX_INPUT_IN_LIST);
this.appendDummyInput().appendField(new Blockly.FieldDropdown(MODE),"MODE").appendField("","SPACE");this.appendDummyInput("AT");this.appendValueInput("TO").appendField(Blockly.Msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(true);this.setPreviousStatement(true);this.setNextStatement(true);this.setTooltip(Blockly.Msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(true);var thisBlock=this;this.setTooltip(function(){var mode=thisBlock.getFieldValue("MODE");var where=thisBlock.getFieldValue("WHERE");var tooltip=
"";switch(mode+" "+where){case "SET FROM_START":case "SET FROM_END":tooltip=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;break;case "SET FIRST":tooltip=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;break;case "SET LAST":tooltip=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;break;case "SET RANDOM":tooltip=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;break;case "INSERT FROM_START":case "INSERT FROM_END":tooltip=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;break;case "INSERT FIRST":tooltip=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;
break;case "INSERT LAST":tooltip=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;break;case "INSERT RANDOM":tooltip=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM;break}if(where=="FROM_START"||where=="FROM_END")tooltip+=" "+Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP.replace("%1",thisBlock.workspace.options.oneBasedIndex?"#1":"#0");return tooltip})},mutationToDom:function(){var container=document.createElement("mutation");var isAt=this.getInput("AT").type==Blockly.INPUT_VALUE;container.setAttribute("at",
isAt);return container},domToMutation:function(xmlElement){var isAt=xmlElement.getAttribute("at")!="false";this.updateAt_(isAt)},updateAt_:function(isAt){this.removeInput("AT");this.removeInput("ORDINAL",true);if(isAt){this.appendValueInput("AT").setCheck("Number");if(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)}else this.appendDummyInput("AT");var menu=new Blockly.FieldDropdown(this.WHERE_OPTIONS,function(value){var newAt=value==
"FROM_START"||value=="FROM_END";if(newAt!=isAt){var block=this.sourceBlock_;block.updateAt_(newAt);block.setFieldValue(value,"WHERE");return null}return undefined});this.moveInputBefore("AT","TO");if(this.getInput("ORDINAL"))this.moveInputBefore("ORDINAL","TO");this.getInput("AT").appendField(menu,"WHERE")}};
Blockly.Blocks["lists_getSublist"]={init:function(){this["WHERE_OPTIONS_1"]=[[Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST,"FIRST"]];this["WHERE_OPTIONS_2"]=[[Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_SUBLIST_END_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);
this.appendValueInput("LIST").setCheck("Array").appendField(Blockly.Msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);this.appendDummyInput("AT1");this.appendDummyInput("AT2");if(Blockly.Msg.LISTS_GET_SUBLIST_TAIL)this.appendDummyInput("TAIL").appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(true);this.setOutput(true,"Array");this.updateAt_(1,true);this.updateAt_(2,true);this.setTooltip(Blockly.Msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){var container=document.createElement("mutation");
var isAt1=this.getInput("AT1").type==Blockly.INPUT_VALUE;container.setAttribute("at1",isAt1);var isAt2=this.getInput("AT2").type==Blockly.INPUT_VALUE;container.setAttribute("at2",isAt2);return container},domToMutation:function(xmlElement){var isAt1=xmlElement.getAttribute("at1")=="true";var isAt2=xmlElement.getAttribute("at2")=="true";this.updateAt_(1,isAt1);this.updateAt_(2,isAt2)},updateAt_:function(n,isAt){this.removeInput("AT"+n);this.removeInput("ORDINAL"+n,true);if(isAt){this.appendValueInput("AT"+
n).setCheck("Number");if(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)this.appendDummyInput("ORDINAL"+n).appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)}else this.appendDummyInput("AT"+n);var menu=new Blockly.FieldDropdown(this["WHERE_OPTIONS_"+n],function(value){var newAt=value=="FROM_START"||value=="FROM_END";if(newAt!=isAt){var block=this.sourceBlock_;block.updateAt_(n,newAt);block.setFieldValue(value,"WHERE"+n);return null}return undefined});this.getInput("AT"+n).appendField(menu,"WHERE"+n);if(n==1){this.moveInputBefore("AT1",
"AT2");if(this.getInput("ORDINAL1"))this.moveInputBefore("ORDINAL1","AT2")}if(Blockly.Msg.LISTS_GET_SUBLIST_TAIL)this.moveInputBefore("TAIL",null)}};
Blockly.Blocks["lists_sort"]={init:function(){this.jsonInit({"message0":Blockly.Msg.LISTS_SORT_TITLE,"args0":[{"type":"field_dropdown","name":"TYPE","options":[[Blockly.Msg.LISTS_SORT_TYPE_NUMERIC,"NUMERIC"],[Blockly.Msg.LISTS_SORT_TYPE_TEXT,"TEXT"],[Blockly.Msg.LISTS_SORT_TYPE_IGNORECASE,"IGNORE_CASE"]]},{"type":"field_dropdown","name":"DIRECTION","options":[[Blockly.Msg.LISTS_SORT_ORDER_ASCENDING,"1"],[Blockly.Msg.LISTS_SORT_ORDER_DESCENDING,"-1"]]},{"type":"input_value","name":"LIST","check":"Array"}],
"output":"Array","colour":Blockly.Blocks.lists.HUE,"tooltip":Blockly.Msg.LISTS_SORT_TOOLTIP,"helpUrl":Blockly.Msg.LISTS_SORT_HELPURL})}};
Blockly.Blocks["lists_split"]={init:function(){var thisBlock=this;var dropdown=new Blockly.FieldDropdown([[Blockly.Msg.LISTS_SPLIT_LIST_FROM_TEXT,"SPLIT"],[Blockly.Msg.LISTS_SPLIT_TEXT_FROM_LIST,"JOIN"]],function(newMode){thisBlock.updateType_(newMode)});this.setHelpUrl(Blockly.Msg.LISTS_SPLIT_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);this.appendValueInput("INPUT").setCheck("String").appendField(dropdown,"MODE");this.appendValueInput("DELIM").setCheck("String").appendField(Blockly.Msg.LISTS_SPLIT_WITH_DELIMITER);
this.setInputsInline(true);this.setOutput(true,"Array");this.setTooltip(function(){var mode=thisBlock.getFieldValue("MODE");if(mode=="SPLIT")return Blockly.Msg.LISTS_SPLIT_TOOLTIP_SPLIT;else if(mode=="JOIN")return Blockly.Msg.LISTS_SPLIT_TOOLTIP_JOIN;throw"Unknown mode: "+mode;})},updateType_:function(newMode){if(newMode=="SPLIT"){this.outputConnection.setCheck("Array");this.getInput("INPUT").setCheck("String")}else{this.outputConnection.setCheck("String");this.getInput("INPUT").setCheck("Array")}},
mutationToDom:function(){var container=document.createElement("mutation");container.setAttribute("mode",this.getFieldValue("MODE"));return container},domToMutation:function(xmlElement){this.updateType_(xmlElement.getAttribute("mode"))}};Blockly.Blocks.logic={};Blockly.Constants.Logic={};Blockly.Constants.Logic.HUE=210;Blockly.Blocks.logic.HUE=Blockly.Constants.Logic.HUE;
Blockly.defineBlocksWithJsonArray([{"type":"logic_boolean","message0":"%1","args0":[{"type":"field_dropdown","name":"BOOL","options":[["%{BKY_LOGIC_BOOLEAN_TRUE}","TRUE"],["%{BKY_LOGIC_BOOLEAN_FALSE}","FALSE"]]}],"output":"Boolean","colour":"%{BKY_LOGIC_HUE}","tooltip":"%{BKY_LOGIC_BOOLEAN_TOOLTIP}","helpUrl":"%{BKY_LOGIC_BOOLEAN_HELPURL}"},{"type":"controls_if","message0":"%{BKY_CONTROLS_IF_MSG_IF} %1","args0":[{"type":"input_value","name":"IF0","check":"Boolean"}],"message1":"%{BKY_CONTROLS_IF_MSG_THEN} %1",
"args1":[{"type":"input_statement","name":"DO0"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_LOGIC_HUE}","helpUrl":"%{BKY_CONTROLS_IF_HELPURL}","mutator":"controls_if_mutator","extensions":["controls_if_tooltip"]},{"type":"controls_ifelse","message0":"%{BKY_CONTROLS_IF_MSG_IF} %1","args0":[{"type":"input_value","name":"IF0","check":"Boolean"}],"message1":"%{BKY_CONTROLS_IF_MSG_THEN} %1","args1":[{"type":"input_statement","name":"DO0"}],"message2":"%{BKY_CONTROLS_IF_MSG_ELSE} %1",
"args2":[{"type":"input_statement","name":"ELSE"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_LOGIC_HUE}","tooltip":"%{BKYCONTROLS_IF_TOOLTIP_2}","helpUrl":"%{BKY_CONTROLS_IF_HELPURL}","extensions":["controls_if_tooltip"]},{"type":"logic_compare","message0":"%1 %2 %3","args0":[{"type":"input_value","name":"A"},{"type":"field_dropdown","name":"OP","options":[["\x3d","EQ"],["\u2260","NEQ"],["\x3c","LT"],["\u2264","LTE"],["\x3e","GT"],["\u2265","GTE"]]},{"type":"input_value","name":"B"}],
"inputsInline":true,"output":"Boolean","colour":"%{BKY_LOGIC_HUE}","helpUrl":"%{BKY_LOGIC_COMPARE_HELPURL}","extensions":["logic_compare","logic_op_tooltip"]},{"type":"logic_operation","message0":"%1 %2 %3","args0":[{"type":"input_value","name":"A","check":"Boolean"},{"type":"field_dropdown","name":"OP","options":[["%{BKY_LOGIC_OPERATION_AND}","AND"],["%{BKY_LOGIC_OPERATION_OR}","OR"]]},{"type":"input_value","name":"B","check":"Boolean"}],"inputsInline":true,"output":"Boolean","colour":"%{BKY_LOGIC_HUE}",
"helpUrl":"%{BKY_LOGIC_OPERATION_HELPURL}","extensions":["logic_op_tooltip"]},{"type":"logic_negate","message0":"%{BKY_LOGIC_NEGATE_TITLE}","args0":[{"type":"input_value","name":"BOOL","check":"Boolean"}],"output":"Boolean","colour":"%{BKY_LOGIC_HUE}","tooltip":"%{BKY_LOGIC_NEGATE_TOOLTIP}","helpUrl":"%{BKY_LOGIC_NEGATE_HELPURL}"},{"type":"logic_null","message0":"%{BKY_LOGIC_NULL}","output":null,"colour":"%{BKY_LOGIC_HUE}","tooltip":"%{BKY_LOGIC_NULL_TOOLTIP}","helpUrl":"%{BKY_LOGIC_NULL_HELPURL}"},
{"type":"logic_ternary","message0":"%{BKY_LOGIC_TERNARY_CONDITION} %1","args0":[{"type":"input_value","name":"IF","check":"Boolean"}],"message1":"%{BKY_LOGIC_TERNARY_IF_TRUE} %1","args1":[{"type":"input_value","name":"THEN"}],"message2":"%{BKY_LOGIC_TERNARY_IF_FALSE} %1","args2":[{"type":"input_value","name":"ELSE"}],"output":null,"colour":"%{BKY_LOGIC_HUE}","tooltip":"%{BKY_LOGIC_TERNARY_TOOLTIP}","helpUrl":"%{BKY_LOGIC_TERNARY_HELPURL}","extensions":["logic_ternary"]}]);
Blockly.defineBlocksWithJsonArray([{"type":"controls_if_if","message0":"%{BKY_CONTROLS_IF_IF_TITLE_IF}","nextStatement":null,"enableContextMenu":false,"colour":"%{BKY_LOGIC_HUE}","tooltip":"%{BKY_CONTROLS_IF_IF_TOOLTIP}"},{"type":"controls_if_elseif","message0":"%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}","previousStatement":null,"nextStatement":null,"enableContextMenu":false,"colour":"%{BKY_LOGIC_HUE}","tooltip":"%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}"},{"type":"controls_if_else","message0":"%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}",
"previousStatement":null,"enableContextMenu":false,"colour":"%{BKY_LOGIC_HUE}","tooltip":"%{BKY_CONTROLS_IF_ELSE_TOOLTIP}"}]);Blockly.Constants.Logic.TOOLTIPS_BY_OP={"EQ":"%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}","NEQ":"%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}","LT":"%{BKY_LOGIC_COMPARE_TOOLTIP_LT}","LTE":"%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}","GT":"%{BKY_LOGIC_COMPARE_TOOLTIP_GT}","GTE":"%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}","AND":"%{BKY_LOGIC_OPERATION_TOOLTIP_AND}","OR":"%{BKY_LOGIC_OPERATION_TOOLTIP_OR}"};
Blockly.Extensions.register("logic_op_tooltip",Blockly.Extensions.buildTooltipForDropdown("OP",Blockly.Constants.Logic.TOOLTIPS_BY_OP));
Blockly.Constants.Logic.CONTROLS_IF_MUTATOR_MIXIN={elseifCount_:0,elseCount_:0,mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;var container=document.createElement("mutation");if(this.elseifCount_)container.setAttribute("elseif",this.elseifCount_);if(this.elseCount_)container.setAttribute("else",1);return container},domToMutation:function(xmlElement){this.elseifCount_=parseInt(xmlElement.getAttribute("elseif"),10)||0;this.elseCount_=parseInt(xmlElement.getAttribute("else"),
10)||0;this.updateShape_()},decompose:function(workspace){var containerBlock=workspace.newBlock("controls_if_if");containerBlock.initSvg();var connection=containerBlock.nextConnection;for(var i=1;i<=this.elseifCount_;i++){var elseifBlock=workspace.newBlock("controls_if_elseif");elseifBlock.initSvg();connection.connect(elseifBlock.previousConnection);connection=elseifBlock.nextConnection}if(this.elseCount_){var elseBlock=workspace.newBlock("controls_if_else");elseBlock.initSvg();connection.connect(elseBlock.previousConnection)}return containerBlock},
compose:function(containerBlock){var clauseBlock=containerBlock.nextConnection.targetBlock();this.elseifCount_=0;this.elseCount_=0;var valueConnections=[null];var statementConnections=[null];var elseStatementConnection=null;while(clauseBlock){switch(clauseBlock.type){case "controls_if_elseif":this.elseifCount_++;valueConnections.push(clauseBlock.valueConnection_);statementConnections.push(clauseBlock.statementConnection_);break;case "controls_if_else":this.elseCount_++;elseStatementConnection=clauseBlock.statementConnection_;
break;default:throw"Unknown block type.";}clauseBlock=clauseBlock.nextConnection&&clauseBlock.nextConnection.targetBlock()}this.updateShape_();for(var i=1;i<=this.elseifCount_;i++){Blockly.Mutator.reconnect(valueConnections[i],this,"IF"+i);Blockly.Mutator.reconnect(statementConnections[i],this,"DO"+i)}Blockly.Mutator.reconnect(elseStatementConnection,this,"ELSE")},saveConnections:function(containerBlock){var clauseBlock=containerBlock.nextConnection.targetBlock();var i=1;while(clauseBlock){switch(clauseBlock.type){case "controls_if_elseif":var inputIf=
this.getInput("IF"+i);var inputDo=this.getInput("DO"+i);clauseBlock.valueConnection_=inputIf&&inputIf.connection.targetConnection;clauseBlock.statementConnection_=inputDo&&inputDo.connection.targetConnection;i++;break;case "controls_if_else":var inputDo=this.getInput("ELSE");clauseBlock.statementConnection_=inputDo&&inputDo.connection.targetConnection;break;default:throw"Unknown block type.";}clauseBlock=clauseBlock.nextConnection&&clauseBlock.nextConnection.targetBlock()}},updateShape_:function(){if(this.getInput("ELSE"))this.removeInput("ELSE");
var i=1;while(this.getInput("IF"+i)){this.removeInput("IF"+i);this.removeInput("DO"+i);i++}for(var i=1;i<=this.elseifCount_;i++){this.appendValueInput("IF"+i).setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSEIF);this.appendStatementInput("DO"+i).appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN)}if(this.elseCount_)this.appendStatementInput("ELSE").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSE)}};
Blockly.Extensions.registerMutator("controls_if_mutator",Blockly.Constants.Logic.CONTROLS_IF_MUTATOR_MIXIN,null,["controls_if_elseif","controls_if_else"]);
Blockly.Constants.Logic.CONTROLS_IF_TOOLTIP_EXTENSION=function(){this.setTooltip(function(){if(!this.elseifCount_&&!this.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;else if(!this.elseifCount_&&this.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;else if(this.elseifCount_&&!this.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;else if(this.elseifCount_&&this.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_4;return""}.bind(this))};Blockly.Extensions.register("controls_if_tooltip",Blockly.Constants.Logic.CONTROLS_IF_TOOLTIP_EXTENSION);
Blockly.Constants.Logic.fixLogicCompareRtlOpLabels=function(){var rtlOpLabels={"LT":"\u200f\x3c\u200f","LTE":"\u200f\u2264\u200f","GT":"\u200f\x3e\u200f","GTE":"\u200f\u2265\u200f"};var opDropdown=this.getField("OP");if(opDropdown){var options=opDropdown.getOptions();for(var i=0;i<options.length;++i){var tuple=options[i];var op=tuple[1];var rtlLabel=rtlOpLabels[op];if(goog.isString(tuple[0])&&rtlLabel)tuple[0]=rtlLabel}}};
Blockly.Constants.Logic.LOGIC_COMPARE_ONCHANGE_MIXIN={prevBlocks_:[null,null],onchange:function(e){var blockA=this.getInputTargetBlock("A");var blockB=this.getInputTargetBlock("B");if(blockA&&blockB&&!blockA.outputConnection.checkType_(blockB.outputConnection)){Blockly.Events.setGroup(e.group);for(var i=0;i<this.prevBlocks_.length;i++){var block=this.prevBlocks_[i];if(block===blockA||block===blockB){block.unplug();block.bumpNeighbours_()}}Blockly.Events.setGroup(false)}this.prevBlocks_[0]=blockA;
this.prevBlocks_[1]=blockB}};Blockly.Constants.Logic.LOGIC_COMPARE_EXTENSION=function(){if(this.RTL)Blockly.Constants.Logic.fixLogicCompareRtlOpLabels.apply(this);this.mixin(Blockly.Constants.Logic.LOGIC_COMPARE_ONCHANGE_MIXIN)};Blockly.Extensions.register("logic_compare",Blockly.Constants.Logic.LOGIC_COMPARE_EXTENSION);
Blockly.Constants.Logic.LOGIC_TERNARY_ONCHANGE_MIXIN={prevParentConnection_:null,onchange:function(e){var blockA=this.getInputTargetBlock("THEN");var blockB=this.getInputTargetBlock("ELSE");var parentConnection=this.outputConnection.targetConnection;if((blockA||blockB)&&parentConnection)for(var i=0;i<2;i++){var block=i==1?blockA:blockB;if(block&&!block.outputConnection.checkType_(parentConnection)){Blockly.Events.setGroup(e.group);if(parentConnection===this.prevParentConnection_){this.unplug();parentConnection.getSourceBlock().bumpNeighbours_()}else{block.unplug();
block.bumpNeighbours_()}Blockly.Events.setGroup(false)}}this.prevParentConnection_=parentConnection}};Blockly.Extensions.registerMixin("logic_ternary",Blockly.Constants.Logic.LOGIC_TERNARY_ONCHANGE_MIXIN);Blockly.Blocks.loops={};Blockly.Constants.Loops={};Blockly.Constants.Loops.HUE=120;Blockly.Blocks.loops.HUE=Blockly.Constants.Loops.HUE;
Blockly.defineBlocksWithJsonArray([{"type":"controls_repeat_ext","message0":"%{BKY_CONTROLS_REPEAT_TITLE}","args0":[{"type":"input_value","name":"TIMES","check":"Number"}],"message1":"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1","args1":[{"type":"input_statement","name":"DO"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_LOOPS_HUE}","tooltip":"%{BKY_CONTROLS_REPEAT_TOOLTIP}","helpUrl":"%{BKY_CONTROLS_REPEAT_HELPURL}"},{"type":"controls_repeat","message0":"%{BKY_CONTROLS_REPEAT_TITLE}","args0":[{"type":"field_number",
"name":"TIMES","value":10,"min":0,"precision":1}],"message1":"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1","args1":[{"type":"input_statement","name":"DO"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_LOOPS_HUE}","tooltip":"%{BKY_CONTROLS_REPEAT_TOOLTIP}","helpUrl":"%{BKY_CONTROLS_REPEAT_HELPURL}"},{"type":"controls_whileUntil","message0":"%1 %2","args0":[{"type":"field_dropdown","name":"MODE","options":[["%{BKY_CONTROLS_WHILEUNTIL_OPERATOR_WHILE}","WHILE"],["%{BKY_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL}",
"UNTIL"]]},{"type":"input_value","name":"BOOL","check":"Boolean"}],"message1":"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1","args1":[{"type":"input_statement","name":"DO"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_LOOPS_HUE}","helpUrl":"%{BKY_CONTROLS_WHILEUNTIL_HELPURL}","extensions":["controls_whileUntil_tooltip"]},{"type":"controls_for","message0":"%{BKY_CONTROLS_FOR_TITLE}","args0":[{"type":"field_variable","name":"VAR","variable":null},{"type":"input_value","name":"FROM","check":"Number",
"align":"RIGHT"},{"type":"input_value","name":"TO","check":"Number","align":"RIGHT"},{"type":"input_value","name":"BY","check":"Number","align":"RIGHT"}],"message1":"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1","args1":[{"type":"input_statement","name":"DO"}],"inputsInline":true,"previousStatement":null,"nextStatement":null,"colour":"%{BKY_LOOPS_HUE}","helpUrl":"%{BKY_CONTROLS_FOR_HELPURL}","extensions":["contextMenu_newGetVariableBlock","controls_for_tooltip"]},{"type":"controls_forEach","message0":"%{BKY_CONTROLS_FOREACH_TITLE}",
"args0":[{"type":"field_variable","name":"VAR","variable":null},{"type":"input_value","name":"LIST","check":"Array"}],"message1":"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1","args1":[{"type":"input_statement","name":"DO"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_LOOPS_HUE}","helpUrl":"%{BKY_CONTROLS_FOREACH_HELPURL}","extensions":["contextMenu_newGetVariableBlock","controls_forEach_tooltip"]},{"type":"controls_flow_statements","message0":"%1","args0":[{"type":"field_dropdown","name":"FLOW",
"options":[["%{BKY_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK}","BREAK"],["%{BKY_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE}","CONTINUE"]]}],"previousStatement":null,"colour":"%{BKY_LOOPS_HUE}","helpUrl":"%{BKY_CONTROLS_FLOW_STATEMENTS_HELPURL}","extensions":["controls_flow_tooltip","controls_flow_in_loop_check"]}]);Blockly.Constants.Loops.WHILE_UNTIL_TOOLTIPS={"WHILE":"%{BKY_CONTROLS_WHILEUNTIL_TOOLTIP_WHILE}","UNTIL":"%{BKY_CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL}"};
Blockly.Extensions.register("controls_whileUntil_tooltip",Blockly.Extensions.buildTooltipForDropdown("MODE",Blockly.Constants.Loops.WHILE_UNTIL_TOOLTIPS));Blockly.Constants.Loops.BREAK_CONTINUE_TOOLTIPS={"BREAK":"%{BKY_CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK}","CONTINUE":"%{BKY_CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE}"};Blockly.Extensions.register("controls_flow_tooltip",Blockly.Extensions.buildTooltipForDropdown("FLOW",Blockly.Constants.Loops.BREAK_CONTINUE_TOOLTIPS));
Blockly.Constants.Loops.CUSTOM_CONTEXT_MENU_CREATE_VARIABLES_GET_MIXIN={customContextMenu:function(options){var varName=this.getFieldValue("VAR");if(!this.isCollapsed()&&varName!=null){var option={enabled:true};option.text=Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1",varName);var xmlField=goog.dom.createDom("field",null,varName);xmlField.setAttribute("name","VAR");var xmlBlock=goog.dom.createDom("block",null,xmlField);xmlBlock.setAttribute("type","variables_get");option.callback=Blockly.ContextMenu.callbackFactory(this,
xmlBlock);options.push(option)}}};Blockly.Extensions.registerMixin("contextMenu_newGetVariableBlock",Blockly.Constants.Loops.CUSTOM_CONTEXT_MENU_CREATE_VARIABLES_GET_MIXIN);Blockly.Extensions.register("controls_for_tooltip",Blockly.Extensions.buildTooltipWithFieldValue("%{BKY_CONTROLS_FOR_TOOLTIP}","VAR"));Blockly.Extensions.register("controls_forEach_tooltip",Blockly.Extensions.buildTooltipWithFieldValue("%{BKY_CONTROLS_FOREACH_TOOLTIP}","VAR"));
Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN={LOOP_TYPES:["controls_repeat","controls_repeat_ext","controls_forEach","controls_for","controls_whileUntil"],onchange:function(){if(!this.workspace.isDragging||this.workspace.isDragging())return;var legal=false;var block=this;do{if(this.LOOP_TYPES.indexOf(block.type)!=-1){legal=true;break}block=block.getSurroundParent()}while(block);if(legal){this.setWarningText(null);if(!this.isInFlyout)this.setDisabled(false)}else{this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);
if(!this.isInFlyout&&!this.getInheritedDisabled())this.setDisabled(true)}}};Blockly.Extensions.registerMixin("controls_flow_in_loop_check",Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN);Blockly.Blocks.math={};Blockly.Constants.Math={};Blockly.Constants.Math.HUE=230;Blockly.Blocks.math.HUE=Blockly.Constants.Math.HUE;
Blockly.defineBlocksWithJsonArray([{"type":"math_number","message0":"%1","args0":[{"type":"field_number","name":"NUM","value":0}],"output":"Number","colour":"%{BKY_MATH_HUE}","helpUrl":"%{BKY_MATH_NUMBER_HELPURL}","tooltip":"%{BKY_MATH_NUMBER_TOOLTIP}","extensions":["parent_tooltip_when_inline"]},{"type":"math_arithmetic","message0":"%1 %2 %3","args0":[{"type":"input_value","name":"A","check":"Number"},{"type":"field_dropdown","name":"OP","options":[["%{BKY_MATH_ADDITION_SYMBOL}","ADD"],["%{BKY_MATH_SUBTRACTION_SYMBOL}",
"MINUS"],["%{BKY_MATH_MULTIPLICATION_SYMBOL}","MULTIPLY"],["%{BKY_MATH_DIVISION_SYMBOL}","DIVIDE"],["%{BKY_MATH_POWER_SYMBOL}","POWER"]]},{"type":"input_value","name":"B","check":"Number"}],"inputsInline":true,"output":"Number","colour":"%{BKY_MATH_HUE}","helpUrl":"%{BKY_MATH_ARITHMETIC_HELPURL}","extensions":["math_op_tooltip"]},{"type":"math_single","message0":"%1 %2","args0":[{"type":"field_dropdown","name":"OP","options":[["%{BKY_MATH_SINGLE_OP_ROOT}","ROOT"],["%{BKY_MATH_SINGLE_OP_ABSOLUTE}",
"ABS"],["-","NEG"],["ln","LN"],["log10","LOG10"],["e^","EXP"],["10^","POW10"]]},{"type":"input_value","name":"NUM","check":"Number"}],"output":"Number","colour":"%{BKY_MATH_HUE}","helpUrl":"%{BKY_MATH_SINGLE_HELPURL}","extensions":["math_op_tooltip"]},{"type":"math_trig","message0":"%1 %2","args0":[{"type":"field_dropdown","name":"OP","options":[["%{BKY_MATH_TRIG_SIN}","SIN"],["%{BKY_MATH_TRIG_COS}","COS"],["%{BKY_MATH_TRIG_TAN}","TAN"],["%{BKY_MATH_TRIG_ASIN}","ASIN"],["%{BKY_MATH_TRIG_ACOS}","ACOS"],
["%{BKY_MATH_TRIG_ATAN}","ATAN"]]},{"type":"input_value","name":"NUM","check":"Number"}],"output":"Number","colour":"%{BKY_MATH_HUE}","helpUrl":"%{BKY_MATH_TRIG_HELPURL}","extensions":["math_op_tooltip"]},{"type":"math_constant","message0":"%1","args0":[{"type":"field_dropdown","name":"CONSTANT","options":[["\u03c0","PI"],["e","E"],["\u03c6","GOLDEN_RATIO"],["sqrt(2)","SQRT2"],["sqrt(\u00bd)","SQRT1_2"],["\u221e","INFINITY"]]}],"output":"Number","colour":"%{BKY_MATH_HUE}","tooltip":"%{BKY_MATH_CONSTANT_TOOLTIP}",
"helpUrl":"%{BKY_MATH_CONSTANT_HELPURL}"},{"type":"math_number_property","message0":"%1 %2","args0":[{"type":"input_value","name":"NUMBER_TO_CHECK","check":"Number"},{"type":"field_dropdown","name":"PROPERTY","options":[["%{BKY_MATH_IS_EVEN}","EVEN"],["%{BKY_MATH_IS_ODD}","ODD"],["%{BKY_MATH_IS_PRIME}","PRIME"],["%{BKY_MATH_IS_WHOLE}","WHOLE"],["%{BKY_MATH_IS_POSITIVE}","POSITIVE"],["%{BKY_MATH_IS_NEGATIVE}","NEGATIVE"],["%{BKY_MATH_IS_DIVISIBLE_BY}","DIVISIBLE_BY"]]}],"inputsInline":true,"output":"Boolean",
"colour":"%{BKY_MATH_HUE}","tooltip":"%{BKY_MATH_IS_TOOLTIP}","mutator":"math_is_divisibleby_mutator"},{"type":"math_change","message0":"%{BKY_MATH_CHANGE_TITLE}","args0":[{"type":"field_variable","name":"VAR","variable":"%{BKY_MATH_CHANGE_TITLE_ITEM}"},{"type":"input_value","name":"DELTA","check":"Number"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_VARIABLES_HUE}","helpUrl":"%{BKY_MATH_CHANGE_HELPURL}","extensions":["math_change_tooltip"]},{"type":"math_round","message0":"%1 %2",
"args0":[{"type":"field_dropdown","name":"OP","options":[["%{BKY_MATH_ROUND_OPERATOR_ROUND}","ROUND"],["%{BKY_MATH_ROUND_OPERATOR_ROUNDUP}","ROUNDUP"],["%{BKY_MATH_ROUND_OPERATOR_ROUNDDOWN}","ROUNDDOWN"]]},{"type":"input_value","name":"NUM","check":"Number"}],"output":"Number","colour":"%{BKY_MATH_HUE}","helpUrl":"%{BKY_MATH_ROUND_HELPURL}","tooltip":"%{BKY_MATH_ROUND_TOOLTIP}"},{"type":"math_on_list","message0":"%1 %2","args0":[{"type":"field_dropdown","name":"OP","options":[["%{BKY_MATH_ONLIST_OPERATOR_SUM}",
"SUM"],["%{BKY_MATH_ONLIST_OPERATOR_MIN}","MIN"],["%{BKY_MATH_ONLIST_OPERATOR_MAX}","MAX"],["%{BKY_MATH_ONLIST_OPERATOR_AVERAGE}","AVERAGE"],["%{BKY_MATH_ONLIST_OPERATOR_MEDIAN}","MEDIAN"],["%{BKY_MATH_ONLIST_OPERATOR_MODE}","MODE"],["%{BKY_MATH_ONLIST_OPERATOR_STD_DEV}","STD_DEV"],["%{BKY_MATH_ONLIST_OPERATOR_RANDOM}","RANDOM"]]},{"type":"input_value","name":"LIST","check":"Array"}],"output":"Number","colour":"%{BKY_MATH_HUE}","helpUrl":"%{BKY_MATH_ONLIST_HELPURL}","mutator":"math_modes_of_list_mutator",
"extensions":["math_op_tooltip"]},{"type":"math_modulo","message0":"%{BKY_MATH_MODULO_TITLE}","args0":[{"type":"input_value","name":"DIVIDEND","check":"Number"},{"type":"input_value","name":"DIVISOR","check":"Number"}],"inputsInline":true,"output":"Number","colour":"%{BKY_MATH_HUE}","tooltip":"%{BKY_MATH_MODULO_TOOLTIP}","helpUrl":"%{BKY_MATH_MODULO_HELPURL}"},{"type":"math_constrain","message0":"%{BKY_MATH_CONSTRAIN_TITLE}","args0":[{"type":"input_value","name":"VALUE","check":"Number"},{"type":"input_value",
"name":"LOW","check":"Number"},{"type":"input_value","name":"HIGH","check":"Number"}],"inputsInline":true,"output":"Number","colour":"%{BKY_MATH_HUE}","tooltip":"%{BKY_MATH_CONSTRAIN_TOOLTIP}","helpUrl":"%{BKY_MATH_CONSTRAIN_HELPURL}"},{"type":"math_random_int","message0":"%{BKY_MATH_RANDOM_INT_TITLE}","args0":[{"type":"input_value","name":"FROM","check":"Number"},{"type":"input_value","name":"TO","check":"Number"}],"inputsInline":true,"output":"Number","colour":"%{BKY_MATH_HUE}","tooltip":"%{BKY_MATH_RANDOM_INT_TOOLTIP}",
"helpUrl":"%{BKY_MATH_RANDOM_INT_HELPURL}"},{"type":"math_random_float","message0":"%{BKY_MATH_RANDOM_FLOAT_TITLE_RANDOM}","output":"Number","colour":"%{BKY_MATH_HUE}","tooltip":"%{BKY_MATH_RANDOM_FLOAT_TOOLTIP}","helpUrl":"%{BKY_MATH_RANDOM_FLOAT_HELPURL}"}]);
Blockly.Constants.Math.TOOLTIPS_BY_OP={"ADD":"%{BKY_MATH_ARITHMETIC_TOOLTIP_ADD}","MINUS":"%{BKY_MATH_ARITHMETIC_TOOLTIP_MINUS}","MULTIPLY":"%{BKY_MATH_ARITHMETIC_TOOLTIP_MULTIPLY}","DIVIDE":"%{BKY_MATH_ARITHMETIC_TOOLTIP_DIVIDE}","POWER":"%{BKY_MATH_ARITHMETIC_TOOLTIP_POWER}","ROOT":"%{BKY_MATH_SINGLE_TOOLTIP_ROOT}","ABS":"%{BKY_MATH_SINGLE_TOOLTIP_ABS}","NEG":"%{BKY_MATH_SINGLE_TOOLTIP_NEG}","LN":"%{BKY_MATH_SINGLE_TOOLTIP_LN}","LOG10":"%{BKY_MATH_SINGLE_TOOLTIP_LOG10}","EXP":"%{BKY_MATH_SINGLE_TOOLTIP_EXP}",
"POW10":"%{BKY_MATH_SINGLE_TOOLTIP_POW10}","SIN":"%{BKY_MATH_TRIG_TOOLTIP_SIN}","COS":"%{BKY_MATH_TRIG_TOOLTIP_COS}","TAN":"%{BKY_MATH_TRIG_TOOLTIP_TAN}","ASIN":"%{BKY_MATH_TRIG_TOOLTIP_ASIN}","ACOS":"%{BKY_MATH_TRIG_TOOLTIP_ACOS}","ATAN":"%{BKY_MATH_TRIG_TOOLTIP_ATAN}","SUM":"%{BKY_MATH_ONLIST_TOOLTIP_SUM}","MIN":"%{BKY_MATH_ONLIST_TOOLTIP_MIN}","MAX":"%{BKY_MATH_ONLIST_TOOLTIP_MAX}","AVERAGE":"%{BKY_MATH_ONLIST_TOOLTIP_AVERAGE}","MEDIAN":"%{BKY_MATH_ONLIST_TOOLTIP_MEDIAN}","MODE":"%{BKY_MATH_ONLIST_TOOLTIP_MODE}",
"STD_DEV":"%{BKY_MATH_ONLIST_TOOLTIP_STD_DEV}","RANDOM":"%{BKY_MATH_ONLIST_TOOLTIP_RANDOM}"};Blockly.Extensions.register("math_op_tooltip",Blockly.Extensions.buildTooltipForDropdown("OP",Blockly.Constants.Math.TOOLTIPS_BY_OP));
Blockly.Constants.Math.IS_DIVISIBLEBY_MUTATOR_MIXIN={mutationToDom:function(){var container=document.createElement("mutation");var divisorInput=this.getFieldValue("PROPERTY")=="DIVISIBLE_BY";container.setAttribute("divisor_input",divisorInput);return container},domToMutation:function(xmlElement){var divisorInput=xmlElement.getAttribute("divisor_input")=="true";this.updateShape_(divisorInput)},updateShape_:function(divisorInput){var inputExists=this.getInput("DIVISOR");if(divisorInput){if(!inputExists)this.appendValueInput("DIVISOR").setCheck("Number")}else if(inputExists)this.removeInput("DIVISOR")}};
Blockly.Constants.Math.IS_DIVISIBLE_MUTATOR_EXTENSION=function(){this.getField("PROPERTY").setValidator(function(option){var divisorInput=option=="DIVISIBLE_BY";this.sourceBlock_.updateShape_(divisorInput)})};Blockly.Extensions.registerMutator("math_is_divisibleby_mutator",Blockly.Constants.Math.IS_DIVISIBLEBY_MUTATOR_MIXIN,Blockly.Constants.Math.IS_DIVISIBLE_MUTATOR_EXTENSION);
Blockly.Constants.Math.CHANGE_TOOLTIP_EXTENSION=function(){this.setTooltip(function(){return Blockly.Msg.MATH_CHANGE_TOOLTIP.replace("%1",this.getFieldValue("VAR"))}.bind(this))};Blockly.Extensions.register("math_change_tooltip",Blockly.Extensions.buildTooltipWithFieldValue("%{BKY_MATH_CHANGE_TOOLTIP}","VAR"));
Blockly.Constants.Math.LIST_MODES_MUTATOR_MIXIN={updateType_:function(newOp){if(newOp=="MODE")this.outputConnection.setCheck("Array");else this.outputConnection.setCheck("Number")},mutationToDom:function(){var container=document.createElement("mutation");container.setAttribute("op",this.getFieldValue("OP"));return container},domToMutation:function(xmlElement){this.updateType_(xmlElement.getAttribute("op"))}};Blockly.Constants.Math.LIST_MODES_MUTATOR_EXTENSION=function(){this.getField("OP").setValidator(function(newOp){this.updateType_(newOp)}.bind(this))};
Blockly.Extensions.registerMutator("math_modes_of_list_mutator",Blockly.Constants.Math.LIST_MODES_MUTATOR_MIXIN,Blockly.Constants.Math.LIST_MODES_MUTATOR_EXTENSION);/*
Licensed under the Apache License, Version 2.0 (the "License"):
http://www.apache.org/licenses/LICENSE-2.0
*/
Blockly.Blocks.io={};Blockly.Blocks.io.HUE=250;
Blockly.Blocks["io_digitalwrite"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/DigitalWrite");this.setColour(Blockly.Blocks.io.HUE);this.appendValueInput("STATE").appendField(Blockly.Msg.MBED_DIGITALWRITE).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.digitalPins),"PIN").appendField(Blockly.Msg.MBED_WRITE_TO).setCheck(Blockly.Types.BOOLEAN.checkList);this.setInputsInline(false);this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_DIGITALWRITE_TIP)},
updateFields:function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"PIN","digitalPins")}};
Blockly.Blocks["io_digitalread"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/DigitalRead");this.setColour(Blockly.Blocks.io.HUE);this.appendDummyInput().appendField(Blockly.Msg.MBED_DIGITALREAD).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.digitalPins),"PIN");this.setOutput(true,Blockly.Types.BOOLEAN.output);this.setTooltip(Blockly.Msg.MBED_DIGITALREAD_TIP)},getBlockType:function(){return Blockly.Types.BOOLEAN},updateFields:function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,
"PIN","digitalPins")}};
Blockly.Blocks["io_builtin_led"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/DigitalWrite");this.setColour(Blockly.Blocks.io.HUE);this.appendValueInput("STATE").appendField(Blockly.Msg.MBED_BUILTIN_LED).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.builtinLed),"BUILT_IN_LED").appendField("to").setCheck(Blockly.Types.BOOLEAN.checkList);this.setInputsInline(false);this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_BUILTIN_LED_TIP)},updateFields:function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,
"BUILT_IN_LED","builtinLed")},getBlockType:function(){return Blockly.Types.BOOLEAN}};
Blockly.Blocks["io_analogwrite"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/AnalogWrite");this.setColour(Blockly.Blocks.io.HUE);this.appendValueInput("NUM").appendField(Blockly.Msg.MBED_ANALOGWRITE).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.pwmPins),"PIN").appendField(Blockly.Msg.MBED_WRITE_TO).setCheck(Blockly.Types.NUMBER.output);this.setInputsInline(false);this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_ANALOGWRITE_TIP)},
updateFields:function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"PIN","pwmPins")},getBlockType:function(){return Blockly.Types.NUMBER}};
Blockly.Blocks["io_analogread"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/AnalogRead");this.setColour(Blockly.Blocks.io.HUE);this.appendDummyInput().appendField(Blockly.Msg.MBED_ANALOGREAD).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.analogPins),"PIN");this.setOutput(true,Blockly.Types.NUMBER.output);this.setTooltip(Blockly.Msg.MBED_ANALOGREAD_TIP)},getBlockType:function(){return Blockly.Types.NUMBER},updateFields:function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,
"PIN","analogPins")}};Blockly.Blocks["io_highlow"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/Constants");this.setColour(Blockly.Blocks.io.HUE);this.appendDummyInput().appendField(new Blockly.FieldDropdown([[Blockly.Msg.MBED_HIGH,"HIGH"],[Blockly.Msg.MBED_LOW,"LOW"]]),"STATE");this.setOutput(true,Blockly.Types.BOOLEAN.output);this.setTooltip(Blockly.Msg.MBED_HIGHLOW_TIP)},getBlockType:function(){return Blockly.Types.NUMBER}};
Blockly.Blocks["io_pulsein"]={init:function(){this.appendDummyInput().appendField(Blockly.Msg.MBED_PULSEREAD);this.appendValueInput("PULSETYPE").setCheck(Blockly.Types.BOOLEAN.check);this.appendDummyInput().appendField(Blockly.Msg.MBED_PULSEON).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.digitalPins),"PULSEPIN");this.setOutput(true);this.setInputsInline(true);this.setColour(Blockly.Blocks.io.HUE);this.setTooltip(Blockly.Msg.MBED_PULSE_TIP);this.setHelpUrl("https://www.mbed.cc/en/Reference/PulseIn")},
getBlockType:function(){return Blockly.Types.NUMBER}};
Blockly.Blocks["io_pulsetimeout"]={init:function(){this.appendDummyInput().appendField(Blockly.Msg.MBED_PULSEREAD);this.appendValueInput("PULSETYPE").setCheck(Blockly.Types.BOOLEAN.check);this.appendDummyInput().appendField(Blockly.Msg.MBED_PULSEON).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.digitalPins),"PULSEPIN");this.appendDummyInput().appendField(Blockly.Msg.MBED_PULSETIMEOUT);this.appendValueInput("TIMEOUT").setCheck(Blockly.Types.NUMBER.output);this.appendDummyInput().appendField(Blockly.Msg.MBED_PULSETIMEOUT_MS);
this.setOutput(true);this.setInputsInline(true);this.setColour(Blockly.Blocks.io.HUE);this.setTooltip(Blockly.Msg.MBED_PULSETIMEOUT_TIP);this.setHelpUrl("https://www.mbed.cc/en/Reference/PulseIn")},getBlockType:function(){return Blockly.Types.NUMBER}};Blockly.Blocks.logo={};Blockly.Blocks.logo.HUE=180;Blockly.Blocks["ardublockly_name_top"]={init:function(){this.appendDummyInput().appendField("Ardublockly");this.setPreviousStatement(true);this.setColour(Blockly.Blocks.logo.HUE)}};Blockly.Blocks["ardublockly_name_bottom"]={init:function(){this.appendDummyInput().appendField("Ardublockly");this.setNextStatement(true);this.setColour(Blockly.Blocks.logo.HUE);this.setTooltip("")}};
Blockly.Blocks["ardublockly_plus_top_large"]={init:function(){this.appendValueInput("NAME").appendField(" +");this.setNextStatement(true);this.setColour(Blockly.Blocks.logo.HUE)}};Blockly.Blocks["ardublockly_plus_top_small"]={init:function(){this.appendValueInput("NAME").appendField(" +");this.setNextStatement(true);this.setColour(Blockly.Blocks.logo.HUE)}};
Blockly.Blocks["ardublockly_plus_bottom_large"]={init:function(){this.appendValueInput("NAME").appendField(" +");this.setPreviousStatement(true);this.setColour(Blockly.Blocks.logo.HUE)}};Blockly.Blocks["ardublockly_plus_bottom_small"]={init:function(){this.appendValueInput("NAME").appendField(" +");this.setPreviousStatement(true);this.setColour(Blockly.Blocks.logo.HUE)}};
Blockly.Blocks["ardublockly_plus_both_small"]={init:function(){this.appendValueInput("NAME").appendField(" +");this.setPreviousStatement(true);this.setNextStatement(true);this.setColour(Blockly.Blocks.logo.HUE)}};Blockly.Blocks["ardublockly_plus_both_large"]={init:function(){this.appendValueInput("NAME").appendField(" +");this.setPreviousStatement(true);this.setNextStatement(true);this.setColour(Blockly.Blocks.logo.HUE)}};
Blockly.Blocks["ardublockly_minus_large"]={init:function(){this.appendDummyInput().appendField("- ");this.setInputsInline(false);this.setOutput(true);this.setColour(Blockly.Blocks.logo.HUE)}};Blockly.Blocks["ardublockly_minus_small"]={init:function(){this.appendDummyInput().appendField("- ");this.setInputsInline(false);this.setOutput(true);this.setColour(Blockly.Blocks.logo.HUE)}};Blockly.Blocks.macro={};Blockly.Blocks.macro.HUE=300;
Blockly.Blocks["macro_get"]={init:function(){this.setHelpUrl(Blockly.Msg.MBED_MACRO_GET_HELPURL);this.setColour(Blockly.Blocks.macro.HUE);this.appendDummyInput().appendField(new Blockly.FieldMacro(Blockly.Msg.MBED_MACRO_DEFAULT_NAME),"MACRO_NAME");this.setOutput(true);this.setTooltip(Blockly.Msg.MBED_MACRO_GET_TOOLTIP);this.contextMenuMsg_=Blockly.Msg.MBED_MACRO_DEFINE_CREATE_SET},contextMenuType_:"macro_set",customContextMenu:function(options){var option={enabled:true};var name=this.getFieldValue("VAR");option.text=
this.contextMenuMsg_.replace("%1",name);var xmlField=goog.dom.createDom("field",null,name);xmlField.setAttribute("name","VAR");var xmlBlock=goog.dom.createDom("block",null,xmlField);xmlBlock.setAttribute("type",this.contextMenuType_);option.callback=Blockly.ContextMenu.callbackFactory(this,xmlBlock);options.push(option)},getBlockType:function(){return[Blockly.Types.UNDEF,this.getFieldValue("VAR")]},getMacro:function(){var vars=[];for(var i=0,input;input=this.inputList[i];i++)for(var j=0,field;field=
input.fieldRow[j];j++)if(field instanceof Blockly.FieldMacro)vars.push(field.getValue());return vars},renameMacro:function(oldName,newName){for(var i=0,input;input=this.inputList[i];i++)for(var j=0,field;field=input.fieldRow[j];j++)if(field instanceof Blockly.FieldMacro&&Blockly.Names.equals(oldName,field.getValue()))field.setValue(newName)}};
Blockly.Blocks["macro_define"]={init:function(){this.appendValueInput("MACRO_DEFINE_AS").setCheck("Number").appendField("define").appendField(new Blockly.FieldMacro(Blockly.Msg.MBED_MACRO_DEFAULT_NAME),"MACRO_NAME").appendField("as");this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setColour(Blockly.Blocks.macro.HUE);this.setTooltip(Blockly.Msg.VARIABLES_SET_TOOLTIP);this.setHelpUrl(Blockly.Msg.VARIABLES_SET_HELPURL);this.contextMenuMsg_=Blockly.Msg.MBED_MACRO_DEFINE_CREATE_SET},contextMenuType_:"macro_get",
customContextMenu:Blockly.Blocks["macro_get"].customContextMenu,renameMacro:function(oldName,newName){for(var i=0,input;input=this.inputList[i];i++)for(var j=0,field;field=input.fieldRow[j];j++)if(field instanceof Blockly.FieldMacro&&Blockly.Names.equals(oldName,field.getValue()))field.setValue(newName)},getMacro:function(){var vars=[];for(var i=0,input;input=this.inputList[i];i++)for(var j=0,field;field=input.fieldRow[j];j++)if(field instanceof Blockly.FieldMacro)vars.push(field.getValue());return vars}};Blockly.Blocks.map={};Blockly.Blocks.map.HUE=230;
Blockly.Blocks["base_map"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/map");this.setColour(Blockly.Blocks.map.HUE);this.appendValueInput("NUM").appendField(Blockly.Msg.MBED_MAP).setCheck(Blockly.Types.NUMBER.checkList);this.appendValueInput("DMAX").appendField(Blockly.Msg.MBED_MAP_VAL).setCheck(Blockly.Types.NUMBER.checkList);this.appendDummyInput().appendField("]");this.setInputsInline(true);this.setOutput(true);this.setTooltip(Blockly.Msg.MBED_MAP_TIP)},getBlockType:function(){return Blockly.Types.NUMBER}};Blockly.Blocks.procedures.HUE=290;Blockly.Blocks["mbed_functions"]={init:function(){this.appendDummyInput().appendField(Blockly.Msg.MBED_FUN_RUN_SETUP);this.appendStatementInput("SETUP_FUNC");this.appendDummyInput().appendField(Blockly.Msg.MBED_FUN_RUN_LOOP);this.appendStatementInput("LOOP_FUNC");this.setInputsInline(false);this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.MBED_FUN_RUN_TIP);this.setHelpUrl("https://mbed.cc/en/Reference/Loop");this.contextMenu=false},getmbedLoopsInstance:function(){return true}};/*
You may not use this file except in compliance with the License.
You may obtain a copy of the License at
{@link http://www.apache.org/licenses/LICENSE-2.0}
@fileoverview Blocks for the mbed serial communication functions.
Last modified on 2/03/2018
*/
Blockly.Blocks.serial={};Blockly.Blocks.serial.HUE=160;Blockly.Blocks.serial_setup={};Blockly.Blocks.print_content={};Blockly.Blocks.serial_attach={};Blockly.Blocks.serial_print={};Blockly.Blocks.serial_getc={};
Blockly.Blocks.serial_setup.init=function(){this.setColour(Blockly.Blocks.serial.HUE);this.appendDummyInput().appendField("Serial Setup RX:","SERIAL_NAME").appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.serialPinsRX),"SERIAL_ID").appendField("TX:").appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.serialPinsTX),"SERIAL_ID_TX").appendField(Blockly.Msg.MBED_SERIAL_SPEED).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.serialSpeed),"SPEED").appendField(Blockly.Msg.MBED_SERIAL_BPS);
this.setInputsInline(true);this.setPreviousStatement(false,null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_SERIAL_SETUP_TIP)};Blockly.Blocks.serial_setup.getSerialSetupInstance=function(){return Blockly.mbed.Boards.selected.serialMapper[this.getFieldValue("SERIAL_ID")]};
Blockly.Blocks.serial_setup.onchange=function(){if(!this.workspace)return;var serialId=this.getFieldValue("SERIAL_ID");var serialId_TX=this.getFieldValue("SERIAL_ID_TX");var serialRX=Blockly.mbed.Boards.selected.serialMapper[serialId];var serialTX=Blockly.mbed.Boards.selected.serialMapper[serialId_TX];if(serialRX==serialTX){this.setWarningText(null,"serial_rx_tx_mismatch");this.setFieldValue("%1 Setup RX:".replace("%1",serialRX),"SERIAL_NAME")}else{this.setWarningText(serialRX+" mismatches "+serialTX,
"serial_rx_tx_mismatch");this.setFieldValue("Serial Setup RX","SERIAL_NAME")}};Blockly.Blocks.serial_setup.updateFields=function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SERIAL_ID","digitalPins");Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SERIAL_ID_TX","digitalPins");Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SPEED","serialSpeed")};
Blockly.Blocks.print_content.init=function(){this.appendValueInput("format_content").setCheck(null);this.setInputsInline(true);this.appendValueInput("join_content").setCheck(null).appendField("join");this.setInputsInline(false);this.setOutput(true,null);this.setColour(Blockly.Blocks.serial.HUE);this.setTooltip("print format extra content");this.setHelpUrl("")};
Blockly.Blocks.serial_attach.init=function(){this.appendDummyInput().appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.serialPins),"SERIAL_Pins").appendField("attach");this.appendStatementInput("function_body").setCheck(null);this.setInputsInline(true);this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setColour(Blockly.Blocks.serial.HUE);this.setTooltip("attach an interrupt function to configured serial");this.setHelpUrl("");this.arguments_=[]};
Blockly.Blocks.serial_print.init=function(){this.setColour(Blockly.Blocks.serial.HUE);this.appendValueInput("CONTENT").setCheck(Blockly.Types.TEXT.checkList).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.serialPins),"SERIAL_Pins").appendField(Blockly.Msg.MBED_SERIAL_PRINT);this.appendValueInput("CONTENT_STR").setCheck(null).appendField(new Blockly.FieldCheckbox("TRUE"),"NEW_LINE").appendField(Blockly.Msg.MBED_SERIAL_PRINT_NEWLINE);this.setInputsInline(false);this.setPreviousStatement(true,
null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_SERIAL_PRINT_TIP)};
Blockly.Blocks.serial_print.onchange=function(){if(!this.workspace)return;var thisInstanceName=this.getFieldValue("SERIAL_Pins");var setupInstancePresent=false;var blocks=Blockly.mainWorkspace.getTopBlocks();for(var x=0;x<blocks.length;x++){var func=blocks[x].getSerialSetupInstance;if(func){var setupBlockInstanceName=func.call(blocks[x]);if(thisInstanceName==setupBlockInstanceName)setupInstancePresent=true}}if(!setupInstancePresent)this.setWarningText(Blockly.Msg.MBED_SERIAL_PRINT_WARN.replace("%1",thisInstanceName),
"serial_setup");else this.setWarningText(null,"serial_setup")};Blockly.Blocks.serial_print.updateFields=function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SERIAL_Pins","serialPins")};Blockly.Blocks.serial_getc.init=function(){this.setOutput(true,null);this.setColour(Blockly.Blocks.serial.HUE);this.appendDummyInput("one_character").appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.serialPins),"SERIAL_Pins").appendField("getc");this.setInputsInline(false);this.setTooltip("Get one character from serial")};
Blockly.Blocks.serial_getc.onchange=function(){if(!this.workspace)return;var thisInstanceName=this.getFieldValue("SERIAL_Pins");var setupInstancePresent=false;var blocks=Blockly.mainWorkspace.getTopBlocks();for(var x=0;x<blocks.length;x++){var func=blocks[x].getSerialSetupInstance;if(func){var setupBlockInstanceName=func.call(blocks[x]);if(thisInstanceName==setupBlockInstanceName)setupInstancePresent=true}}if(!setupInstancePresent)this.setWarningText(Blockly.Msg.MBED_SERIAL_PRINT_WARN.replace("%1",
thisInstanceName),"serial_setup");else this.setWarningText(null,"serial_setup")};Blockly.Blocks.serial_getc.updateFields=function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SERIAL_Pins","serialPins")};/*
You may not use this file except in compliance with the License.
You may obtain a copy of the License at
{@link http://www.apache.org/licenses/LICENSE-2.0}
@fileoverview mbed blocks for the Servo library.
Last modified on 2/03/2018
*/
Blockly.Blocks.servo={};Blockly.Blocks.servo.HUE=60;Blockly.Blocks.servo_write={};Blockly.Blocks.servo_read={};
Blockly.Blocks.servo_write.init=function(){this.setColour(Blockly.Blocks.servo.HUE);this.appendValueInput("SERVO_PULSEWIDTH").setCheck(Blockly.Types.NUMBER.checkList).appendField(Blockly.Msg.MBED_SERVO_WRITE).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.pwmPins),"SERVO_PIN").appendField("pulsewidth:");this.appendDummyInput().appendField(new Blockly.FieldDropdown([["us","us"],["ms","ms"]]),"TimeDomain");this.setInputsInline(true);this.setPreviousStatement(true,null);this.setNextStatement(true,
null);this.setTooltip(Blockly.Msg.MBED_SERVO_WRITE_TIP)};Blockly.Blocks.servo_write.updateFields=function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SERVO_PIN","pwmPins")};Blockly.Blocks.servo_read.init=function(){this.setColour(Blockly.Blocks.servo.HUE);this.appendDummyInput().appendField(Blockly.Msg.MBED_SERVO_READ).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.pwmPins),"SERVO_PIN");this.setOutput(true,Blockly.Types.NUMBER.output);this.setTooltip(Blockly.Msg.MBED_SERVO_READ_TIP)};
Blockly.Blocks.servo_read.getBlockType=function(){return Blockly.Types.NUMBER};Blockly.Blocks.servo_read.updateFields=function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SERVO_PIN","pwmPins")};Blockly.Blocks.spi={};Blockly.Blocks.spi.HUE=170;
Blockly.Blocks["spi_setup"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/SPI");this.setColour(Blockly.Blocks.spi.HUE);var dropdown=new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.spi,function(option){var SPI1_CHOICE=option=="SPI1";this.sourceBlock_.updateShape_(SPI1_CHOICE)});this.appendDummyInput("Select").appendField(Blockly.Msg.MBED_SPI_SETUP).appendField(dropdown,"SPI_ID");this.appendDummyInput().appendField("CS").appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.digitalPins),"PIN");
this.appendValueInput("frequency").setCheck("Number").appendField("Frequency(MHz)");this.appendDummyInput().appendField(Blockly.Msg.MBED_SPI_SETUP_MODE).appendField(new Blockly.FieldDropdown([[Blockly.Msg.MBED_SPI_SETUP_MODE0,"0"],[Blockly.Msg.MBED_SPI_SETUP_MODE1,"1"],[Blockly.Msg.MBED_SPI_SETUP_MODE2,"2"],[Blockly.Msg.MBED_SPI_SETUP_MODE3,"3"]]),"SPI_MODE");this.setInputsInline(false);this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_SPI_SETUP_TIP)},
getSpiSetupInstance:function(){return this.getFieldValue("SPI_ID")},updateFields:function(){Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SPI_ID","spi");Blockly.mbed.Boards.refreshBlockFieldDropdown(this,"SPI_CLOCK_DIVIDE","spiClockDivide")},mutationToDom:function(){var container=document.createElement("mutation");var SPI_CHOISE=this.getFieldValue("SPI_ID")=="SPI1";container.setAttribute("SPI_CHOISE",SPI_CHOISE);return container},domToMutation:function(xmlElement){var SPI_CHOISE=xmlElement.getAttribute("SPI_CHOISE")==
"true";this.updateShape_(SPI_CHOISE)},updateShape_:function(SPI_CHOISE){var SelectInput=this.getInput("SPI1_CHOICE");if(SPI_CHOISE){if(!SelectInput)this.appendDummyInput("SPI1_CHOICE").appendField("SPI1 ID").appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.spi1_choice),"SPI1_ID")}else if(SelectInput)this.removeInput("SPI1_CHOICE")}};
Blockly.Blocks["spi_transfer"]={init:function(){var slaveNone=[[Blockly.Msg.MBED_SPI_TRANS_NONE,"none"]];var digitalPinsExtended=slaveNone.concat(Blockly.mbed.Boards.selected.digitalPins);this.setHelpUrl("http://mbed.cc/en/Reference/SPITransfer");this.setColour(Blockly.Blocks.spi.HUE);this.appendDummyInput().appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.spi),"SPI_ID");this.appendValueInput("SPI_DATA").setCheck(Blockly.Types.NUMBER.checkList).appendField(Blockly.Msg.MBED_SPI_TRANS_VAL);
this.setInputsInline(true);this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_SPI_TRANS_TIP)},onchange:function(){if(!this.workspace)return;var thisInstanceName=this.getFieldValue("SPI_ID");var blocks=Blockly.mainWorkspace.getTopBlocks();var setupInstancePresent=false;for(var x=0,length_=blocks.length;x<length_;x++){var func=blocks[x].getSpiSetupInstance;if(func){var setupBlockInstanceName=func.call(blocks[x]);if(thisInstanceName==setupBlockInstanceName)setupInstancePresent=
true}}if(!setupInstancePresent)this.setWarningText(Blockly.Msg.MBED_SPI_TRANS_WARN1.replace("%1",thisInstanceName),"spi_setup");else this.setWarningText(null,"spi_setup")},getBlockType:function(){return Blockly.Types.NUMBER},updateFields:function(){var field=this.getField("SPI_SS");var fieldValue=field.getValue();var slaveNone=[[Blockly.Msg.MBED_SPI_TRANS_NONE,"none"]];field.menuGenerator_=slaveNone.concat(Blockly.mbed.Boards.selected["digitalPins"]);var currentValuePresent=false;for(var i=0,length_=
field.menuGenerator_.length;i<length_;i++)if(fieldValue==field.menuGenerator_[i][1])currentValuePresent=true;if(!currentValuePresent)this.setWarningText(Blockly.Msg.MBED_SPI_TRANS_WARN2.replace("%1",fieldValue),"bPin");else this.setWarningText(null,"bPin")}};
Blockly.Blocks["spi_transfer_return"]={init:function(){var slaveNone=[[Blockly.Msg.MBED_SPI_TRANS_NONE,"none"]];var digitalPinsExtended=slaveNone.concat(Blockly.mbed.Boards.selected.digitalPins);this.setHelpUrl("http://mbed.cc/en/Reference/SPITransfer");this.setColour(Blockly.Blocks.spi.HUE);this.appendDummyInput().appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.spi),"SPI_ID");this.appendValueInput("SPI_DATA").appendField(Blockly.Msg.MBED_SPI_TRANS_VAL);this.appendDummyInput().appendField(Blockly.Msg.MBED_SPI_TRANS_SLAVE).appendField(new Blockly.FieldDropdown(digitalPinsExtended),
"SPI_SS");this.setInputsInline(true);this.setOutput(true);this.setTooltip(Blockly.Msg.MBED_SPI_TRANSRETURN_TIP)},onchange:Blockly.Blocks["spi_transfer"].onchange,getBlockType:Blockly.Blocks["spi_transfer"].getBlockType,updateFields:Blockly.Blocks["spi_transfer"].updateFields};Blockly.Blocks.time={};Blockly.Blocks.time.HUE=140;Blockly.Blocks["time_delay"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/Delay");this.setColour(Blockly.Blocks.time.HUE);this.appendValueInput("DELAY_TIME_MILI").setCheck(Blockly.Types.NUMBER.checkList).appendField(Blockly.Msg.MBED_TIME_DELAY);this.appendDummyInput().appendField(Blockly.Msg.MBED_TIME_MS);this.setInputsInline(true);this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_TIME_DELAY_TIP)}};
Blockly.Blocks["time_delaymicros"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/DelayMicroseconds");this.setColour(Blockly.Blocks.time.HUE);this.appendValueInput("DELAY_TIME_MICRO").setCheck(Blockly.Types.NUMBER.checkList).appendField(Blockly.Msg.MBED_TIME_DELAY);this.appendDummyInput().appendField(Blockly.Msg.MBED_TIME_DELAY_MICROS);this.setInputsInline(true);this.setPreviousStatement(true,null);this.setNextStatement(true,null);this.setTooltip(Blockly.Msg.MBED_TIME_DELAY_MICRO_TIP)}};
Blockly.Blocks["time_millis"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/Millis");this.setColour(Blockly.Blocks.time.HUE);this.appendDummyInput().appendField(Blockly.Msg.MBED_TIME_MILLIS);this.setOutput(true,Blockly.Types.LARGE_NUMBER.output);this.setTooltip(Blockly.Msg.MBED_TIME_MILLIS_TIP)},getBlockType:function(){return Blockly.Types.LARGE_NUMBER}};
Blockly.Blocks["time_micros"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/Micros");this.setColour(Blockly.Blocks.time.HUE);this.appendDummyInput().appendField(Blockly.Msg.MBED_TIME_MICROS);this.setOutput(true,Blockly.Types.LARGE_NUMBER.output);this.setTooltip(Blockly.Msg.MBED_TIME_MICROS_TIP)},getBlockType:function(){return Blockly.Types.LARGE_NUMBER}};
Blockly.Blocks["infinite_loop"]={init:function(){this.setHelpUrl("");this.setColour(Blockly.Blocks.time.HUE);this.appendDummyInput().appendField(Blockly.Msg.MBED_TIME_INF);this.setInputsInline(true);this.setPreviousStatement(true);this.setTooltip(Blockly.Msg.MBED_TIME_INF_TIP)}};Blockly.Blocks.tone={};Blockly.Blocks.tone.HUE=250;
Blockly.Blocks["io_tone"]={init:function(){this.appendDummyInput().appendField(Blockly.Msg.MBED_SETTONE).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.digitalPins),"TONEPIN");this.appendValueInput("FREQUENCY").setCheck(Blockly.Types.NUMBER.checkList).appendField(Blockly.Msg.MBED_TONEFREQ);this.setInputsInline(true);this.setPreviousStatement(true);this.setNextStatement(true);this.setColour(Blockly.Blocks.tone.HUE);this.setTooltip(Blockly.Msg.MBED_TONE_TIP);this.setHelpUrl("https://www.mbed.cc/en/Reference/tone")},
onchange:function(){var freq=Blockly.mbed.valueToCode(this,"FREQUENCY",Blockly.mbed.ORDER_ATOMIC);if(freq<31||freq>65535)this.setWarningText(Blockly.Msg.MBED_TONE_WARNING,"io_tone");else this.setWarningText(null,"io_tone")},getBlockType:function(){return Blockly.Types.NUMBER}};
Blockly.Blocks["io_notone"]={init:function(){this.appendDummyInput().appendField(Blockly.Msg.MBED_NOTONE).appendField(new Blockly.FieldDropdown(Blockly.mbed.Boards.selected.digitalPins),"TONEPIN");this.setPreviousStatement(true);this.setNextStatement(true);this.setColour(Blockly.Blocks.tone.HUE);this.setTooltip(Blockly.Msg.MBED_NOTONE_TIP);this.setHelpUrl("https://www.mbed.cc/en/Reference/noTone")},getBlockType:function(){return Blockly.Types.NUMBER}};Blockly.Blocks.variables.HUE=330;
Blockly.Blocks["variables_set_type"]={init:function(){this.setHelpUrl("http://mbed.cc/en/Reference/HomePage");this.setColour(Blockly.Blocks.variables.HUE);this.appendValueInput("VARIABLE_SETTYPE_INPUT");this.appendDummyInput().appendField(Blockly.Msg.MBED_VAR_AS).appendField(new Blockly.FieldDropdown(Blockly.Types.getValidTypeArray()),"VARIABLE_SETTYPE_TYPE");this.setInputsInline(true);this.setOutput(true);this.setTooltip(Blockly.Msg.MBED_VAR_AS_TIP)},getBlockType:function(){var blocklyTypeKey=this.getFieldValue("VARIABLE_SETTYPE_TYPE");
return Blockly.Types[blocklyTypeKey]}};Blockly.Blocks.procedures={};Blockly.Blocks.procedures.HUE=290;
Blockly.Blocks["procedures_defnoreturn"]={init:function(){var nameField=new Blockly.FieldTextInput("",Blockly.Procedures.rename);nameField.setSpellcheck(false);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE).appendField(nameField,"NAME").appendField("","PARAMS");this.setMutator(new Blockly.Mutator(["procedures_mutatorarg"]));if((this.workspace.options.comments||this.workspace.options.parentWorkspace&&this.workspace.options.parentWorkspace.options.comments)&&Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT)this.setCommentText(Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT);
this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP);this.setHelpUrl(Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL);this.arguments_=[];this.argumentVarModels_=[];this.setStatements_(true);this.statementConnection_=null},setStatements_:function(hasStatements){if(this.hasStatements_===hasStatements)return;if(hasStatements){this.appendStatementInput("STACK").appendField(Blockly.Msg.PROCEDURES_DEFNORETURN_DO);if(this.getInput("RETURN"))this.moveInputBefore("STACK",
"RETURN")}else this.removeInput("STACK",true);this.hasStatements_=hasStatements},updateParams_:function(){var badArg=false;var hash={};for(var i=0;i<this.arguments_.length;i++){if(hash["arg_"+this.arguments_[i].toLowerCase()]){badArg=true;break}hash["arg_"+this.arguments_[i].toLowerCase()]=true}if(badArg)this.setWarningText(Blockly.Msg.PROCEDURES_DEF_DUPLICATE_WARNING);else this.setWarningText(null);var paramString="";if(this.arguments_.length)paramString=Blockly.Msg.PROCEDURES_BEFORE_PARAMS+" "+
this.arguments_.join(", ");Blockly.Events.disable();try{this.setFieldValue(paramString,"PARAMS")}finally{Blockly.Events.enable()}},mutationToDom:function(opt_paramIds){var container=document.createElement("mutation");if(opt_paramIds)container.setAttribute("name",this.getFieldValue("NAME"));for(var i=0;i<this.argumentVarModels_.length;i++){var parameter=document.createElement("arg");var argModel=this.argumentVarModels_[i];parameter.setAttribute("name",argModel.name);parameter.setAttribute("varId",
argModel.getId());if(opt_paramIds&&this.paramIds_)parameter.setAttribute("paramId",this.paramIds_[i]);container.appendChild(parameter)}if(!this.hasStatements_)container.setAttribute("statements","false");return container},domToMutation:function(xmlElement){this.arguments_=[];this.argumentVarModels_=[];for(var i=0,childNode;childNode=xmlElement.childNodes[i];i++)if(childNode.nodeName.toLowerCase()=="arg"){var varName=childNode.getAttribute("name");var varId=childNode.getAttribute("varId");this.arguments_.push(varName);
var variable=Blockly.Variables.getOrCreateVariablePackage(this.workspace,varId,varName,"");this.argumentVarModels_.push(variable)}this.updateParams_();Blockly.Procedures.mutateCallers(this);this.setStatements_(xmlElement.getAttribute("statements")!=="false")},decompose:function(workspace){var containerBlock=workspace.newBlock("procedures_mutatorcontainer");containerBlock.initSvg();if(this.getInput("RETURN"))containerBlock.setFieldValue(this.hasStatements_?"TRUE":"FALSE","STATEMENTS");else containerBlock.getInput("STATEMENT_INPUT").setVisible(false);
var connection=containerBlock.getInput("STACK").connection;for(var i=0;i<this.arguments_.length;i++){var paramBlock=workspace.newBlock("procedures_mutatorarg");paramBlock.initSvg();paramBlock.setFieldValue(this.arguments_[i],"NAME");paramBlock.oldLocation=i;connection.connect(paramBlock.previousConnection);connection=paramBlock.nextConnection}Blockly.Procedures.mutateCallers(this);return containerBlock},compose:function(containerBlock){this.arguments_=[];this.paramIds_=[];this.argumentVarModels_=
[];var paramBlock=containerBlock.getInputTargetBlock("STACK");while(paramBlock){var varName=paramBlock.getFieldValue("NAME");this.arguments_.push(varName);var variable=this.workspace.getVariable(varName,"");this.argumentVarModels_.push(variable);this.paramIds_.push(paramBlock.id);paramBlock=paramBlock.nextConnection&¶mBlock.nextConnection.targetBlock()}this.updateParams_();Blockly.Procedures.mutateCallers(this);var hasStatements=containerBlock.getFieldValue("STATEMENTS");if(hasStatements!==null){hasStatements=
hasStatements=="TRUE";if(this.hasStatements_!=hasStatements)if(hasStatements){this.setStatements_(true);Blockly.Mutator.reconnect(this.statementConnection_,this,"STACK");this.statementConnection_=null}else{var stackConnection=this.getInput("STACK").connection;this.statementConnection_=stackConnection.targetConnection;if(this.statementConnection_){var stackBlock=stackConnection.targetBlock();stackBlock.unplug();stackBlock.bumpNeighbours_()}this.setStatements_(false)}}},getProcedureDef:function(){return[this.getFieldValue("NAME"),
this.arguments_,false]},getVars:function(){return this.arguments_},getVarModels:function(){return this.argumentVarModels_},renameVarById:function(oldId,newId){var oldVariable=this.workspace.getVariableById(oldId);if(oldVariable.type!="")return;var oldName=oldVariable.name;var newVar=this.workspace.getVariableById(newId);var change=false;for(var i=0;i<this.argumentVarModels_.length;i++)if(this.argumentVarModels_[i].getId()==oldId){this.arguments_[i]=newVar.name;this.argumentVarModels_[i]=newVar;change=
true}if(change)this.displayRenamedVar_(oldName,newVar.name)},updateVarName:function(variable){var newName=variable.name;var change=false;for(var i=0;i<this.argumentVarModels_.length;i++)if(this.argumentVarModels_[i].getId()==variable.getId()){var oldName=this.arguments_[i];this.arguments_[i]=newName;change=true}if(change)this.displayRenamedVar_(oldName,newName)},displayRenamedVar_:function(oldName,newName){this.updateParams_();if(this.mutator.isVisible()){var blocks=this.mutator.workspace_.getAllBlocks();
for(var i=0,block;block=blocks[i];i++)if(block.type=="procedures_mutatorarg"&&Blockly.Names.equals(oldName,block.getFieldValue("NAME")))block.setFieldValue(newName,"NAME")}},customContextMenu:function(options){var option={enabled:true};var name=this.getFieldValue("NAME");option.text=Blockly.Msg.PROCEDURES_CREATE_DO.replace("%1",name);var xmlMutation=goog.dom.createDom("mutation");xmlMutation.setAttribute("name",name);for(var i=0;i<this.arguments_.length;i++){var xmlArg=goog.dom.createDom("arg");xmlArg.setAttribute("name",
this.arguments_[i]);xmlMutation.appendChild(xmlArg)}var xmlBlock=goog.dom.createDom("block",null,xmlMutation);xmlBlock.setAttribute("type",this.callType_);option.callback=Blockly.ContextMenu.callbackFactory(this,xmlBlock);options.push(option);if(!this.isCollapsed())for(var i=0;i<this.arguments_.length;i++){var option={enabled:true};var name=this.arguments_[i];option.text=Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1",name);var xmlField=goog.dom.createDom("field",null,name);xmlField.setAttribute("name",
"VAR");var xmlBlock=goog.dom.createDom("block",null,xmlField);xmlBlock.setAttribute("type","variables_get");option.callback=Blockly.ContextMenu.callbackFactory(this,xmlBlock);options.push(option)}},callType_:"procedures_callnoreturn"};
Blockly.Blocks["procedures_defreturn"]={init:function(){var nameField=new Blockly.FieldTextInput("",Blockly.Procedures.rename);nameField.setSpellcheck(false);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_DEFRETURN_TITLE).appendField(nameField,"NAME").appendField("","PARAMS");this.appendValueInput("RETURN").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);this.setMutator(new Blockly.Mutator(["procedures_mutatorarg"]));if((this.workspace.options.comments||
this.workspace.options.parentWorkspace&&this.workspace.options.parentWorkspace.options.comments)&&Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT)this.setCommentText(Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT);this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP);this.setHelpUrl(Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL);this.arguments_=[];this.argumentVarModels_=[];this.setStatements_(true);this.statementConnection_=null},setStatements_:Blockly.Blocks["procedures_defnoreturn"].setStatements_,
updateParams_:Blockly.Blocks["procedures_defnoreturn"].updateParams_,mutationToDom:Blockly.Blocks["procedures_defnoreturn"].mutationToDom,domToMutation:Blockly.Blocks["procedures_defnoreturn"].domToMutation,decompose:Blockly.Blocks["procedures_defnoreturn"].decompose,compose:Blockly.Blocks["procedures_defnoreturn"].compose,getProcedureDef:function(){return[this.getFieldValue("NAME"),this.arguments_,true]},getVars:Blockly.Blocks["procedures_defnoreturn"].getVars,getVarModels:Blockly.Blocks["procedures_defnoreturn"].getVarModels,
renameVarById:Blockly.Blocks["procedures_defnoreturn"].renameVarById,updateVarName:Blockly.Blocks["procedures_defnoreturn"].updateVarName,displayRenamedVar_:Blockly.Blocks["procedures_defnoreturn"].displayRenamedVar_,customContextMenu:Blockly.Blocks["procedures_defnoreturn"].customContextMenu,callType_:"procedures_callreturn"};
Blockly.Blocks["procedures_mutatorcontainer"]={init:function(){this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE);this.appendStatementInput("STACK");this.appendDummyInput("STATEMENT_INPUT").appendField(Blockly.Msg.PROCEDURES_ALLOW_STATEMENTS).appendField(new Blockly.FieldCheckbox("TRUE"),"STATEMENTS");this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TOOLTIP);this.contextMenu=false}};
Blockly.Blocks["procedures_mutatorarg"]={init:function(){var field=new Blockly.FieldTextInput("x",this.validator_);field.oldShowEditorFn_=field.showEditor_;var newShowEditorFn=function(){this.createdVariables_=[];this.oldShowEditorFn_()};field.showEditor_=newShowEditorFn;this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_MUTATORARG_TITLE).appendField(field,"NAME");this.setPreviousStatement(true);this.setNextStatement(true);this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_MUTATORARG_TOOLTIP);
this.contextMenu=false;field.onFinishEditing_=this.deleteIntermediateVars_;field.createdVariables_=[];field.onFinishEditing_("x")},validator_:function(varName){var outerWs=Blockly.Mutator.findParentWs(this.sourceBlock_.workspace);varName=varName.replace(/[\s\xa0]+/g," ").replace(/^ | $/g,"");if(!varName)return null;var model=outerWs.getVariable(varName,"");if(model&&model.name!=varName)outerWs.renameVarById(model.getId(),varName);if(!model){model=outerWs.createVariable(varName,"");if(model&&this.createdVariables_)this.createdVariables_.push(model)}return varName},
deleteIntermediateVars_:function(newText){var outerWs=Blockly.Mutator.findParentWs(this.sourceBlock_.workspace);if(!outerWs)return;for(var i=0;i<this.createdVariables_.length;i++){var model=this.createdVariables_[i];if(model.name!=newText)outerWs.deleteVariableById(model.getId())}}};
Blockly.Blocks["procedures_callnoreturn"]={init:function(){this.appendDummyInput("TOPROW").appendField(this.id,"NAME");this.setPreviousStatement(true);this.setNextStatement(true);this.setColour(Blockly.Blocks.procedures.HUE);this.setHelpUrl(Blockly.Msg.PROCEDURES_CALLNORETURN_HELPURL);this.arguments_=[];this.argumentVarModels_=[];this.quarkConnections_={};this.quarkIds_=null},getProcedureCall:function(){return this.getFieldValue("NAME")},renameProcedure:function(oldName,newName){if(Blockly.Names.equals(oldName,
this.getProcedureCall())){this.setFieldValue(newName,"NAME");var baseMsg=this.outputConnection?Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP:Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP;this.setTooltip(baseMsg.replace("%1",newName))}},setProcedureParameters_:function(paramNames,paramIds){var defBlock=Blockly.Procedures.getDefinition(this.getProcedureCall(),this.workspace);var mutatorOpen=defBlock&&defBlock.mutator&&defBlock.mutator.isVisible();if(!mutatorOpen){this.quarkConnections_={};this.quarkIds_=
null}if(!paramIds)return;if(goog.array.equals(this.arguments_,paramNames)){this.quarkIds_=paramIds;return}if(paramIds.length!=paramNames.length)throw"Error: paramNames and paramIds must be the same length.";this.setCollapsed(false);if(!this.quarkIds_){this.quarkConnections_={};if(paramNames.join("\n")==this.arguments_.join("\n"))this.quarkIds_=paramIds;else this.quarkIds_=[]}var savedRendered=this.rendered;this.rendered=false;for(var i=0;i<this.arguments_.length;i++){var input=this.getInput("ARG"+
i);if(input){var connection=input.connection.targetConnection;this.quarkConnections_[this.quarkIds_[i]]=connection;if(mutatorOpen&&connection&¶mIds.indexOf(this.quarkIds_[i])==-1){connection.disconnect();connection.getSourceBlock().bumpNeighbours_()}}}this.arguments_=[].concat(paramNames);this.argumentVarModels_=[];for(var i=0;i<this.arguments_.length;i++){var variable=Blockly.Variables.getOrCreateVariablePackage(this.workspace,null,this.arguments_[i],"");this.argumentVarModels_.push(variable)}this.updateShape_();
this.quarkIds_=paramIds;if(this.quarkIds_)for(var i=0;i<this.arguments_.length;i++){var quarkId=this.quarkIds_[i];if(quarkId in this.quarkConnections_){var connection=this.quarkConnections_[quarkId];if(!Blockly.Mutator.reconnect(connection,this,"ARG"+i))delete this.quarkConnections_[quarkId]}}this.rendered=savedRendered;if(this.rendered)this.render()},updateShape_:function(){for(var i=0;i<this.arguments_.length;i++){var field=this.getField("ARGNAME"+i);if(field){Blockly.Events.disable();try{field.setValue(this.arguments_[i])}finally{Blockly.Events.enable()}}else{field=
new Blockly.FieldLabel(this.arguments_[i]);var input=this.appendValueInput("ARG"+i).setAlign(Blockly.ALIGN_RIGHT).appendField(field,"ARGNAME"+i);input.init()}}while(this.getInput("ARG"+i)){this.removeInput("ARG"+i);i++}var topRow=this.getInput("TOPROW");if(topRow)if(this.arguments_.length){if(!this.getField("WITH")){topRow.appendField(Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS,"WITH");topRow.init()}}else if(this.getField("WITH"))topRow.removeField("WITH")},mutationToDom:function(){var container=document.createElement("mutation");
container.setAttribute("name",this.getProcedureCall());for(var i=0;i<this.arguments_.length;i++){var parameter=document.createElement("arg");parameter.setAttribute("name",this.arguments_[i]);container.appendChild(parameter)}return container},domToMutation:function(xmlElement){var name=xmlElement.getAttribute("name");this.renameProcedure(this.getProcedureCall(),name);var args=[];var paramIds=[];for(var i=0,childNode;childNode=xmlElement.childNodes[i];i++)if(childNode.nodeName.toLowerCase()=="arg"){args.push(childNode.getAttribute("name"));
paramIds.push(childNode.getAttribute("paramId"))}this.setProcedureParameters_(args,paramIds)},getVarModels:function(){return this.argumentVarModels_},onchange:function(event){if(!this.workspace||this.workspace.isFlyout)return;if(event.type==Blockly.Events.BLOCK_CREATE&&event.ids.indexOf(this.id)!=-1){var name=this.getProcedureCall();var def=Blockly.Procedures.getDefinition(name,this.workspace);if(def&&(def.type!=this.defType_||JSON.stringify(def.arguments_)!=JSON.stringify(this.arguments_)))def=null;
if(!def){Blockly.Events.setGroup(event.group);var xml=goog.dom.createDom("xml");var block=goog.dom.createDom("block");block.setAttribute("type",this.defType_);var xy=this.getRelativeToSurfaceXY();var x=xy.x+Blockly.SNAP_RADIUS*(this.RTL?-1:1);var y=xy.y+Blockly.SNAP_RADIUS*2;block.setAttribute("x",x);block.setAttribute("y",y);var mutation=this.mutationToDom();block.appendChild(mutation);var field=goog.dom.createDom("field");field.setAttribute("name","NAME");field.appendChild(document.createTextNode(this.getProcedureCall()));
block.appendChild(field);xml.appendChild(block);Blockly.Xml.domToWorkspace(xml,this.workspace);Blockly.Events.setGroup(false)}}else if(event.type==Blockly.Events.BLOCK_DELETE){var name=this.getProcedureCall();var def=Blockly.Procedures.getDefinition(name,this.workspace);if(!def){Blockly.Events.setGroup(event.group);this.dispose(true,false);Blockly.Events.setGroup(false)}}},customContextMenu:function(options){var option={enabled:true};option.text=Blockly.Msg.PROCEDURES_HIGHLIGHT_DEF;var name=this.getProcedureCall();
var workspace=this.workspace;option.callback=function(){var def=Blockly.Procedures.getDefinition(name,workspace);def&&def.select()};options.push(option)},defType_:"procedures_defnoreturn"};
Blockly.Blocks["procedures_callreturn"]={init:function(){this.appendDummyInput("TOPROW").appendField("","NAME");this.setOutput(true);this.setColour(Blockly.Blocks.procedures.HUE);this.setHelpUrl(Blockly.Msg.PROCEDURES_CALLRETURN_HELPURL);this.arguments_=[];this.quarkConnections_={};this.quarkIds_=null},getProcedureCall:Blockly.Blocks["procedures_callnoreturn"].getProcedureCall,renameProcedure:Blockly.Blocks["procedures_callnoreturn"].renameProcedure,setProcedureParameters_:Blockly.Blocks["procedures_callnoreturn"].setProcedureParameters_,
updateShape_:Blockly.Blocks["procedures_callnoreturn"].updateShape_,mutationToDom:Blockly.Blocks["procedures_callnoreturn"].mutationToDom,domToMutation:Blockly.Blocks["procedures_callnoreturn"].domToMutation,getVarModels:Blockly.Blocks["procedures_callnoreturn"].getVarModels,onchange:Blockly.Blocks["procedures_callnoreturn"].onchange,customContextMenu:Blockly.Blocks["procedures_callnoreturn"].customContextMenu,defType_:"procedures_defreturn"};
Blockly.Blocks["procedures_ifreturn"]={init:function(){this.appendValueInput("CONDITION").setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);this.appendValueInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);this.setInputsInline(true);this.setPreviousStatement(true);this.setNextStatement(true);this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_IFRETURN_TOOLTIP);this.setHelpUrl(Blockly.Msg.PROCEDURES_IFRETURN_HELPURL);this.hasReturnValue_=
true},mutationToDom:function(){var container=document.createElement("mutation");container.setAttribute("value",Number(this.hasReturnValue_));return container},domToMutation:function(xmlElement){var value=xmlElement.getAttribute("value");this.hasReturnValue_=value==1;if(!this.hasReturnValue_){this.removeInput("VALUE");this.appendDummyInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN)}},onchange:function(){if(!this.workspace.isDragging||this.workspace.isDragging())return;var legal=
false;var block=this;do{if(this.FUNCTION_TYPES.indexOf(block.type)!=-1){legal=true;break}block=block.getSurroundParent()}while(block);if(legal){if(block.type=="procedures_defnoreturn"&&this.hasReturnValue_){this.removeInput("VALUE");this.appendDummyInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);this.hasReturnValue_=false}else if(block.type=="procedures_defreturn"&&!this.hasReturnValue_){this.removeInput("VALUE");this.appendValueInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);
this.hasReturnValue_=true}this.setWarningText(null);if(!this.isInFlyout)this.setDisabled(false)}else{this.setWarningText(Blockly.Msg.PROCEDURES_IFRETURN_WARNING);if(!this.isInFlyout&&!this.getInheritedDisabled())this.setDisabled(true)}},FUNCTION_TYPES:["procedures_defnoreturn","procedures_defreturn"]};Blockly.Blocks.texts={};Blockly.Constants.Text={};Blockly.Constants.Text.HUE=160;Blockly.Blocks.texts.HUE=Blockly.Constants.Text.HUE;
Blockly.defineBlocksWithJsonArray([{"type":"text","message0":"%1","args0":[{"type":"field_input","name":"TEXT","text":""}],"output":"String","colour":"%{BKY_TEXTS_HUE}","helpUrl":"%{BKY_TEXT_TEXT_HELPURL}","tooltip":"%{BKY_TEXT_TEXT_TOOLTIP}","extensions":["text_quotes","parent_tooltip_when_inline"]},{"type":"text_join","message0":"","output":"String","colour":"%{BKY_TEXTS_HUE}","helpUrl":"%{BKY_TEXT_JOIN_HELPURL}","tooltip":"%{BKY_TEXT_JOIN_TOOLTIP}","mutator":"text_join_mutator"},{"type":"text_create_join_container",
"message0":"%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2","args0":[{"type":"input_dummy"},{"type":"input_statement","name":"STACK"}],"colour":"%{BKY_TEXTS_HUE}","tooltip":"%{BKY_TEXT_CREATE_JOIN_TOOLTIP}","enableContextMenu":false},{"type":"text_create_join_item","message0":"%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}","previousStatement":null,"nextStatement":null,"colour":"%{BKY_TEXTS_HUE}","tooltip":"{%BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}","enableContextMenu":false},{"type":"text_append","message0":"%{BKY_TEXT_APPEND_TITLE}",
"args0":[{"type":"field_variable","name":"VAR","variable":"%{BKY_TEXT_APPEND_VARIABLE}"},{"type":"input_value","name":"TEXT"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_TEXTS_HUE}","extensions":["text_append_tooltip"]},{"type":"text_length","message0":"%{BKY_TEXT_LENGTH_TITLE}","args0":[{"type":"input_value","name":"VALUE","check":["String","Array"]}],"output":"Number","colour":"%{BKY_TEXTS_HUE}","tooltip":"%{BKY_TEXT_LENGTH_TOOLTIP}","helpUrl":"%{BKY_TEXT_LENGTH_HELPURL}"},{"type":"text_isEmpty",
"message0":"%{BKY_TEXT_ISEMPTY_TITLE}","args0":[{"type":"input_value","name":"VALUE","check":["String","Array"]}],"output":"Boolean","colour":"%{BKY_TEXTS_HUE}","tooltip":"%{BKY_TEXT_ISEMPTY_TOOLTIP}","helpUrl":"%{BKY_TEXT_ISEMPTY_HELPURL}"},{"type":"text_indexOf","message0":"%{BKY_TEXT_INDEXOF_TITLE}","args0":[{"type":"input_value","name":"VALUE","check":"String"},{"type":"field_dropdown","name":"END","options":[["%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}","FIRST"],["%{BKY_TEXT_INDEXOF_OPERATOR_LAST}",
"LAST"]]},{"type":"input_value","name":"FIND","check":"String"}],"output":"Number","colour":"%{BKY_TEXTS_HUE}","helpUrl":"%{BKY_TEXT_INDEXOF_HELPURL}","inputsInline":true,"extensions":["text_indexOf_tooltip"]},{"type":"text_charAt","message0":"%{BKY_TEXT_CHARAT_TITLE}","args0":[{"type":"input_value","name":"VALUE","check":"String"},{"type":"field_dropdown","name":"WHERE","options":[["%{BKY_TEXT_CHARAT_FROM_START}","FROM_START"],["%{BKY_TEXT_CHARAT_FROM_END}","FROM_END"],["%{BKY_TEXT_CHARAT_FIRST}",
"FIRST"],["%{BKY_TEXT_CHARAT_LAST}","LAST"],["%{BKY_TEXT_CHARAT_RANDOM}","RANDOM"]]}],"output":"String","colour":"%{BKY_TEXTS_HUE}","helpUrl":"%{BKY_TEXT_CHARAT_HELPURL}","inputsInline":true,"mutator":"text_charAt_mutator"}]);
Blockly.Blocks["text_getSubstring"]={init:function(){this["WHERE_OPTIONS_1"]=[[Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_START,"FROM_START"],[Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_END,"FROM_END"],[Blockly.Msg.TEXT_GET_SUBSTRING_START_FIRST,"FIRST"]];this["WHERE_OPTIONS_2"]=[[Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_START,"FROM_START"],[Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_END,"FROM_END"],[Blockly.Msg.TEXT_GET_SUBSTRING_END_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.TEXT_GET_SUBSTRING_HELPURL);
this.setColour(Blockly.Blocks.texts.HUE);this.appendValueInput("STRING").setCheck("String").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);this.appendDummyInput("AT1");this.appendDummyInput("AT2");if(Blockly.Msg.TEXT_GET_SUBSTRING_TAIL)this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(true);this.setOutput(true,"String");this.updateAt_(1,true);this.updateAt_(2,true);this.setTooltip(Blockly.Msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){var container=
document.createElement("mutation");var isAt1=this.getInput("AT1").type==Blockly.INPUT_VALUE;container.setAttribute("at1",isAt1);var isAt2=this.getInput("AT2").type==Blockly.INPUT_VALUE;container.setAttribute("at2",isAt2);return container},domToMutation:function(xmlElement){var isAt1=xmlElement.getAttribute("at1")=="true";var isAt2=xmlElement.getAttribute("at2")=="true";this.updateAt_(1,isAt1);this.updateAt_(2,isAt2)},updateAt_:function(n,isAt){this.removeInput("AT"+n);this.removeInput("ORDINAL"+n,
true);if(isAt){this.appendValueInput("AT"+n).setCheck("Number");if(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)this.appendDummyInput("ORDINAL"+n).appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)}else this.appendDummyInput("AT"+n);if(n==2&&Blockly.Msg.TEXT_GET_SUBSTRING_TAIL){this.removeInput("TAIL",true);this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_TAIL)}var menu=new Blockly.FieldDropdown(this["WHERE_OPTIONS_"+n],function(value){var newAt=value=="FROM_START"||value=="FROM_END";if(newAt!=
isAt){var block=this.sourceBlock_;block.updateAt_(n,newAt);block.setFieldValue(value,"WHERE"+n);return null}return undefined});this.getInput("AT"+n).appendField(menu,"WHERE"+n);if(n==1)this.moveInputBefore("AT1","AT2")}};
Blockly.Blocks["text_changeCase"]={init:function(){var OPERATORS=[[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,"UPPERCASE"],[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,"LOWERCASE"],[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,"TITLECASE"]];this.setHelpUrl(Blockly.Msg.TEXT_CHANGECASE_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.appendValueInput("TEXT").setCheck("String").appendField(new Blockly.FieldDropdown(OPERATORS),"CASE");this.setOutput(true,"String");this.setTooltip(Blockly.Msg.TEXT_CHANGECASE_TOOLTIP)}};
Blockly.Blocks["text_trim"]={init:function(){var OPERATORS=[[Blockly.Msg.TEXT_TRIM_OPERATOR_BOTH,"BOTH"],[Blockly.Msg.TEXT_TRIM_OPERATOR_LEFT,"LEFT"],[Blockly.Msg.TEXT_TRIM_OPERATOR_RIGHT,"RIGHT"]];this.setHelpUrl(Blockly.Msg.TEXT_TRIM_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.appendValueInput("TEXT").setCheck("String").appendField(new Blockly.FieldDropdown(OPERATORS),"MODE");this.setOutput(true,"String");this.setTooltip(Blockly.Msg.TEXT_TRIM_TOOLTIP)}};
Blockly.Blocks["text_print"]={init:function(){this.jsonInit({"message0":Blockly.Msg.TEXT_PRINT_TITLE,"args0":[{"type":"input_value","name":"TEXT"}],"previousStatement":null,"nextStatement":null,"colour":Blockly.Blocks.texts.HUE,"tooltip":Blockly.Msg.TEXT_PRINT_TOOLTIP,"helpUrl":Blockly.Msg.TEXT_PRINT_HELPURL})}};
Blockly.Blocks["text_prompt_ext"]={init:function(){var TYPES=[[Blockly.Msg.TEXT_PROMPT_TYPE_TEXT,"TEXT"],[Blockly.Msg.TEXT_PROMPT_TYPE_NUMBER,"NUMBER"]];this.setHelpUrl(Blockly.Msg.TEXT_PROMPT_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);var thisBlock=this;var dropdown=new Blockly.FieldDropdown(TYPES,function(newOp){thisBlock.updateType_(newOp)});this.appendValueInput("TEXT").appendField(dropdown,"TYPE");this.setOutput(true,"String");this.setTooltip(function(){return thisBlock.getFieldValue("TYPE")==
"TEXT"?Blockly.Msg.TEXT_PROMPT_TOOLTIP_TEXT:Blockly.Msg.TEXT_PROMPT_TOOLTIP_NUMBER})},updateType_:function(newOp){this.outputConnection.setCheck(newOp=="NUMBER"?"Number":"String")},mutationToDom:function(){var container=document.createElement("mutation");container.setAttribute("type",this.getFieldValue("TYPE"));return container},domToMutation:function(xmlElement){this.updateType_(xmlElement.getAttribute("type"))}};
Blockly.Blocks["text_prompt"]={init:function(){this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);var TYPES=[[Blockly.Msg.TEXT_PROMPT_TYPE_TEXT,"TEXT"],[Blockly.Msg.TEXT_PROMPT_TYPE_NUMBER,"NUMBER"]];var thisBlock=this;this.setHelpUrl(Blockly.Msg.TEXT_PROMPT_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);var dropdown=new Blockly.FieldDropdown(TYPES,function(newOp){thisBlock.updateType_(newOp)});this.appendDummyInput().appendField(dropdown,"TYPE").appendField(this.newQuote_(true)).appendField(new Blockly.FieldTextInput(""),
"TEXT").appendField(this.newQuote_(false));this.setOutput(true,"String");this.setTooltip(function(){return thisBlock.getFieldValue("TYPE")=="TEXT"?Blockly.Msg.TEXT_PROMPT_TOOLTIP_TEXT:Blockly.Msg.TEXT_PROMPT_TOOLTIP_NUMBER})},updateType_:Blockly.Blocks["text_prompt_ext"].updateType_,mutationToDom:Blockly.Blocks["text_prompt_ext"].mutationToDom,domToMutation:Blockly.Blocks["text_prompt_ext"].domToMutation};
Blockly.Blocks["text_count"]={init:function(){this.jsonInit({"message0":Blockly.Msg.TEXT_COUNT_MESSAGE0,"args0":[{"type":"input_value","name":"SUB","check":"String"},{"type":"input_value","name":"TEXT","check":"String"}],"output":"Number","inputsInline":true,"colour":Blockly.Blocks.texts.HUE,"tooltip":Blockly.Msg.TEXT_COUNT_TOOLTIP,"helpUrl":Blockly.Msg.TEXT_COUNT_HELPURL})}};
Blockly.Blocks["text_replace"]={init:function(){this.jsonInit({"message0":Blockly.Msg.TEXT_REPLACE_MESSAGE0,"args0":[{"type":"input_value","name":"FROM","check":"String"},{"type":"input_value","name":"TO","check":"String"},{"type":"input_value","name":"TEXT","check":"String"}],"output":"String","inputsInline":true,"colour":Blockly.Blocks.texts.HUE,"tooltip":Blockly.Msg.TEXT_REPLACE_TOOLTIP,"helpUrl":Blockly.Msg.TEXT_REPLACE_HELPURL})}};
Blockly.Blocks["text_reverse"]={init:function(){this.jsonInit({"message0":Blockly.Msg.TEXT_REVERSE_MESSAGE0,"args0":[{"type":"input_value","name":"TEXT","check":"String"}],"output":"String","inputsInline":true,"colour":Blockly.Blocks.texts.HUE,"tooltip":Blockly.Msg.TEXT_REVERSE_TOOLTIP,"helpUrl":Blockly.Msg.TEXT_REVERSE_HELPURL})}};
Blockly.Constants.Text.QUOTE_IMAGE_MIXIN={QUOTE_IMAGE_LEFT_DATAURI:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAA"+"n0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY"+"1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1"+"HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMf"+"z9AylsaRRgGzvZAAAAAElFTkSuQmCC",QUOTE_IMAGE_RIGHT_DATAURI:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAA"+"qUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhg"+
"gONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvB"+"O3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5Aos"+"lLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg\x3d\x3d",QUOTE_IMAGE_WIDTH:12,QUOTE_IMAGE_HEIGHT:12,quoteField_:function(fieldName){for(var i=0,input;input=this.inputList[i];i++)for(var j=0,field;field=input.fieldRow[j];j++)if(fieldName==field.name){input.insertFieldAt(j,this.newQuote_(true));input.insertFieldAt(j+2,this.newQuote_(false));return}console.warn('field named "'+
fieldName+'" not found in '+this.toDevString())},newQuote_:function(open){var isLeft=this.RTL?!open:open;var dataUri=isLeft?this.QUOTE_IMAGE_LEFT_DATAURI:this.QUOTE_IMAGE_RIGHT_DATAURI;return new Blockly.FieldImage(dataUri,this.QUOTE_IMAGE_WIDTH,this.QUOTE_IMAGE_HEIGHT,isLeft?"\u201c":"\u201d")}};Blockly.Constants.Text.TEXT_QUOTES_EXTENSION=function(){this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);this.quoteField_("TEXT")};
Blockly.Constants.Text.TEXT_JOIN_MUTATOR_MIXIN={mutationToDom:function(){var container=document.createElement("mutation");container.setAttribute("items",this.itemCount_);return container},domToMutation:function(xmlElement){this.itemCount_=parseInt(xmlElement.getAttribute("items"),10);this.updateShape_()},decompose:function(workspace){var containerBlock=workspace.newBlock("text_create_join_container");containerBlock.initSvg();var connection=containerBlock.getInput("STACK").connection;for(var i=0;i<
this.itemCount_;i++){var itemBlock=workspace.newBlock("text_create_join_item");itemBlock.initSvg();connection.connect(itemBlock.previousConnection);connection=itemBlock.nextConnection}return containerBlock},compose:function(containerBlock){var itemBlock=containerBlock.getInputTargetBlock("STACK");var connections=[];while(itemBlock){connections.push(itemBlock.valueConnection_);itemBlock=itemBlock.nextConnection&&itemBlock.nextConnection.targetBlock()}for(var i=0;i<this.itemCount_;i++){var connection=
this.getInput("ADD"+i).connection.targetConnection;if(connection&&connections.indexOf(connection)==-1)connection.disconnect()}this.itemCount_=connections.length;this.updateShape_();for(var i=0;i<this.itemCount_;i++)Blockly.Mutator.reconnect(connections[i],this,"ADD"+i)},saveConnections:function(containerBlock){var itemBlock=containerBlock.getInputTargetBlock("STACK");var i=0;while(itemBlock){var input=this.getInput("ADD"+i);itemBlock.valueConnection_=input&&input.connection.targetConnection;i++;itemBlock=
itemBlock.nextConnection&&itemBlock.nextConnection.targetBlock()}},updateShape_:function(){if(this.itemCount_&&this.getInput("EMPTY"))this.removeInput("EMPTY");else if(!this.itemCount_&&!this.getInput("EMPTY"))this.appendDummyInput("EMPTY").appendField(this.newQuote_(true)).appendField(this.newQuote_(false));for(var i=0;i<this.itemCount_;i++)if(!this.getInput("ADD"+i)){var input=this.appendValueInput("ADD"+i);if(i==0)input.appendField(Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH)}while(this.getInput("ADD"+
i)){this.removeInput("ADD"+i);i++}}};Blockly.Constants.Text.TEXT_JOIN_EXTENSION=function(){this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);this.itemCount_=2;this.updateShape_();this.setMutator(new Blockly.Mutator(["text_create_join_item"]))};Blockly.Constants.Text.TEXT_APPEND_TOOLTIP_EXTENSION=function(){var thisBlock=this;this.setTooltip(function(){if(Blockly.Msg.TEXT_APPEND_TOOLTIP)return Blockly.Msg.TEXT_APPEND_TOOLTIP.replace("%1",thisBlock.getFieldValue("VAR"));return""})};
Blockly.Constants.Text.TEXT_INDEXOF_TOOLTIP_EXTENSION=function(){var thisBlock=this;this.setTooltip(function(){return Blockly.Msg.TEXT_INDEXOF_TOOLTIP.replace("%1",thisBlock.workspace.options.oneBasedIndex?"0":"-1")})};
Blockly.Constants.Text.TEXT_CHARAT_MUTATOR_MIXIN={mutationToDom:function(){var container=document.createElement("mutation");container.setAttribute("at",!!this.isAt_);return container},domToMutation:function(xmlElement){var isAt=xmlElement.getAttribute("at")!="false";this.updateAt_(isAt)},updateAt_:function(isAt){this.removeInput("AT",true);this.removeInput("ORDINAL",true);if(isAt){this.appendValueInput("AT").setCheck("Number");if(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)}if(Blockly.Msg.TEXT_CHARAT_TAIL){this.removeInput("TAIL",
true);this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_CHARAT_TAIL)}this.isAt_=isAt}};
Blockly.Constants.Text.TEXT_CHARAT_EXTENSION=function(){var dropdown=this.getField("WHERE");dropdown.setValidator(function(value){var newAt=value=="FROM_START"||value=="FROM_END";if(newAt!=this.isAt_){var block=this.sourceBlock_;block.updateAt_(newAt);block.setFieldValue(value,"WHERE");return null}return undefined});this.updateAt_(true);var thisBlock=this;this.setTooltip(function(){var where=thisBlock.getFieldValue("WHERE");var tooltip=Blockly.Msg.TEXT_CHARAT_TOOLTIP;if(where=="FROM_START"||where==
"FROM_END"){var msg=where=="FROM_START"?Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP:Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP;if(msg)tooltip+=" "+msg.replace("%1",thisBlock.workspace.options.oneBasedIndex?"#1":"#0")}return tooltip})};Blockly.Extensions.register("text_indexOf_tooltip",Blockly.Constants.Text.TEXT_INDEXOF_TOOLTIP_EXTENSION);Blockly.Extensions.register("text_quotes",Blockly.Constants.Text.TEXT_QUOTES_EXTENSION);Blockly.Extensions.register("text_append_tooltip",Blockly.Constants.Text.TEXT_APPEND_TOOLTIP_EXTENSION);
Blockly.Extensions.registerMutator("text_join_mutator",Blockly.Constants.Text.TEXT_JOIN_MUTATOR_MIXIN,Blockly.Constants.Text.TEXT_JOIN_EXTENSION);Blockly.Extensions.registerMutator("text_charAt_mutator",Blockly.Constants.Text.TEXT_CHARAT_MUTATOR_MIXIN,Blockly.Constants.Text.TEXT_CHARAT_EXTENSION);Blockly.Blocks.variables={};Blockly.Constants.Variables={};Blockly.Constants.Variables.HUE=330;Blockly.Blocks.variables.HUE=Blockly.Constants.Variables.HUE;
Blockly.defineBlocksWithJsonArray([{"type":"variables_get","message0":"%1","args0":[{"type":"field_variable","name":"VAR","variable":"%{BKY_VARIABLES_DEFAULT_NAME}"}],"output":null,"colour":"%{BKY_VARIABLES_HUE}","helpUrl":"%{BKY_VARIABLES_GET_HELPURL}","tooltip":"%{BKY_VARIABLES_GET_TOOLTIP}","extensions":["contextMenu_variableSetterGetter"]},{"type":"variables_set","message0":"%{BKY_VARIABLES_SET}","args0":[{"type":"field_variable","name":"VAR","variable":"%{BKY_VARIABLES_DEFAULT_NAME}"},{"type":"input_value",
"name":"VALUE"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_VARIABLES_HUE}","tooltip":"%{BKY_VARIABLES_SET_TOOLTIP}","helpUrl":"%{BKY_VARIABLES_SET_HELPURL}","extensions":["contextMenu_variableSetterGetter"]}]);
Blockly.Constants.Variables.CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN={customContextMenu:function(options){if(this.isInFlyout)return;if(this.type=="variables_get"){var opposite_type="variables_set";var contextMenuMsg=Blockly.Msg.VARIABLES_GET_CREATE_SET}else{var opposite_type="variables_get";var contextMenuMsg=Blockly.Msg.VARIABLES_SET_CREATE_GET}var option={enabled:this.workspace.remainingCapacity()>0};var name=this.getFieldValue("VAR");option.text=contextMenuMsg.replace("%1",name);var xmlField=
goog.dom.createDom("field",null,name);xmlField.setAttribute("name","VAR");var xmlBlock=goog.dom.createDom("block",null,xmlField);xmlBlock.setAttribute("type",opposite_type);option.callback=Blockly.ContextMenu.callbackFactory(this,xmlBlock);options.push(option)}};Blockly.Extensions.registerMixin("contextMenu_variableSetterGetter",Blockly.Constants.Variables.CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN);/*
Visual Blocks Editor
Copyright 2017 Google Inc.
https://developers.google.com/blockly/
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
Blockly.Constants.VariablesDynamic={};Blockly.Constants.VariablesDynamic.HUE=310;
Blockly.defineBlocksWithJsonArray([{"type":"variables_get_dynamic","message0":"%1","args0":[{"type":"field_variable","name":"VAR","variable":"%{BKY_VARIABLES_DEFAULT_NAME}"}],"output":null,"colour":"%{BKY_VARIABLES_DYNAMIC_HUE}","helpUrl":"%{BKY_VARIABLES_GET_HELPURL}","tooltip":"%{BKY_VARIABLES_GET_TOOLTIP}","extensions":["contextMenu_variableDynamicSetterGetter"]},{"type":"variables_set_dynamic","message0":"%{BKY_VARIABLES_SET}","args0":[{"type":"field_variable","name":"VAR","variable":"%{BKY_VARIABLES_DEFAULT_NAME}"},
{"type":"input_value","name":"VALUE"}],"previousStatement":null,"nextStatement":null,"colour":"%{BKY_VARIABLES_DYNAMIC_HUE}","tooltip":"%{BKY_VARIABLES_SET_TOOLTIP}","helpUrl":"%{BKY_VARIABLES_SET_HELPURL}","extensions":["contextMenu_variableDynamicSetterGetter"]}]);
Blockly.Constants.VariablesDynamic.CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN={customContextMenu:function(options){if(this.isInFlyout)return;var opposite_type;var contextMenuMsg;if(this.type=="variables_get_dynamic"){opposite_type="variables_set_dynamic";contextMenuMsg=Blockly.Msg.VARIABLES_GET_CREATE_SET}else{opposite_type="variables_get_dynamic";contextMenuMsg=Blockly.Msg.VARIABLES_SET_CREATE_GET}var option={enabled:this.workspace.remainingCapacity()>0};var name=this.getFieldValue("VAR");
option.text=contextMenuMsg.replace("%1",name);var xmlField=goog.dom.createDom("field",null,name);xmlField.setAttribute("name","VAR");var variableModel=this.workspace.getVariable(name);xmlField.setAttribute("variabletype",variableModel.type);var xmlBlock=goog.dom.createDom("block",null,xmlField);xmlBlock.setAttribute("type",opposite_type);option.callback=Blockly.ContextMenu.callbackFactory(this,xmlBlock);options.push(option)},onchange:function(){var id=this.getFieldValue("VAR");var variableModel=this.workspace.getVariableById(id);
if(this.type=="variables_get_dynamic")this.outputConnection.setCheck(variableModel.type);else this.getInput("VALUE").connection.setCheck(variableModel.type)}};Blockly.Extensions.registerMixin("contextMenu_variableDynamicSetterGetter",Blockly.Constants.VariablesDynamic.CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN);