2021-01-16 14:07:51 +00:00
// Do not edit this file; automatically generated by gulp.
/* eslint-disable */
; ( function ( root , factory ) {
if ( typeof define === 'function' && define . amd ) { // AMD
define ( [ './blockly_compressed.js' ] , factory ) ;
} else if ( typeof exports === 'object' ) { // Node.js
module . exports = factory ( require ( './blockly_compressed.js' ) ) ;
} else { // Browser
root . Blockly . Blocks = factory ( root . Blockly ) ;
}
} ( this , function ( Blockly ) {
'use strict' ; Blockly . Blocks . colour = { } ; Blockly . Constants = { } ; Blockly . Constants . Colour = { } ; Blockly . Constants . Colour . HUE = 20 ;
Blockly . defineBlocksWithJsonArray ( [ { type : "colour_picker" , message0 : "%1" , args0 : [ { type : "field_colour" , name : "COLOUR" , colour : "#ff0000" } ] , output : "Colour" , helpUrl : "%{BKY_COLOUR_PICKER_HELPURL}" , style : "colour_blocks" , tooltip : "%{BKY_COLOUR_PICKER_TOOLTIP}" , extensions : [ "parent_tooltip_when_inline" ] } , { type : "colour_random" , message0 : "%{BKY_COLOUR_RANDOM_TITLE}" , output : "Colour" , helpUrl : "%{BKY_COLOUR_RANDOM_HELPURL}" , style : "colour_blocks" , 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" , helpUrl : "%{BKY_COLOUR_RGB_HELPURL}" , style : "colour_blocks" , 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" ,
2021-09-18 14:29:06 +00:00
align : "RIGHT" } , { type : "input_value" , name : "COLOUR2" , check : "Colour" , align : "RIGHT" } , { type : "input_value" , name : "RATIO" , check : "Number" , align : "RIGHT" } ] , output : "Colour" , helpUrl : "%{BKY_COLOUR_BLEND_HELPURL}" , style : "colour_blocks" , tooltip : "%{BKY_COLOUR_BLEND_TOOLTIP}" } ] ) ; Blockly . Constants . Lists = { } ; Blockly . Constants . Lists . HUE = 260 ;
2021-01-16 14:07:51 +00:00
Blockly . defineBlocksWithJsonArray ( [ { type : "lists_create_empty" , message0 : "%{BKY_LISTS_CREATE_EMPTY_TITLE}" , output : "Array" , style : "list_blocks" , 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" , style : "list_blocks" , 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 : ! 0 , style : "list_blocks" , 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" , style : "list_blocks" , 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" , style : "list_blocks" , 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 . setStyle ( "list_blocks" ) ; this . itemCount _ = 3 ; this . updateShape _ ( ) ; this . setOutput ( ! 0 , "Array" ) ; this . setMutator ( new Blockly . Mutator ( [ "lists_create_with_item" ] ) ) ; this . setTooltip ( Blockly . Msg . LISTS _CREATE _WITH _TOOLTIP ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "items" , this . itemCount _ ) ; return a } , domToMutation : function ( a ) { this . itemCount _ = parseInt ( a . getAttribute ( "items" ) ,
10 ) ; this . updateShape _ ( ) } , decompose : function ( a ) { var b = a . newBlock ( "lists_create_with_container" ) ; b . initSvg ( ) ; for ( var c = b . getInput ( "STACK" ) . connection , d = 0 ; d < this . itemCount _ ; d ++ ) { var e = a . newBlock ( "lists_create_with_item" ) ; e . initSvg ( ) ; c . connect ( e . previousConnection ) ; c = e . nextConnection } return b } , compose : function ( a ) { var b = a . getInputTargetBlock ( "STACK" ) ; for ( a = [ ] ; b && ! b . isInsertionMarker ( ) ; ) a . push ( b . valueConnection _ ) , b = b . nextConnection && b . nextConnection . targetBlock ( ) ; for ( b = 0 ; b < this . itemCount _ ; b ++ ) { var c = this . getInput ( "ADD" +
b ) . connection . targetConnection ; c && - 1 == a . indexOf ( c ) && c . disconnect ( ) } this . itemCount _ = a . length ; this . updateShape _ ( ) ; for ( b = 0 ; b < this . itemCount _ ; b ++ ) Blockly . Mutator . reconnect ( a [ b ] , this , "ADD" + b ) } , saveConnections : function ( a ) { a = a . getInputTargetBlock ( "STACK" ) ; for ( var b = 0 ; a ; ) { var c = this . getInput ( "ADD" + b ) ; a . valueConnection _ = c && c . connection . targetConnection ; b ++ ; a = a . nextConnection && a . nextConnection . targetBlock ( ) } } , updateShape _ : function ( ) { this . itemCount _ && this . getInput ( "EMPTY" ) ? this . removeInput ( "EMPTY" ) : this . itemCount _ ||
this . getInput ( "EMPTY" ) || this . appendDummyInput ( "EMPTY" ) . appendField ( Blockly . Msg . LISTS _CREATE _EMPTY _TITLE ) ; for ( var a = 0 ; a < this . itemCount _ ; a ++ ) if ( ! this . getInput ( "ADD" + a ) ) { var b = this . appendValueInput ( "ADD" + a ) . setAlign ( Blockly . ALIGN _RIGHT ) ; 0 == a && b . appendField ( Blockly . Msg . LISTS _CREATE _WITH _INPUT _WITH ) } for ( ; this . getInput ( "ADD" + a ) ; ) this . removeInput ( "ADD" + a ) , a ++ } } ;
Blockly . Blocks . lists _create _with _container = { init : function ( ) { this . setStyle ( "list_blocks" ) ; 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 = ! 1 } } ;
Blockly . Blocks . lists _create _with _item = { init : function ( ) { this . setStyle ( "list_blocks" ) ; this . appendDummyInput ( ) . appendField ( Blockly . Msg . LISTS _CREATE _WITH _ITEM _TITLE ) ; this . setPreviousStatement ( ! 0 ) ; this . setNextStatement ( ! 0 ) ; this . setTooltip ( Blockly . Msg . LISTS _CREATE _WITH _ITEM _TOOLTIP ) ; this . contextMenu = ! 1 } } ;
Blockly . Blocks . lists _indexOf = { init : function ( ) { var a = [ [ Blockly . Msg . LISTS _INDEX _OF _FIRST , "FIRST" ] , [ Blockly . Msg . LISTS _INDEX _OF _LAST , "LAST" ] ] ; this . setHelpUrl ( Blockly . Msg . LISTS _INDEX _OF _HELPURL ) ; this . setStyle ( "list_blocks" ) ; this . setOutput ( ! 0 , "Number" ) ; this . appendValueInput ( "VALUE" ) . setCheck ( "Array" ) . appendField ( Blockly . Msg . LISTS _INDEX _OF _INPUT _IN _LIST ) ; this . appendValueInput ( "FIND" ) . appendField ( new Blockly . FieldDropdown ( a ) , "END" ) ; this . setInputsInline ( ! 0 ) ; var b = this ; this . setTooltip ( function ( ) { return Blockly . Msg . LISTS _INDEX _OF _TOOLTIP . replace ( "%1" ,
b . workspace . options . oneBasedIndex ? "0" : "-1" ) } ) } } ;
Blockly . Blocks . lists _getIndex = { init : function ( ) { var a = [ [ 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 . setStyle ( "list_blocks" ) ;
a = new Blockly . FieldDropdown ( a , function ( c ) { c = "REMOVE" == c ; this . getSourceBlock ( ) . updateStatement _ ( c ) } ) ; this . appendValueInput ( "VALUE" ) . setCheck ( "Array" ) . appendField ( Blockly . Msg . LISTS _GET _INDEX _INPUT _IN _LIST ) ; this . appendDummyInput ( ) . appendField ( a , "MODE" ) . appendField ( "" , "SPACE" ) ; this . appendDummyInput ( "AT" ) ; Blockly . Msg . LISTS _GET _INDEX _TAIL && this . appendDummyInput ( "TAIL" ) . appendField ( Blockly . Msg . LISTS _GET _INDEX _TAIL ) ; this . setInputsInline ( ! 0 ) ; this . setOutput ( ! 0 ) ; this . updateAt _ ( ! 0 ) ; var b = this ; this . setTooltip ( function ( ) { var c =
b . getFieldValue ( "MODE" ) , d = b . getFieldValue ( "WHERE" ) , e = "" ; switch ( c + " " + d ) { case "GET FROM_START" : case "GET FROM_END" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _GET _FROM ; break ; case "GET FIRST" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _GET _FIRST ; break ; case "GET LAST" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _GET _LAST ; break ; case "GET RANDOM" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _GET _RANDOM ; break ; case "GET_REMOVE FROM_START" : case "GET_REMOVE FROM_END" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _GET _REMOVE _FROM ; break ; case "GET_REMOVE FIRST" : e =
Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _GET _REMOVE _FIRST ; break ; case "GET_REMOVE LAST" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _GET _REMOVE _LAST ; break ; case "GET_REMOVE RANDOM" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _GET _REMOVE _RANDOM ; break ; case "REMOVE FROM_START" : case "REMOVE FROM_END" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _REMOVE _FROM ; break ; case "REMOVE FIRST" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _REMOVE _FIRST ; break ; case "REMOVE LAST" : e = Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _REMOVE _LAST ; break ; case "REMOVE RANDOM" : e =
Blockly . Msg . LISTS _GET _INDEX _TOOLTIP _REMOVE _RANDOM } if ( "FROM_START" == d || "FROM_END" == d ) e += " " + ( "FROM_START" == d ? Blockly . Msg . LISTS _INDEX _FROM _START _TOOLTIP : Blockly . Msg . LISTS _INDEX _FROM _END _TOOLTIP ) . replace ( "%1" , b . workspace . options . oneBasedIndex ? "#1" : "#0" ) ; return e } ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "statement" , ! this . outputConnection ) ; var b = this . getInput ( "AT" ) . type == Blockly . INPUT _VALUE ; a . setAttribute ( "at" , b ) ; return a } , domToMutation : function ( a ) { var b =
"true" == a . getAttribute ( "statement" ) ; this . updateStatement _ ( b ) ; a = "false" != a . getAttribute ( "at" ) ; this . updateAt _ ( a ) } , updateStatement _ : function ( a ) { a != ! this . outputConnection && ( this . unplug ( ! 0 , ! 0 ) , a ? ( this . setOutput ( ! 1 ) , this . setPreviousStatement ( ! 0 ) , this . setNextStatement ( ! 0 ) ) : ( this . setPreviousStatement ( ! 1 ) , this . setNextStatement ( ! 1 ) , this . setOutput ( ! 0 ) ) ) } , updateAt _ : function ( a ) { this . removeInput ( "AT" ) ; this . removeInput ( "ORDINAL" , ! 0 ) ; a ? ( this . appendValueInput ( "AT" ) . setCheck ( "Number" ) , Blockly . Msg . ORDINAL _NUMBER _SUFFIX &&
this . appendDummyInput ( "ORDINAL" ) . appendField ( Blockly . Msg . ORDINAL _NUMBER _SUFFIX ) ) : this . appendDummyInput ( "AT" ) ; var b = new Blockly . FieldDropdown ( this . WHERE _OPTIONS , function ( c ) { var d = "FROM_START" == c || "FROM_END" == c ; if ( d != a ) { var e = this . getSourceBlock ( ) ; e . updateAt _ ( d ) ; e . setFieldValue ( c , "WHERE" ) ; return null } } ) ; this . getInput ( "AT" ) . appendField ( b , "WHERE" ) ; Blockly . Msg . LISTS _GET _INDEX _TAIL && this . moveInputBefore ( "TAIL" , null ) } } ;
Blockly . Blocks . lists _setIndex = { init : function ( ) { var a = [ [ 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 . setStyle ( "list_blocks" ) ; this . appendValueInput ( "LIST" ) . setCheck ( "Array" ) . appendField ( Blockly . Msg . LISTS _SET _INDEX _INPUT _IN _LIST ) ;
this . appendDummyInput ( ) . appendField ( new Blockly . FieldDropdown ( a ) , "MODE" ) . appendField ( "" , "SPACE" ) ; this . appendDummyInput ( "AT" ) ; this . appendValueInput ( "TO" ) . appendField ( Blockly . Msg . LISTS _SET _INDEX _INPUT _TO ) ; this . setInputsInline ( ! 0 ) ; this . setPreviousStatement ( ! 0 ) ; this . setNextStatement ( ! 0 ) ; this . setTooltip ( Blockly . Msg . LISTS _SET _INDEX _TOOLTIP ) ; this . updateAt _ ( ! 0 ) ; var b = this ; this . setTooltip ( function ( ) { var c = b . getFieldValue ( "MODE" ) , d = b . getFieldValue ( "WHERE" ) , e = "" ; switch ( c + " " + d ) { case "SET FROM_START" : case "SET FROM_END" : e =
Blockly . Msg . LISTS _SET _INDEX _TOOLTIP _SET _FROM ; break ; case "SET FIRST" : e = Blockly . Msg . LISTS _SET _INDEX _TOOLTIP _SET _FIRST ; break ; case "SET LAST" : e = Blockly . Msg . LISTS _SET _INDEX _TOOLTIP _SET _LAST ; break ; case "SET RANDOM" : e = Blockly . Msg . LISTS _SET _INDEX _TOOLTIP _SET _RANDOM ; break ; case "INSERT FROM_START" : case "INSERT FROM_END" : e = Blockly . Msg . LISTS _SET _INDEX _TOOLTIP _INSERT _FROM ; break ; case "INSERT FIRST" : e = Blockly . Msg . LISTS _SET _INDEX _TOOLTIP _INSERT _FIRST ; break ; case "INSERT LAST" : e = Blockly . Msg . LISTS _SET _INDEX _TOOLTIP _INSERT _LAST ;
break ; case "INSERT RANDOM" : e = Blockly . Msg . LISTS _SET _INDEX _TOOLTIP _INSERT _RANDOM } if ( "FROM_START" == d || "FROM_END" == d ) e += " " + Blockly . Msg . LISTS _INDEX _FROM _START _TOOLTIP . replace ( "%1" , b . workspace . options . oneBasedIndex ? "#1" : "#0" ) ; return e } ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) , b = this . getInput ( "AT" ) . type == Blockly . INPUT _VALUE ; a . setAttribute ( "at" , b ) ; return a } , domToMutation : function ( a ) { a = "false" != a . getAttribute ( "at" ) ; this . updateAt _ ( a ) } , updateAt _ : function ( a ) { this . removeInput ( "AT" ) ;
this . removeInput ( "ORDINAL" , ! 0 ) ; a ? ( this . appendValueInput ( "AT" ) . setCheck ( "Number" ) , Blockly . Msg . ORDINAL _NUMBER _SUFFIX && this . appendDummyInput ( "ORDINAL" ) . appendField ( Blockly . Msg . ORDINAL _NUMBER _SUFFIX ) ) : this . appendDummyInput ( "AT" ) ; var b = new Blockly . FieldDropdown ( this . WHERE _OPTIONS , function ( c ) { var d = "FROM_START" == c || "FROM_END" == c ; if ( d != a ) { var e = this . getSourceBlock ( ) ; e . updateAt _ ( d ) ; e . setFieldValue ( c , "WHERE" ) ; return null } } ) ; this . moveInputBefore ( "AT" , "TO" ) ; this . getInput ( "ORDINAL" ) && this . moveInputBefore ( "ORDINAL" ,
"TO" ) ; this . getInput ( "AT" ) . appendField ( b , "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 . setStyle ( "list_blocks" ) ;
this . appendValueInput ( "LIST" ) . setCheck ( "Array" ) . appendField ( Blockly . Msg . LISTS _GET _SUBLIST _INPUT _IN _LIST ) ; this . appendDummyInput ( "AT1" ) ; this . appendDummyInput ( "AT2" ) ; Blockly . Msg . LISTS _GET _SUBLIST _TAIL && this . appendDummyInput ( "TAIL" ) . appendField ( Blockly . Msg . LISTS _GET _SUBLIST _TAIL ) ; this . setInputsInline ( ! 0 ) ; this . setOutput ( ! 0 , "Array" ) ; this . updateAt _ ( 1 , ! 0 ) ; this . updateAt _ ( 2 , ! 0 ) ; this . setTooltip ( Blockly . Msg . LISTS _GET _SUBLIST _TOOLTIP ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ,
b = this . getInput ( "AT1" ) . type == Blockly . INPUT _VALUE ; a . setAttribute ( "at1" , b ) ; b = this . getInput ( "AT2" ) . type == Blockly . INPUT _VALUE ; a . setAttribute ( "at2" , b ) ; return a } , domToMutation : function ( a ) { var b = "true" == a . getAttribute ( "at1" ) ; a = "true" == a . getAttribute ( "at2" ) ; this . updateAt _ ( 1 , b ) ; this . updateAt _ ( 2 , a ) } , updateAt _ : function ( a , b ) { this . removeInput ( "AT" + a ) ; this . removeInput ( "ORDINAL" + a , ! 0 ) ; b ? ( this . appendValueInput ( "AT" + a ) . setCheck ( "Number" ) , Blockly . Msg . ORDINAL _NUMBER _SUFFIX && this . appendDummyInput ( "ORDINAL" + a ) . appendField ( Blockly . Msg . ORDINAL _NUMBER _SUFFIX ) ) :
this . appendDummyInput ( "AT" + a ) ; var c = new Blockly . FieldDropdown ( this [ "WHERE_OPTIONS_" + a ] , function ( d ) { var e = "FROM_START" == d || "FROM_END" == d ; if ( e != b ) { var f = this . getSourceBlock ( ) ; f . updateAt _ ( a , e ) ; f . setFieldValue ( d , "WHERE" + a ) ; return null } } ) ; this . getInput ( "AT" + a ) . appendField ( c , "WHERE" + a ) ; 1 == a && ( this . moveInputBefore ( "AT1" , "AT2" ) , this . getInput ( "ORDINAL1" ) && this . moveInputBefore ( "ORDINAL1" , "AT2" ) ) ; 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" } ] , o utput : "Array" , style : "list_blocks" ,
tooltip : Blockly . Msg . LISTS _SORT _TOOLTIP , helpUrl : Blockly . Msg . LISTS _SORT _HELPURL } ) } } ;
Blockly . Blocks . lists _split = { init : function ( ) { var a = this , b = new Blockly . FieldDropdown ( [ [ Blockly . Msg . LISTS _SPLIT _LIST _FROM _TEXT , "SPLIT" ] , [ Blockly . Msg . LISTS _SPLIT _TEXT _FROM _LIST , "JOIN" ] ] , function ( c ) { a . updateType _ ( c ) } ) ; this . setHelpUrl ( Blockly . Msg . LISTS _SPLIT _HELPURL ) ; this . setStyle ( "list_blocks" ) ; this . appendValueInput ( "INPUT" ) . setCheck ( "String" ) . appendField ( b , "MODE" ) ; this . appendValueInput ( "DELIM" ) . setCheck ( "String" ) . appendField ( Blockly . Msg . LISTS _SPLIT _WITH _DELIMITER ) ; this . setInputsInline ( ! 0 ) ; this . setOutput ( ! 0 ,
"Array" ) ; this . setTooltip ( function ( ) { var c = a . getFieldValue ( "MODE" ) ; if ( "SPLIT" == c ) return Blockly . Msg . LISTS _SPLIT _TOOLTIP _SPLIT ; if ( "JOIN" == c ) return Blockly . Msg . LISTS _SPLIT _TOOLTIP _JOIN ; throw Error ( "Unknown mode: " + c ) ; } ) } , updateType _ : function ( a ) { if ( this . getFieldValue ( "MODE" ) != a ) { var b = this . getInput ( "INPUT" ) . connection ; b . setShadowDom ( null ) ; var c = b . targetBlock ( ) ; c && ( b . disconnect ( ) , c . isShadow ( ) ? c . dispose ( ) : this . bumpNeighbours ( ) ) } "SPLIT" == a ? ( this . outputConnection . setCheck ( "Array" ) , this . getInput ( "INPUT" ) . setCheck ( "String" ) ) :
( this . outputConnection . setCheck ( "String" ) , this . getInput ( "INPUT" ) . setCheck ( "Array" ) ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "mode" , this . getFieldValue ( "MODE" ) ) ; return a } , domToMutation : function ( a ) { this . updateType _ ( a . getAttribute ( "mode" ) ) } } ; Blockly . Blocks . logic = { } ; Blockly . Constants . Logic = { } ; Blockly . Constants . Logic . HUE = 210 ;
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" , style : "logic_blocks" , 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 , style : "logic_blocks" , 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 ,
style : "logic_blocks" , 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 : [ [ "=" , "EQ" ] , [ "\u2260" , "NEQ" ] , [ "\u200f<" , "LT" ] , [ "\u200f\u2264" , "LTE" ] , [ "\u200f>" , "GT" ] , [ "\u200f\u2265" , "GTE" ] ] } , { type : "input_value" , name : "B" } ] , inputsInline : ! 0 , output : "Boolean" , style : "logic_blocks" , 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 : ! 0 , output : "Boolean" , style : "logic_blocks" , 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" , style : "logic_blocks" , tooltip : "%{BKY_LOGIC_NEGATE_TOOLTIP}" , helpUrl : "%{BKY_LOGIC_NEGATE_HELPURL}" } , { type : "logic_null" , message0 : "%{BKY_LOGIC_NULL}" , output : null , style : "logic_blocks" , 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 , style : "logic_blocks" , 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 : ! 1 , style : "logic_blocks" , tooltip : "%{BKY_CONTROLS_IF_IF_TOOLTIP}" } , { type : "controls_if_elseif" , message0 : "%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}" , previousStatement : null , nextStatement : null , enableContextMenu : ! 1 , style : "logic_blocks" , tooltip : "%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}" } , { type : "controls_if_else" , message0 : "%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}" , previousStatement : null ,
enableContextMenu : ! 1 , style : "logic_blocks" , 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 , suppressPrefixSuffix : ! 0 , mutationToDom : function ( ) { if ( ! this . elseifCount _ && ! this . elseCount _ ) return null ; var a = Blockly . utils . xml . createElement ( "mutation" ) ; this . elseifCount _ && a . setAttribute ( "elseif" , this . elseifCount _ ) ; this . elseCount _ && a . setAttribute ( "else" , 1 ) ; return a } , domToMutation : function ( a ) { this . elseifCount _ = parseInt ( a . getAttribute ( "elseif" ) , 10 ) || 0 ; this . elseCount _ = parseInt ( a . getAttribute ( "else" ) , 10 ) || 0 ; this . rebuildShape _ ( ) } ,
decompose : function ( a ) { var b = a . newBlock ( "controls_if_if" ) ; b . initSvg ( ) ; for ( var c = b . nextConnection , d = 1 ; d <= this . elseifCount _ ; d ++ ) { var e = a . newBlock ( "controls_if_elseif" ) ; e . initSvg ( ) ; c . connect ( e . previousConnection ) ; c = e . nextConnection } this . elseCount _ && ( a = a . newBlock ( "controls_if_else" ) , a . initSvg ( ) , c . connect ( a . previousConnection ) ) ; return b } , compose : function ( a ) { a = a . nextConnection . targetBlock ( ) ; this . elseCount _ = this . elseifCount _ = 0 ; for ( var b = [ null ] , c = [ null ] , d = null ; a && ! a . isInsertionMarker ( ) ; ) { switch ( a . type ) { case "controls_if_elseif" : this . elseifCount _ ++ ;
b . push ( a . valueConnection _ ) ; c . push ( a . statementConnection _ ) ; break ; case "controls_if_else" : this . elseCount _ ++ ; d = a . statementConnection _ ; break ; default : throw TypeError ( "Unknown block type: " + a . type ) ; } a = a . nextConnection && a . nextConnection . targetBlock ( ) } this . updateShape _ ( ) ; this . reconnectChildBlocks _ ( b , c , d ) } , saveConnections : function ( a ) { a = a . nextConnection . targetBlock ( ) ; for ( var b = 1 ; a ; ) { switch ( a . type ) { case "controls_if_elseif" : var c = this . getInput ( "IF" + b ) , d = this . getInput ( "DO" + b ) ; a . valueConnection _ = c && c . connection . targetConnection ;
a . statementConnection _ = d && d . connection . targetConnection ; b ++ ; break ; case "controls_if_else" : d = this . getInput ( "ELSE" ) ; a . statementConnection _ = d && d . connection . targetConnection ; break ; default : throw TypeError ( "Unknown block type: " + a . type ) ; } a = a . nextConnection && a . nextConnection . targetBlock ( ) } } , rebuildShape _ : function ( ) { var a = [ null ] , b = [ null ] , c = null ; this . getInput ( "ELSE" ) && ( c = this . getInput ( "ELSE" ) . connection . targetConnection ) ; for ( var d = 1 ; this . getInput ( "IF" + d ) ; ) { var e = this . getInput ( "IF" + d ) , f = this . getInput ( "DO" +
d ) ; a . push ( e . connection . targetConnection ) ; b . push ( f . connection . targetConnection ) ; d ++ } this . updateShape _ ( ) ; this . reconnectChildBlocks _ ( a , b , c ) } , updateShape _ : function ( ) { this . getInput ( "ELSE" ) && this . removeInput ( "ELSE" ) ; for ( var a = 1 ; this . getInput ( "IF" + a ) ; ) this . removeInput ( "IF" + a ) , this . removeInput ( "DO" + a ) , a ++ ; for ( a = 1 ; a <= this . elseifCount _ ; a ++ ) this . appendValueInput ( "IF" + a ) . setCheck ( "Boolean" ) . appendField ( Blockly . Msg . CONTROLS _IF _MSG _ELSEIF ) , this . appendStatementInput ( "DO" + a ) . appendField ( Blockly . Msg . CONTROLS _IF _MSG _THEN ) ;
this . elseCount _ && this . appendStatementInput ( "ELSE" ) . appendField ( Blockly . Msg . CONTROLS _IF _MSG _ELSE ) } , reconnectChildBlocks _ : function ( a , b , c ) { for ( var d = 1 ; d <= this . elseifCount _ ; d ++ ) Blockly . Mutator . reconnect ( a [ d ] , this , "IF" + d ) , Blockly . Mutator . reconnect ( b [ d ] , this , "DO" + d ) ; Blockly . Mutator . reconnect ( c , this , "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 _ ) { if ( ! this . elseifCount _ && this . elseCount _ ) return Blockly . Msg . CONTROLS _IF _TOOLTIP _2 ; if ( this . elseifCount _ && ! this . elseCount _ ) return Blockly . Msg . CONTROLS _IF _TOOLTIP _3 ; if ( this . elseifCount _ && this . elseCount _ ) return Blockly . Msg . CONTROLS _IF _TOOLTIP _4 } else return Blockly . Msg . CONTROLS _IF _TOOLTIP _1 ; return "" } . bind ( this ) ) } ; Blockly . Extensions . register ( "controls_if_tooltip" , Blockly . Constants . Logic . CONTROLS _IF _TOOLTIP _EXTENSION ) ;
Blockly . Constants . Logic . LOGIC _COMPARE _ONCHANGE _MIXIN = { onchange : function ( a ) { this . prevBlocks _ || ( this . prevBlocks _ = [ null , null ] ) ; var b = this . getInputTargetBlock ( "A" ) , c = this . getInputTargetBlock ( "B" ) ; b && c && ! this . workspace . connectionChecker . doTypeChecks ( b . outputConnection , c . outputConnection ) && ( Blockly . Events . setGroup ( a . group ) , a = this . prevBlocks _ [ 0 ] , a !== b && ( b . unplug ( ) , ! a || a . isDisposed ( ) || a . isShadow ( ) || this . getInput ( "A" ) . connection . connect ( a . outputConnection ) ) , b = this . prevBlocks _ [ 1 ] , b !== c && ( c . unplug ( ) , ! b || b . isDisposed ( ) ||
b . isShadow ( ) || this . getInput ( "B" ) . connection . connect ( b . outputConnection ) ) , this . bumpNeighbours ( ) , Blockly . Events . setGroup ( ! 1 ) ) ; this . prevBlocks _ [ 0 ] = this . getInputTargetBlock ( "A" ) ; this . prevBlocks _ [ 1 ] = this . getInputTargetBlock ( "B" ) } } ; Blockly . Constants . Logic . LOGIC _COMPARE _EXTENSION = function ( ) { 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 ( a ) { var b = this . getInputTargetBlock ( "THEN" ) , c = this . getInputTargetBlock ( "ELSE" ) , d = this . outputConnection . targetConnection ; if ( ( b || c ) && d ) for ( var e = 0 ; 2 > e ; e ++ ) { var f = 1 == e ? b : c ; f && ! f . workspace . connectionChecker . doTypeChecks ( f . outputConnection , d ) && ( Blockly . Events . setGroup ( a . group ) , d === this . prevParentConnection _ ? ( this . unplug ( ) , d . getSourceBlock ( ) . bumpNeighbours ( ) ) : ( f . unplug ( ) , f . bumpNeighbours ( ) ) , Blockly . Events . setGroup ( ! 1 ) ) } this . prevParentConnection _ =
d } } ; Blockly . Extensions . registerMixin ( "logic_ternary" , Blockly . Constants . Logic . LOGIC _TERNARY _ONCHANGE _MIXIN ) ; Blockly . Blocks . loops = { } ; Blockly . Constants . Loops = { } ; Blockly . Constants . Loops . HUE = 120 ;
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 , style : "loop_blocks" , 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 , style : "loop_blocks" , 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 , style : "loop_blocks" , 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 : ! 0 , previousStatement : null , nextStatement : null , style : "loop_blocks" , 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 , style : "loop_blocks" , 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 , style : "loop_blocks" , 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 ( a ) { if ( ! this . isInFlyout ) { var b = this . getField ( "VAR" ) . getVariable ( ) , c = b . name ; if ( ! this . isCollapsed ( ) && null != c ) { var d = { enabled : ! 0 } ; d . text = Blockly . Msg . VARIABLES _SET _CREATE _GET . replace ( "%1" , c ) ; b = Blockly . Variables . generateVariableFieldDom ( b ) ; c = Blockly . utils . xml . createElement ( "block" ) ; c . setAttribute ( "type" , "variables_get" ) ; c . appendChild ( b ) ; d . callback = Blockly . ContextMenu . callbackFactory ( this , c ) ; a . push ( d ) } } } } ;
Blockly . Extensions . registerMixin ( "contextMenu_newGetVariableBlock" , Blockly . Constants . Loops . CUSTOM _CONTEXT _MENU _CREATE _VARIABLES _GET _MIXIN ) ; Blockly . Extensions . register ( "controls_for_tooltip" , Blockly . Extensions . buildTooltipWithFieldText ( "%{BKY_CONTROLS_FOR_TOOLTIP}" , "VAR" ) ) ; Blockly . Extensions . register ( "controls_forEach_tooltip" , Blockly . Extensions . buildTooltipWithFieldText ( "%{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" ] , suppressPrefixSuffix : ! 0 , getSurroundLoop : function ( a ) { do { if ( - 1 != Blockly . Constants . Loops . CONTROL _FLOW _IN _LOOP _CHECK _MIXIN . LOOP _TYPES . indexOf ( a . type ) ) return a ; a = a . getSurroundParent ( ) } while ( a ) ; return null } , onchange : function ( a ) { if ( this . workspace . isDragging && ! this . workspace . isDragging ( ) && a . type == Blockly . Events . BLOCK _MOVE ) { var b = Blockly . Constants . Loops . CONTROL _FLOW _IN _LOOP _CHECK _MIXIN . getSurroundLoop ( this ) ;
this . setWarningText ( b ? null : Blockly . Msg . CONTROLS _FLOW _STATEMENTS _WARNING ) ; if ( ! this . isInFlyout ) { var c = Blockly . Events . getGroup ( ) ; Blockly . Events . setGroup ( a . group ) ; this . setEnabled ( b ) ; Blockly . Events . setGroup ( c ) } } } } ; 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 . defineBlocksWithJsonArray ( [ { type : "math_number" , message0 : "%1" , args0 : [ { type : "field_number" , name : "NUM" , value : 0 } ] , output : "Number" , helpUrl : "%{BKY_MATH_NUMBER_HELPURL}" , style : "math_blocks" , 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 : ! 0 , output : "Number" , style : "math_blocks" , 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" , style : "math_blocks" , 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" , style : "math_blocks" ,
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" , style : "math_blocks" , 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 : ! 0 , output : "Boolean" , style : "math_blocks" , 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 , style : "variable_blocks" , 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" , style : "math_blocks" , 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" , style : "math_blocks" , 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 : ! 0 , output : "Number" , style : "math_blocks" , 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 : ! 0 , output : "Number" , style : "math_blocks" , 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 : ! 0 , output : "Number" , style : "math_blocks" , 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" , style : "math_blocks" , tooltip : "%{BKY_MATH_RANDOM_FLOAT_TOOLTIP}" , helpUrl : "%{BKY_MATH_RANDOM_FLOAT_HELPURL}" } , { type : "math_atan2" , message0 : "%{BKY_MATH_ATAN2_TITLE}" , args0 : [ { type : "input_value" , name : "X" , check : "Number" } , { type : "input_value" ,
name : "Y" , check : "Number" } ] , inputsInline : ! 0 , output : "Number" , style : "math_blocks" , tooltip : "%{BKY_MATH_ATAN2_TOOLTIP}" , helpUrl : "%{BKY_MATH_ATAN2_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 a = Blockly . utils . xml . createElement ( "mutation" ) , b = "DIVISIBLE_BY" == this . getFieldValue ( "PROPERTY" ) ; a . setAttribute ( "divisor_input" , b ) ; return a } , domToMutation : function ( a ) { a = "true" == a . getAttribute ( "divisor_input" ) ; this . updateShape _ ( a ) } , updateShape _ : function ( a ) { var b = this . getInput ( "DIVISOR" ) ; a ? b || this . appendValueInput ( "DIVISOR" ) . setCheck ( "Number" ) : b && this . removeInput ( "DIVISOR" ) } } ;
Blockly . Constants . Math . IS _DIVISIBLE _MUTATOR _EXTENSION = function ( ) { this . getField ( "PROPERTY" ) . setValidator ( function ( a ) { a = "DIVISIBLE_BY" == a ; this . getSourceBlock ( ) . updateShape _ ( a ) } ) } ; Blockly . Extensions . registerMutator ( "math_is_divisibleby_mutator" , Blockly . Constants . Math . IS _DIVISIBLEBY _MUTATOR _MIXIN , Blockly . Constants . Math . IS _DIVISIBLE _MUTATOR _EXTENSION ) ; Blockly . Extensions . register ( "math_change_tooltip" , Blockly . Extensions . buildTooltipWithFieldText ( "%{BKY_MATH_CHANGE_TOOLTIP}" , "VAR" ) ) ;
Blockly . Constants . Math . LIST _MODES _MUTATOR _MIXIN = { updateType _ : function ( a ) { "MODE" == a ? this . outputConnection . setCheck ( "Array" ) : this . outputConnection . setCheck ( "Number" ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "op" , this . getFieldValue ( "OP" ) ) ; return a } , domToMutation : function ( a ) { this . updateType _ ( a . getAttribute ( "op" ) ) } } ; Blockly . Constants . Math . LIST _MODES _MUTATOR _EXTENSION = function ( ) { this . getField ( "OP" ) . setValidator ( function ( a ) { this . updateType _ ( a ) } . bind ( this ) ) } ;
Blockly . Extensions . registerMutator ( "math_modes_of_list_mutator" , Blockly . Constants . Math . LIST _MODES _MUTATOR _MIXIN , Blockly . Constants . Math . LIST _MODES _MUTATOR _EXTENSION ) ; Blockly . Blocks . procedures = { } ;
Blockly . Blocks . procedures _defnoreturn = { init : function ( ) { var a = Blockly . Procedures . findLegalName ( "" , this ) ; a = new Blockly . FieldTextInput ( a , Blockly . Procedures . rename ) ; a . setSpellcheck ( ! 1 ) ; this . appendDummyInput ( ) . appendField ( Blockly . Msg . PROCEDURES _DEFNORETURN _TITLE ) . appendField ( a , "NAME" ) . appendField ( "" , "PARAMS" ) ; this . setMutator ( new Blockly . Mutator ( [ "procedures_mutatorarg" ] ) ) ; ( 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 . setStyle ( "procedure_blocks" ) ; this . setTooltip ( Blockly . Msg . PROCEDURES _DEFNORETURN _TOOLTIP ) ; this . setHelpUrl ( Blockly . Msg . PROCEDURES _DEFNORETURN _HELPURL ) ; this . arguments _ = [ ] ; this . argumentVarModels _ = [ ] ; this . setStatements _ ( ! 0 ) ; this . statementConnection _ = null } , setStatements _ : function ( a ) { this . hasStatements _ !== a && ( a ? ( this . appendStatementInput ( "STACK" ) . appendField ( Blockly . Msg . PROCEDURES _DEFNORETURN _DO ) , this . getInput ( "RETURN" ) && this . moveInputBefore ( "STACK" ,
"RETURN" ) ) : this . removeInput ( "STACK" , ! 0 ) , this . hasStatements _ = a ) } , updateParams _ : function ( ) { var a = "" ; this . arguments _ . length && ( a = Blockly . Msg . PROCEDURES _BEFORE _PARAMS + " " + this . arguments _ . join ( ", " ) ) ; Blockly . Events . disable ( ) ; try { this . setFieldValue ( a , "PARAMS" ) } finally { Blockly . Events . enable ( ) } } , mutationToDom : function ( a ) { var b = Blockly . utils . xml . createElement ( "mutation" ) ; a && b . setAttribute ( "name" , this . getFieldValue ( "NAME" ) ) ; for ( var c = 0 ; c < this . argumentVarModels _ . length ; c ++ ) { var d = Blockly . utils . xml . createElement ( "arg" ) ,
e = this . argumentVarModels _ [ c ] ; d . setAttribute ( "name" , e . name ) ; d . setAttribute ( "varid" , e . getId ( ) ) ; a && this . paramIds _ && d . setAttribute ( "paramId" , this . paramIds _ [ c ] ) ; b . appendChild ( d ) } this . hasStatements _ || b . setAttribute ( "statements" , "false" ) ; return b } , domToMutation : function ( a ) { this . arguments _ = [ ] ; this . argumentVarModels _ = [ ] ; for ( var b = 0 , c ; c = a . childNodes [ b ] ; b ++ ) if ( "arg" == c . nodeName . toLowerCase ( ) ) { var d = c . getAttribute ( "name" ) ; c = c . getAttribute ( "varid" ) || c . getAttribute ( "varId" ) ; this . arguments _ . push ( d ) ; c = Blockly . Variables . getOrCreateVariablePackage ( this . workspace ,
c , d , "" ) ; null != c ? this . argumentVarModels _ . push ( c ) : console . log ( "Failed to create a variable with name " + d + ", ignoring." ) } this . updateParams _ ( ) ; Blockly . Procedures . mutateCallers ( this ) ; this . setStatements _ ( "false" !== a . getAttribute ( "statements" ) ) } , decompose : function ( a ) { var b = Blockly . utils . xml . createElement ( "block" ) ; b . setAttribute ( "type" , "procedures_mutatorcontainer" ) ; var c = Blockly . utils . xml . createElement ( "statement" ) ; c . setAttribute ( "name" , "STACK" ) ; b . appendChild ( c ) ; for ( var d = 0 ; d < this . arguments _ . length ; d ++ ) { var e =
Blockly . utils . xml . createElement ( "block" ) ; e . setAttribute ( "type" , "procedures_mutatorarg" ) ; var f = Blockly . utils . xml . createElement ( "field" ) ; f . setAttribute ( "name" , "NAME" ) ; var g = Blockly . utils . xml . createTextNode ( this . arguments _ [ d ] ) ; f . appendChild ( g ) ; e . appendChild ( f ) ; f = Blockly . utils . xml . createElement ( "next" ) ; e . appendChild ( f ) ; c . appendChild ( e ) ; c = f } a = Blockly . Xml . domToBlock ( b , a ) ; "procedures_defreturn" == this . type ? a . setFieldValue ( this . hasStatements _ , "STATEMENTS" ) : a . removeInput ( "STATEMENT_INPUT" ) ; Blockly . Procedures . mutateCallers ( this ) ;
return a } , compose : function ( a ) { this . arguments _ = [ ] ; this . paramIds _ = [ ] ; this . argumentVarModels _ = [ ] ; for ( var b = a . getInputTargetBlock ( "STACK" ) ; b && ! b . isInsertionMarker ( ) ; ) { var c = b . getFieldValue ( "NAME" ) ; this . arguments _ . push ( c ) ; c = this . workspace . getVariable ( c , "" ) ; this . argumentVarModels _ . push ( c ) ; this . paramIds _ . push ( b . id ) ; b = b . nextConnection && b . nextConnection . targetBlock ( ) } this . updateParams _ ( ) ; Blockly . Procedures . mutateCallers ( this ) ; a = a . getFieldValue ( "STATEMENTS" ) ; if ( null !== a && ( a = "TRUE" == a , this . hasStatements _ != a ) ) if ( a ) this . setStatements _ ( ! 0 ) ,
Blockly . Mutator . reconnect ( this . statementConnection _ , this , "STACK" ) , this . statementConnection _ = null ; else { a = this . getInput ( "STACK" ) . connection ; if ( this . statementConnection _ = a . targetConnection ) a = a . targetBlock ( ) , a . unplug ( ) , a . bumpNeighbours ( ) ; this . setStatements _ ( ! 1 ) } } , getProcedureDef : function ( ) { return [ this . getFieldValue ( "NAME" ) , this . arguments _ , ! 1 ] } , getVars : function ( ) { return this . arguments _ } , getVarModels : function ( ) { return this . argumentVarModels _ } , renameVarById : function ( a , b ) { var c = this . workspace . getVariableById ( a ) ;
if ( "" == c . type ) { c = c . name ; b = this . workspace . getVariableById ( b ) ; for ( var d = ! 1 , e = 0 ; e < this . argumentVarModels _ . length ; e ++ ) this . argumentVarModels _ [ e ] . getId ( ) == a && ( this . arguments _ [ e ] = b . name , this . argumentVarModels _ [ e ] = b , d = ! 0 ) ; d && ( this . displayRenamedVar _ ( c , b . name ) , Blockly . Procedures . mutateCallers ( this ) ) } } , updateVarName : function ( a ) { for ( var b = a . name , c = ! 1 , d = 0 ; d < this . argumentVarModels _ . length ; d ++ ) if ( this . argumentVarModels _ [ d ] . getId ( ) == a . getId ( ) ) { var e = this . arguments _ [ d ] ; this . arguments _ [ d ] = b ; c = ! 0 } c && ( this . displayRenamedVar _ ( e ,
b ) , Blockly . Procedures . mutateCallers ( this ) ) } , displayRenamedVar _ : function ( a , b ) { this . updateParams _ ( ) ; if ( this . mutator && this . mutator . isVisible ( ) ) for ( var c = this . mutator . workspace _ . getAllBlocks ( ! 1 ) , d = 0 , e ; e = c [ d ] ; d ++ ) "procedures_mutatorarg" == e . type && Blockly . Names . equals ( a , e . getFieldValue ( "NAME" ) ) && e . setFieldValue ( b , "NAME" ) } , customContextMenu : function ( a ) { if ( ! this . isInFlyout ) { var b = { enabled : ! 0 } , c = this . getFieldValue ( "NAME" ) ; b . text = Blockly . Msg . PROCEDURES _CREATE _DO . replace ( "%1" , c ) ; var d = Blockly . utils . xml . createElement ( "mutation" ) ;
d . setAttribute ( "name" , c ) ; for ( c = 0 ; c < this . arguments _ . length ; c ++ ) { var e = Blockly . utils . xml . createElement ( "arg" ) ; e . setAttribute ( "name" , this . arguments _ [ c ] ) ; d . appendChild ( e ) } c = Blockly . utils . xml . createElement ( "block" ) ; c . setAttribute ( "type" , this . callType _ ) ; c . appendChild ( d ) ; b . callback = Blockly . ContextMenu . callbackFactory ( this , c ) ; a . push ( b ) ; if ( ! this . isCollapsed ( ) ) for ( c = 0 ; c < this . argumentVarModels _ . length ; c ++ ) b = { enabled : ! 0 } , d = this . argumentVarModels _ [ c ] , b . text = Blockly . Msg . VARIABLES _SET _CREATE _GET . replace ( "%1" , d . name ) ,
d = Blockly . Variables . generateVariableFieldDom ( d ) , e = Blockly . utils . xml . createElement ( "block" ) , e . setAttribute ( "type" , "variables_get" ) , e . appendChild ( d ) , b . callback = Blockly . ContextMenu . callbackFactory ( this , e ) , a . push ( b ) } } , callType _ : "procedures_callnoreturn" } ;
Blockly . Blocks . procedures _defreturn = { init : function ( ) { var a = Blockly . Procedures . findLegalName ( "" , this ) ; a = new Blockly . FieldTextInput ( a , Blockly . Procedures . rename ) ; a . setSpellcheck ( ! 1 ) ; this . appendDummyInput ( ) . appendField ( Blockly . Msg . PROCEDURES _DEFRETURN _TITLE ) . appendField ( a , "NAME" ) . appendField ( "" , "PARAMS" ) ; this . appendValueInput ( "RETURN" ) . setAlign ( Blockly . ALIGN _RIGHT ) . appendField ( Blockly . Msg . PROCEDURES _DEFRETURN _RETURN ) ; this . setMutator ( new Blockly . Mutator ( [ "procedures_mutatorarg" ] ) ) ; ( 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 . setStyle ( "procedure_blocks" ) ; this . setTooltip ( Blockly . Msg . PROCEDURES _DEFRETURN _TOOLTIP ) ; this . setHelpUrl ( Blockly . Msg . PROCEDURES _DEFRETURN _HELPURL ) ; this . arguments _ = [ ] ; this . argumentVarModels _ = [ ] ; this . setStatements _ ( ! 0 ) ; 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 _ , ! 0 ] } , 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 . setStyle ( "procedure_blocks" ) ; this . setTooltip ( Blockly . Msg . PROCEDURES _MUTATORCONTAINER _TOOLTIP ) ; this . contextMenu = ! 1 } } ;
Blockly . Blocks . procedures _mutatorarg = { init : function ( ) { var a = new Blockly . FieldTextInput ( Blockly . Procedures . DEFAULT _ARG , this . validator _ ) ; a . oldShowEditorFn _ = a . showEditor _ ; a . showEditor _ = function ( ) { this . createdVariables _ = [ ] ; this . oldShowEditorFn _ ( ) } ; this . appendDummyInput ( ) . appendField ( Blockly . Msg . PROCEDURES _MUTATORARG _TITLE ) . appendField ( a , "NAME" ) ; this . setPreviousStatement ( ! 0 ) ; this . setNextStatement ( ! 0 ) ; this . setStyle ( "procedure_blocks" ) ; this . setTooltip ( Blockly . Msg . PROCEDURES _MUTATORARG _TOOLTIP ) ; this . contextMenu =
! 1 ; a . onFinishEditing _ = this . deleteIntermediateVars _ ; a . createdVariables _ = [ ] ; a . onFinishEditing _ ( "x" ) } , validator _ : function ( a ) { var b = this . getSourceBlock ( ) , c = Blockly . Mutator . findParentWs ( b . workspace ) ; a = a . replace ( /[\s\xa0]+/g , " " ) . replace ( /^ | $/g , "" ) ; if ( ! a ) return null ; for ( var d = ( b . workspace . targetWorkspace || b . workspace ) . getAllBlocks ( ! 1 ) , e = a . toLowerCase ( ) , f = 0 ; f < d . length ; f ++ ) if ( d [ f ] . id != this . getSourceBlock ( ) . id ) { var g = d [ f ] . getFieldValue ( "NAME" ) ; if ( g && g . toLowerCase ( ) == e ) return null } if ( b . isInFlyout ) return a ;
( b = c . getVariable ( a , "" ) ) && b . name != a && c . renameVariableById ( b . getId ( ) , a ) ; b || ( b = c . createVariable ( a , "" ) ) && this . createdVariables _ && this . createdVariables _ . push ( b ) ; return a } , deleteIntermediateVars _ : function ( a ) { var b = Blockly . Mutator . findParentWs ( this . getSourceBlock ( ) . workspace ) ; if ( b ) for ( var c = 0 ; c < this . createdVariables _ . length ; c ++ ) { var d = this . createdVariables _ [ c ] ; d . name != a && b . deleteVariableById ( d . getId ( ) ) } } } ;
Blockly . Blocks . procedures _callnoreturn = { init : function ( ) { this . appendDummyInput ( "TOPROW" ) . appendField ( "" , "NAME" ) ; this . setPreviousStatement ( ! 0 ) ; this . setNextStatement ( ! 0 ) ; this . setStyle ( "procedure_blocks" ) ; this . setHelpUrl ( Blockly . Msg . PROCEDURES _CALLNORETURN _HELPURL ) ; this . arguments _ = [ ] ; this . argumentVarModels _ = [ ] ; this . quarkConnections _ = { } ; this . quarkIds _ = null ; this . previousEnabledState _ = ! 0 } , getProcedureCall : function ( ) { return this . getFieldValue ( "NAME" ) } , renameProcedure : function ( a , b ) { Blockly . Names . equals ( a ,
this . getProcedureCall ( ) ) && ( this . setFieldValue ( b , "NAME" ) , this . setTooltip ( ( this . outputConnection ? Blockly . Msg . PROCEDURES _CALLRETURN _TOOLTIP : Blockly . Msg . PROCEDURES _CALLNORETURN _TOOLTIP ) . replace ( "%1" , b ) ) ) } , setProcedureParameters _ : function ( a , b ) { var c = Blockly . Procedures . getDefinition ( this . getProcedureCall ( ) , this . workspace ) , d = c && c . mutator && c . mutator . isVisible ( ) ; d || ( this . quarkConnections _ = { } , this . quarkIds _ = null ) ; if ( b ) if ( a . join ( "\n" ) == this . arguments _ . join ( "\n" ) ) this . quarkIds _ = b ; else { if ( b . length != a . length ) throw RangeError ( "paramNames and paramIds must be the same length." ) ;
this . setCollapsed ( ! 1 ) ; this . quarkIds _ || ( this . quarkConnections _ = { } , this . quarkIds _ = [ ] ) ; c = this . rendered ; this . rendered = ! 1 ; for ( var e = 0 ; e < this . arguments _ . length ; e ++ ) { var f = this . getInput ( "ARG" + e ) ; f && ( f = f . connection . targetConnection , this . quarkConnections _ [ this . quarkIds _ [ e ] ] = f , d && f && - 1 == b . indexOf ( this . quarkIds _ [ e ] ) && ( f . disconnect ( ) , f . getSourceBlock ( ) . bumpNeighbours ( ) ) ) } this . arguments _ = [ ] . concat ( a ) ; this . argumentVarModels _ = [ ] ; for ( e = 0 ; e < this . arguments _ . length ; e ++ ) a = Blockly . Variables . getOrCreateVariablePackage ( this . workspace ,
null , this . arguments _ [ e ] , "" ) , this . argumentVarModels _ . push ( a ) ; this . updateShape _ ( ) ; if ( this . quarkIds _ = b ) for ( e = 0 ; e < this . arguments _ . length ; e ++ ) b = this . quarkIds _ [ e ] , b in this . quarkConnections _ && ( f = this . quarkConnections _ [ b ] , Blockly . Mutator . reconnect ( f , this , "ARG" + e ) || delete this . quarkConnections _ [ b ] ) ; ( this . rendered = c ) && this . render ( ) } } , updateShape _ : function ( ) { for ( var a = 0 ; a < this . arguments _ . length ; a ++ ) { var b = this . getField ( "ARGNAME" + a ) ; if ( b ) { Blockly . Events . disable ( ) ; try { b . setValue ( this . arguments _ [ a ] ) } finally { Blockly . Events . enable ( ) } } else b =
new Blockly . FieldLabel ( this . arguments _ [ a ] ) , this . appendValueInput ( "ARG" + a ) . setAlign ( Blockly . ALIGN _RIGHT ) . appendField ( b , "ARGNAME" + a ) . init ( ) } for ( ; this . getInput ( "ARG" + a ) ; ) this . removeInput ( "ARG" + a ) , a ++ ; if ( a = this . getInput ( "TOPROW" ) ) this . arguments _ . length ? this . getField ( "WITH" ) || ( a . appendField ( Blockly . Msg . PROCEDURES _CALL _BEFORE _PARAMS , "WITH" ) , a . init ( ) ) : this . getField ( "WITH" ) && a . removeField ( "WITH" ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "name" , this . getProcedureCall ( ) ) ;
for ( var b = 0 ; b < this . arguments _ . length ; b ++ ) { var c = Blockly . utils . xml . createElement ( "arg" ) ; c . setAttribute ( "name" , this . arguments _ [ b ] ) ; a . appendChild ( c ) } return a } , domToMutation : function ( a ) { var b = a . getAttribute ( "name" ) ; this . renameProcedure ( this . getProcedureCall ( ) , b ) ; b = [ ] ; for ( var c = [ ] , d = 0 , e ; e = a . childNodes [ d ] ; d ++ ) "arg" == e . nodeName . toLowerCase ( ) && ( b . push ( e . getAttribute ( "name" ) ) , c . push ( e . getAttribute ( "paramId" ) ) ) ; this . setProcedureParameters _ ( b , c ) } , getVars : function ( ) { return this . arguments _ } , getVarModels : function ( ) { return this . argumentVarModels _ } ,
onchange : function ( a ) { if ( this . workspace && ! this . workspace . isFlyout && a . recordUndo ) if ( a . type == Blockly . Events . BLOCK _CREATE && - 1 != a . ids . indexOf ( this . id ) ) { var b = this . getProcedureCall ( ) ; b = Blockly . Procedures . getDefinition ( b , this . workspace ) ; ! b || b . type == this . defType _ && JSON . stringify ( b . getVars ( ) ) == JSON . stringify ( this . arguments _ ) || ( b = null ) ; if ( ! b ) { Blockly . Events . setGroup ( a . group ) ; a = Blockly . utils . xml . createElement ( "xml" ) ; b = Blockly . utils . xml . createElement ( "block" ) ; b . setAttribute ( "type" , this . defType _ ) ; var c = this . getRelativeToSurfaceXY ( ) ,
d = c . y + 2 * Blockly . SNAP _RADIUS ; b . setAttribute ( "x" , c . x + Blockly . SNAP _RADIUS * ( this . RTL ? - 1 : 1 ) ) ; b . setAttribute ( "y" , d ) ; c = this . mutationToDom ( ) ; b . appendChild ( c ) ; c = Blockly . utils . xml . createElement ( "field" ) ; c . setAttribute ( "name" , "NAME" ) ; d = this . getProcedureCall ( ) ; d || ( d = Blockly . Procedures . findLegalName ( "" , this ) , this . renameProcedure ( "" , d ) ) ; c . appendChild ( Blockly . utils . xml . createTextNode ( d ) ) ; b . appendChild ( c ) ; a . appendChild ( b ) ; Blockly . Xml . domToWorkspace ( a , this . workspace ) ; Blockly . Events . setGroup ( ! 1 ) } } else a . type == Blockly . Events . BLOCK _DELETE ?
( b = this . getProcedureCall ( ) , b = Blockly . Procedures . getDefinition ( b , this . workspace ) , b || ( Blockly . Events . setGroup ( a . group ) , this . dispose ( ! 0 ) , Blockly . Events . setGroup ( ! 1 ) ) ) : a . type == Blockly . Events . CHANGE && "disabled" == a . element && ( b = this . getProcedureCall ( ) , ( b = Blockly . Procedures . getDefinition ( b , this . workspace ) ) && b . id == a . blockId && ( ( b = Blockly . Events . getGroup ( ) ) && console . log ( "Saw an existing group while responding to a definition change" ) , Blockly . Events . setGroup ( a . group ) , a . newValue ? ( this . previousEnabledState _ = this . isEnabled ( ) ,
this . setEnabled ( ! 1 ) ) : this . setEnabled ( this . previousEnabledState _ ) , Blockly . Events . setGroup ( b ) ) ) } , customContextMenu : function ( a ) { if ( this . workspace . isMovable ( ) ) { var b = { enabled : ! 0 } ; b . text = Blockly . Msg . PROCEDURES _HIGHLIGHT _DEF ; var c = this . getProcedureCall ( ) , d = this . workspace ; b . callback = function ( ) { var e = Blockly . Procedures . getDefinition ( c , d ) ; e && ( d . centerOnBlock ( e . id ) , e . select ( ) ) } ; a . push ( b ) } } , defType _ : "procedures_defnoreturn" } ;
Blockly . Blocks . procedures _callreturn = { init : function ( ) { this . appendDummyInput ( "TOPROW" ) . appendField ( "" , "NAME" ) ; this . setOutput ( ! 0 ) ; this . setStyle ( "procedure_blocks" ) ; this . setHelpUrl ( Blockly . Msg . PROCEDURES _CALLRETURN _HELPURL ) ; this . arguments _ = [ ] ; this . argumentVarModels _ = [ ] ; this . quarkConnections _ = { } ; this . quarkIds _ = null ; this . previousEnabledState _ = ! 0 } , 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 , getVars : Blockly . Blocks . procedures _callnoreturn . getVars , 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 ( ! 0 ) ; this . setPreviousStatement ( ! 0 ) ; this . setNextStatement ( ! 0 ) ; this . setStyle ( "procedure_blocks" ) ; this . setTooltip ( Blockly . Msg . PROCEDURES _IFRETURN _TOOLTIP ) ; this . setHelpUrl ( Blockly . Msg . PROCEDURES _IFRETURN _HELPURL ) ; this . hasReturnValue _ = ! 0 } , mutationToDom : function ( ) { var a =
Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "value" , Number ( this . hasReturnValue _ ) ) ; return a } , domToMutation : function ( a ) { this . hasReturnValue _ = 1 == a . getAttribute ( "value" ) ; this . hasReturnValue _ || ( this . removeInput ( "VALUE" ) , this . appendDummyInput ( "VALUE" ) . appendField ( Blockly . Msg . PROCEDURES _DEFRETURN _RETURN ) ) } , onchange : function ( a ) { if ( this . workspace . isDragging && ! this . workspace . isDragging ( ) ) { a = ! 1 ; var b = this ; do { if ( - 1 != this . FUNCTION _TYPES . indexOf ( b . type ) ) { a = ! 0 ; break } b = b . getSurroundParent ( ) } while ( b ) ;
a ? ( "procedures_defnoreturn" == b . type && this . hasReturnValue _ ? ( this . removeInput ( "VALUE" ) , this . appendDummyInput ( "VALUE" ) . appendField ( Blockly . Msg . PROCEDURES _DEFRETURN _RETURN ) , this . hasReturnValue _ = ! 1 ) : "procedures_defreturn" != b . type || this . hasReturnValue _ || ( this . removeInput ( "VALUE" ) , this . appendValueInput ( "VALUE" ) . appendField ( Blockly . Msg . PROCEDURES _DEFRETURN _RETURN ) , this . hasReturnValue _ = ! 0 ) , this . setWarningText ( null ) , this . isInFlyout || this . setEnabled ( ! 0 ) ) : ( this . setWarningText ( Blockly . Msg . PROCEDURES _IFRETURN _WARNING ) ,
this . isInFlyout || this . getInheritedDisabled ( ) || this . setEnabled ( ! 1 ) ) } } , FUNCTION _TYPES : [ "procedures_defnoreturn" , "procedures_defreturn" ] } ; Blockly . Blocks . texts = { } ; Blockly . Constants . Text = { } ; Blockly . Constants . Text . HUE = 160 ;
Blockly . defineBlocksWithJsonArray ( [ { type : "text" , message0 : "%1" , args0 : [ { type : "field_input" , name : "TEXT" , text : "" } ] , output : "String" , style : "text_blocks" , helpUrl : "%{BKY_TEXT_TEXT_HELPURL}" , tooltip : "%{BKY_TEXT_TEXT_TOOLTIP}" , extensions : [ "text_quotes" , "parent_tooltip_when_inline" ] } , { type : "text_multiline" , message0 : "%1 %2" , args0 : [ { type : "field_image" , src : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAARCAYAAADpPU2iAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAdhgAAHYYBXaITgQAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS42/U4J6AAAAP1JREFUOE+Vks0KQUEYhjmRIja4ABtZ2dm5A3t3Ia6AUm7CylYuQRaUhZSlLZJiQbFAyRnPN33y01HOW08z8873zpwzM4F3GWOCruvGIE4/rLaV+Nq1hVGMBqzhqlxgCys4wJA65xnogMHsQ5lujnYHTejBBCK2mE4abjCgMGhNxHgDFWjDSG07kdfVa2pZMf4ZyMAdWmpZMfYOsLiDMYMjlMB+K613QISRhTnITnsYg5yUd0DETmEoMlkFOeIT/A58iyK5E18BuTBfgYXfwNJv4P9/oEBerLylOnRhygmGdPpTTBZAPkde61lbQe4moWUvYUZYLfUNftIY4zwA5X2Z9AYnQrEAAAAASUVORK5CYII=" , width : 12 ,
height : 17 , alt : "\u00b6" } , { type : "field_multilinetext" , name : "TEXT" , text : "" } ] , output : "String" , style : "text_blocks" , helpUrl : "%{BKY_TEXT_TEXT_HELPURL}" , tooltip : "%{BKY_TEXT_TEXT_TOOLTIP}" , extensions : [ "parent_tooltip_when_inline" ] } , { type : "text_join" , message0 : "" , output : "String" , style : "text_blocks" , 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" } ] , style : "text_blocks" , tooltip : "%{BKY_TEXT_CREATE_JOIN_TOOLTIP}" , enableContextMenu : ! 1 } , { type : "text_create_join_item" , message0 : "%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}" , previousStatement : null , nextStatement : null , style : "text_blocks" , tooltip : "%{BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}" , enableContextMenu : ! 1 } , { 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 , style : "text_blocks" , extensions : [ "text_append_tooltip" ] } , { type : "text_length" , message0 : "%{BKY_TEXT_LENGTH_TITLE}" , args0 : [ { type : "input_value" , name : "VALUE" , check : [ "String" , "Array" ] } ] , output : "Number" , style : "text_blocks" , 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" , style : "text_blocks" , 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" , style : "text_blocks" , helpUrl : "%{BKY_TEXT_INDEXOF_HELPURL}" , inputsInline : ! 0 , 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" , style : "text_blocks" , helpUrl : "%{BKY_TEXT_CHARAT_HELPURL}" , inputsInline : ! 0 , 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 . setStyle ( "text_blocks" ) ;
this . appendValueInput ( "STRING" ) . setCheck ( "String" ) . appendField ( Blockly . Msg . TEXT _GET _SUBSTRING _INPUT _IN _TEXT ) ; this . appendDummyInput ( "AT1" ) ; this . appendDummyInput ( "AT2" ) ; Blockly . Msg . TEXT _GET _SUBSTRING _TAIL && this . appendDummyInput ( "TAIL" ) . appendField ( Blockly . Msg . TEXT _GET _SUBSTRING _TAIL ) ; this . setInputsInline ( ! 0 ) ; this . setOutput ( ! 0 , "String" ) ; this . updateAt _ ( 1 , ! 0 ) ; this . updateAt _ ( 2 , ! 0 ) ; this . setTooltip ( Blockly . Msg . TEXT _GET _SUBSTRING _TOOLTIP ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ,
b = this . getInput ( "AT1" ) . type == Blockly . INPUT _VALUE ; a . setAttribute ( "at1" , b ) ; b = this . getInput ( "AT2" ) . type == Blockly . INPUT _VALUE ; a . setAttribute ( "at2" , b ) ; return a } , domToMutation : function ( a ) { var b = "true" == a . getAttribute ( "at1" ) ; a = "true" == a . getAttribute ( "at2" ) ; this . updateAt _ ( 1 , b ) ; this . updateAt _ ( 2 , a ) } , updateAt _ : function ( a , b ) { this . removeInput ( "AT" + a ) ; this . removeInput ( "ORDINAL" + a , ! 0 ) ; b ? ( this . appendValueInput ( "AT" + a ) . setCheck ( "Number" ) , Blockly . Msg . ORDINAL _NUMBER _SUFFIX && this . appendDummyInput ( "ORDINAL" + a ) . appendField ( Blockly . Msg . ORDINAL _NUMBER _SUFFIX ) ) :
this . appendDummyInput ( "AT" + a ) ; 2 == a && Blockly . Msg . TEXT _GET _SUBSTRING _TAIL && ( this . removeInput ( "TAIL" , ! 0 ) , this . appendDummyInput ( "TAIL" ) . appendField ( Blockly . Msg . TEXT _GET _SUBSTRING _TAIL ) ) ; var c = new Blockly . FieldDropdown ( this [ "WHERE_OPTIONS_" + a ] , function ( d ) { var e = "FROM_START" == d || "FROM_END" == d ; if ( e != b ) { var f = this . getSourceBlock ( ) ; f . updateAt _ ( a , e ) ; f . setFieldValue ( d , "WHERE" + a ) ; return null } } ) ; this . getInput ( "AT" + a ) . appendField ( c , "WHERE" + a ) ; 1 == a && ( this . moveInputBefore ( "AT1" , "AT2" ) , this . getInput ( "ORDINAL1" ) &&
this . moveInputBefore ( "ORDINAL1" , "AT2" ) ) } } ; Blockly . Blocks . text _changeCase = { init : function ( ) { var a = [ [ 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 . setStyle ( "text_blocks" ) ; this . appendValueInput ( "TEXT" ) . setCheck ( "String" ) . appendField ( new Blockly . FieldDropdown ( a ) , "CASE" ) ; this . setOutput ( ! 0 , "String" ) ; this . setTooltip ( Blockly . Msg . TEXT _CHANGECASE _TOOLTIP ) } } ;
Blockly . Blocks . text _trim = { init : function ( ) { var a = [ [ 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 . setStyle ( "text_blocks" ) ; this . appendValueInput ( "TEXT" ) . setCheck ( "String" ) . appendField ( new Blockly . FieldDropdown ( a ) , "MODE" ) ; this . setOutput ( ! 0 , "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 , style : "text_blocks" , tooltip : Blockly . Msg . TEXT _PRINT _TOOLTIP , helpUrl : Blockly . Msg . TEXT _PRINT _HELPURL } ) } } ;
Blockly . Blocks . text _prompt _ext = { init : function ( ) { var a = [ [ Blockly . Msg . TEXT _PROMPT _TYPE _TEXT , "TEXT" ] , [ Blockly . Msg . TEXT _PROMPT _TYPE _NUMBER , "NUMBER" ] ] ; this . setHelpUrl ( Blockly . Msg . TEXT _PROMPT _HELPURL ) ; this . setStyle ( "text_blocks" ) ; var b = this ; a = new Blockly . FieldDropdown ( a , function ( c ) { b . updateType _ ( c ) } ) ; this . appendValueInput ( "TEXT" ) . appendField ( a , "TYPE" ) ; this . setOutput ( ! 0 , "String" ) ; this . setTooltip ( function ( ) { return "TEXT" == b . getFieldValue ( "TYPE" ) ? Blockly . Msg . TEXT _PROMPT _TOOLTIP _TEXT : Blockly . Msg . TEXT _PROMPT _TOOLTIP _NUMBER } ) } ,
updateType _ : function ( a ) { this . outputConnection . setCheck ( "NUMBER" == a ? "Number" : "String" ) } , mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "type" , this . getFieldValue ( "TYPE" ) ) ; return a } , domToMutation : function ( a ) { this . updateType _ ( a . getAttribute ( "type" ) ) } } ;
Blockly . Blocks . text _prompt = { init : function ( ) { this . mixin ( Blockly . Constants . Text . QUOTE _IMAGE _MIXIN ) ; var a = [ [ Blockly . Msg . TEXT _PROMPT _TYPE _TEXT , "TEXT" ] , [ Blockly . Msg . TEXT _PROMPT _TYPE _NUMBER , "NUMBER" ] ] , b = this ; this . setHelpUrl ( Blockly . Msg . TEXT _PROMPT _HELPURL ) ; this . setStyle ( "text_blocks" ) ; a = new Blockly . FieldDropdown ( a , function ( c ) { b . updateType _ ( c ) } ) ; this . appendDummyInput ( ) . appendField ( a , "TYPE" ) . appendField ( this . newQuote _ ( ! 0 ) ) . appendField ( new Blockly . FieldTextInput ( "" ) , "TEXT" ) . appendField ( this . newQuote _ ( ! 1 ) ) ;
this . setOutput ( ! 0 , "String" ) ; this . setTooltip ( function ( ) { return "TEXT" == b . getFieldValue ( "TYPE" ) ? 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 : ! 0 , style : "text_blocks" , 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 : ! 0 , style : "text_blocks" , 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 : ! 0 , style : "text_blocks" , 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,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC" , QUOTE _IMAGE _RIGHT _DATAURI : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==" ,
QUOTE _IMAGE _WIDTH : 12 , QUOTE _IMAGE _HEIGHT : 12 , quoteField _ : function ( a ) { for ( var b = 0 , c ; c = this . inputList [ b ] ; b ++ ) for ( var d = 0 , e ; e = c . fieldRow [ d ] ; d ++ ) if ( a == e . name ) { c . insertFieldAt ( d , this . newQuote _ ( ! 0 ) ) ; c . insertFieldAt ( d + 2 , this . newQuote _ ( ! 1 ) ) ; return } console . warn ( 'field named "' + a + '" not found in ' + this . toDevString ( ) ) } , newQuote _ : function ( a ) { a = this . RTL ? ! a : a ; return new Blockly . FieldImage ( a ? this . QUOTE _IMAGE _LEFT _DATAURI : this . QUOTE _IMAGE _RIGHT _DATAURI , this . QUOTE _IMAGE _WIDTH , this . QUOTE _IMAGE _HEIGHT , a ? "\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 a = Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "items" , this . itemCount _ ) ; return a } , domToMutation : function ( a ) { this . itemCount _ = parseInt ( a . getAttribute ( "items" ) , 10 ) ; this . updateShape _ ( ) } , decompose : function ( a ) { var b = a . newBlock ( "text_create_join_container" ) ; b . initSvg ( ) ; for ( var c = b . getInput ( "STACK" ) . connection , d = 0 ; d < this . itemCount _ ; d ++ ) { var e = a . newBlock ( "text_create_join_item" ) ; e . initSvg ( ) ; c . connect ( e . previousConnection ) ;
c = e . nextConnection } return b } , compose : function ( a ) { var b = a . getInputTargetBlock ( "STACK" ) ; for ( a = [ ] ; b && ! b . isInsertionMarker ( ) ; ) a . push ( b . valueConnection _ ) , b = b . nextConnection && b . nextConnection . targetBlock ( ) ; for ( b = 0 ; b < this . itemCount _ ; b ++ ) { var c = this . getInput ( "ADD" + b ) . connection . targetConnection ; c && - 1 == a . indexOf ( c ) && c . disconnect ( ) } this . itemCount _ = a . length ; this . updateShape _ ( ) ; for ( b = 0 ; b < this . itemCount _ ; b ++ ) Blockly . Mutator . reconnect ( a [ b ] , this , "ADD" + b ) } , saveConnections : function ( a ) { a = a . getInputTargetBlock ( "STACK" ) ;
for ( var b = 0 ; a ; ) { var c = this . getInput ( "ADD" + b ) ; a . valueConnection _ = c && c . connection . targetConnection ; b ++ ; a = a . nextConnection && a . nextConnection . targetBlock ( ) } } , updateShape _ : function ( ) { this . itemCount _ && this . getInput ( "EMPTY" ) ? this . removeInput ( "EMPTY" ) : this . itemCount _ || this . getInput ( "EMPTY" ) || this . appendDummyInput ( "EMPTY" ) . appendField ( this . newQuote _ ( ! 0 ) ) . appendField ( this . newQuote _ ( ! 1 ) ) ; for ( var a = 0 ; a < this . itemCount _ ; a ++ ) if ( ! this . getInput ( "ADD" + a ) ) { var b = this . appendValueInput ( "ADD" + a ) . setAlign ( Blockly . ALIGN _RIGHT ) ;
0 == a && b . appendField ( Blockly . Msg . TEXT _JOIN _TITLE _CREATEWITH ) } for ( ; this . getInput ( "ADD" + a ) ; ) this . removeInput ( "ADD" + a ) , a ++ } } ; 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 . Extensions . register ( "text_append_tooltip" , Blockly . Extensions . buildTooltipWithFieldText ( "%{BKY_TEXT_APPEND_TOOLTIP}" , "VAR" ) ) ;
Blockly . Constants . Text . TEXT _INDEXOF _TOOLTIP _EXTENSION = function ( ) { var a = this ; this . setTooltip ( function ( ) { return Blockly . Msg . TEXT _INDEXOF _TOOLTIP . replace ( "%1" , a . workspace . options . oneBasedIndex ? "0" : "-1" ) } ) } ;
Blockly . Constants . Text . TEXT _CHARAT _MUTATOR _MIXIN = { mutationToDom : function ( ) { var a = Blockly . utils . xml . createElement ( "mutation" ) ; a . setAttribute ( "at" , ! ! this . isAt _ ) ; return a } , domToMutation : function ( a ) { a = "false" != a . getAttribute ( "at" ) ; this . updateAt _ ( a ) } , updateAt _ : function ( a ) { this . removeInput ( "AT" , ! 0 ) ; this . removeInput ( "ORDINAL" , ! 0 ) ; a && ( this . appendValueInput ( "AT" ) . setCheck ( "Number" ) , Blockly . Msg . ORDINAL _NUMBER _SUFFIX && this . appendDummyInput ( "ORDINAL" ) . appendField ( Blockly . Msg . ORDINAL _NUMBER _SUFFIX ) ) ; Blockly . Msg . TEXT _CHARAT _TAIL &&
( this . removeInput ( "TAIL" , ! 0 ) , this . appendDummyInput ( "TAIL" ) . appendField ( Blockly . Msg . TEXT _CHARAT _TAIL ) ) ; this . isAt _ = a } } ;
Blockly . Constants . Text . TEXT _CHARAT _EXTENSION = function ( ) { this . getField ( "WHERE" ) . setValidator ( function ( b ) { b = "FROM_START" == b || "FROM_END" == b ; b != this . isAt _ && this . getSourceBlock ( ) . updateAt _ ( b ) } ) ; this . updateAt _ ( ! 0 ) ; var a = this ; this . setTooltip ( function ( ) { var b = a . getFieldValue ( "WHERE" ) , c = Blockly . Msg . TEXT _CHARAT _TOOLTIP ; ( "FROM_START" == b || "FROM_END" == b ) && ( b = "FROM_START" == b ? Blockly . Msg . LISTS _INDEX _FROM _START _TOOLTIP : Blockly . Msg . LISTS _INDEX _FROM _END _TOOLTIP ) && ( c += " " + b . replace ( "%1" , a . workspace . options . oneBasedIndex ?
"#1" : "#0" ) ) ; return c } ) } ; 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 . 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 . defineBlocksWithJsonArray ( [ { type : "variables_get" , message0 : "%1" , args0 : [ { type : "field_variable" , name : "VAR" , variable : "%{BKY_VARIABLES_DEFAULT_NAME}" } ] , output : null , style : "variable_blocks" , 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 , style : "variable_blocks" , 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 ( a ) { if ( ! this . isInFlyout ) { if ( "variables_get" == this . type ) var b = "variables_set" , c = Blockly . Msg . VARIABLES _GET _CREATE _SET ; else b = "variables_get" , c = Blockly . Msg . VARIABLES _SET _CREATE _GET ; var d = { enabled : 0 < this . workspace . remainingCapacity ( ) } , e = this . getField ( "VAR" ) . getText ( ) ; d . text = c . replace ( "%1" , e ) ; c = Blockly . utils . xml . createElement ( "field" ) ; c . setAttribute ( "name" , "VAR" ) ; c . appendChild ( Blockly . utils . xml . createTextNode ( e ) ) ;
e = Blockly . utils . xml . createElement ( "block" ) ; e . setAttribute ( "type" , b ) ; e . appendChild ( c ) ; d . callback = Blockly . ContextMenu . callbackFactory ( this , e ) ; a . push ( d ) } else if ( "variables_get" == this . type || "variables_get_reporter" == this . type ) b = { text : Blockly . Msg . RENAME _VARIABLE , enabled : ! 0 , callback : Blockly . Constants . Variables . RENAME _OPTION _CALLBACK _FACTORY ( this ) } , e = this . getField ( "VAR" ) . getText ( ) , d = { text : Blockly . Msg . DELETE _VARIABLE . replace ( "%1" , e ) , enabled : ! 0 , callback : Blockly . Constants . Variables . DELETE _OPTION _CALLBACK _FACTORY ( this ) } ,
a . unshift ( b ) , a . unshift ( d ) } } ; Blockly . Constants . Variables . RENAME _OPTION _CALLBACK _FACTORY = function ( a ) { return function ( ) { var b = a . workspace , c = a . getField ( "VAR" ) . getVariable ( ) ; Blockly . Variables . renameVariable ( b , c ) } } ; Blockly . Constants . Variables . DELETE _OPTION _CALLBACK _FACTORY = function ( a ) { return function ( ) { var b = a . workspace , c = a . getField ( "VAR" ) . getVariable ( ) ; b . deleteVariableById ( c . getId ( ) ) ; b . refreshToolboxSelection ( ) } } ; Blockly . Extensions . registerMixin ( "contextMenu_variableSetterGetter" , Blockly . Constants . Variables . CUSTOM _CONTEXT _MENU _VARIABLE _GETTER _SETTER _MIXIN ) ; 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 , style : "variable_dynamic_blocks" , 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 , style : "variable_dynamic_blocks" , 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 ( a ) { if ( ! this . isInFlyout ) { var b = this . getFieldValue ( "VAR" ) ; var c = this . workspace . getVariableById ( b ) . type ; if ( "variables_get_dynamic" == this . type ) { b = "variables_set_dynamic" ; var d = Blockly . Msg . VARIABLES _GET _CREATE _SET } else b = "variables_get_dynamic" , d = Blockly . Msg . VARIABLES _SET _CREATE _GET ; var e = { enabled : 0 < this . workspace . remainingCapacity ( ) } , f = this . getField ( "VAR" ) . getText ( ) ; e . text = d . replace ( "%1" , f ) ;
d = Blockly . utils . xml . createElement ( "field" ) ; d . setAttribute ( "name" , "VAR" ) ; d . setAttribute ( "variabletype" , c ) ; d . appendChild ( Blockly . utils . xml . createTextNode ( f ) ) ; f = Blockly . utils . xml . createElement ( "block" ) ; f . setAttribute ( "type" , b ) ; f . appendChild ( d ) ; e . callback = Blockly . ContextMenu . callbackFactory ( this , f ) ; a . push ( e ) } else if ( "variables_get_dynamic" == this . type || "variables_get_reporter_dynamic" == this . type ) b = { text : Blockly . Msg . RENAME _VARIABLE , enabled : ! 0 , callback : Blockly . Constants . Variables . RENAME _OPTION _CALLBACK _FACTORY ( this ) } ,
f = this . getField ( "VAR" ) . getText ( ) , e = { text : Blockly . Msg . DELETE _VARIABLE . replace ( "%1" , f ) , enabled : ! 0 , callback : Blockly . Constants . Variables . DELETE _OPTION _CALLBACK _FACTORY ( this ) } , a . unshift ( b ) , a . unshift ( e ) } , onchange : function ( a ) { a = this . getFieldValue ( "VAR" ) ; a = Blockly . Variables . getVariable ( this . workspace , a ) ; "variables_get_dynamic" == this . type ? this . outputConnection . setCheck ( a . type ) : this . getInput ( "VALUE" ) . connection . setCheck ( a . type ) } } ;
Blockly . Constants . VariablesDynamic . RENAME _OPTION _CALLBACK _FACTORY = function ( a ) { return function ( ) { var b = a . workspace , c = a . getField ( "VAR" ) . getVariable ( ) ; Blockly . Variables . renameVariable ( b , c ) } } ; Blockly . Constants . VariablesDynamic . DELETE _OPTION _CALLBACK _FACTORY = function ( a ) { return function ( ) { var b = a . workspace , c = a . getField ( "VAR" ) . getVariable ( ) ; b . deleteVariableById ( c . getId ( ) ) ; b . refreshToolboxSelection ( ) } } ; Blockly . Extensions . registerMixin ( "contextMenu_variableDynamicSetterGetter" , Blockly . Constants . VariablesDynamic . CUSTOM _CONTEXT _MENU _VARIABLE _GETTER _SETTER _MIXIN ) ;
return Blockly . Blocks ;
} ) ) ;
//# sourceMappingURL=blocks_compressed.js.map