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 . JavaScript = factory ( root . Blockly ) ;
}
} ( this , function ( Blockly ) {
'use strict' ; Blockly . JavaScript = new Blockly . Generator ( "JavaScript" ) ; Blockly . JavaScript . addReservedWords ( "break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,in,instanceof,new,return,super,switch,this,throw,try,typeof,var,void,while,with,yield,enum,implements,interface,let,package,private,protected,public,static,await,null,true,false,arguments," + Object . getOwnPropertyNames ( Blockly . utils . global ) . join ( "," ) ) ;
Blockly . JavaScript . ORDER _ATOMIC = 0 ; Blockly . JavaScript . ORDER _NEW = 1.1 ; Blockly . JavaScript . ORDER _MEMBER = 1.2 ; Blockly . JavaScript . ORDER _FUNCTION _CALL = 2 ; Blockly . JavaScript . ORDER _INCREMENT = 3 ; Blockly . JavaScript . ORDER _DECREMENT = 3 ; Blockly . JavaScript . ORDER _BITWISE _NOT = 4.1 ; Blockly . JavaScript . ORDER _UNARY _PLUS = 4.2 ; Blockly . JavaScript . ORDER _UNARY _NEGATION = 4.3 ; Blockly . JavaScript . ORDER _LOGICAL _NOT = 4.4 ; Blockly . JavaScript . ORDER _TYPEOF = 4.5 ; Blockly . JavaScript . ORDER _VOID = 4.6 ; Blockly . JavaScript . ORDER _DELETE = 4.7 ;
Blockly . JavaScript . ORDER _AWAIT = 4.8 ; Blockly . JavaScript . ORDER _EXPONENTIATION = 5 ; Blockly . JavaScript . ORDER _MULTIPLICATION = 5.1 ; Blockly . JavaScript . ORDER _DIVISION = 5.2 ; Blockly . JavaScript . ORDER _MODULUS = 5.3 ; Blockly . JavaScript . ORDER _SUBTRACTION = 6.1 ; Blockly . JavaScript . ORDER _ADDITION = 6.2 ; Blockly . JavaScript . ORDER _BITWISE _SHIFT = 7 ; Blockly . JavaScript . ORDER _RELATIONAL = 8 ; Blockly . JavaScript . ORDER _IN = 8 ; Blockly . JavaScript . ORDER _INSTANCEOF = 8 ; Blockly . JavaScript . ORDER _EQUALITY = 9 ; Blockly . JavaScript . ORDER _BITWISE _AND = 10 ;
Blockly . JavaScript . ORDER _BITWISE _XOR = 11 ; Blockly . JavaScript . ORDER _BITWISE _OR = 12 ; Blockly . JavaScript . ORDER _LOGICAL _AND = 13 ; Blockly . JavaScript . ORDER _LOGICAL _OR = 14 ; Blockly . JavaScript . ORDER _CONDITIONAL = 15 ; Blockly . JavaScript . ORDER _ASSIGNMENT = 16 ; Blockly . JavaScript . ORDER _YIELD = 17 ; Blockly . JavaScript . ORDER _COMMA = 18 ; Blockly . JavaScript . ORDER _NONE = 99 ;
Blockly . JavaScript . ORDER _OVERRIDES = [ [ Blockly . JavaScript . ORDER _FUNCTION _CALL , Blockly . JavaScript . ORDER _MEMBER ] , [ Blockly . JavaScript . ORDER _FUNCTION _CALL , Blockly . JavaScript . ORDER _FUNCTION _CALL ] , [ Blockly . JavaScript . ORDER _MEMBER , Blockly . JavaScript . ORDER _MEMBER ] , [ Blockly . JavaScript . ORDER _MEMBER , Blockly . JavaScript . ORDER _FUNCTION _CALL ] , [ Blockly . JavaScript . ORDER _LOGICAL _NOT , Blockly . JavaScript . ORDER _LOGICAL _NOT ] , [ Blockly . JavaScript . ORDER _MULTIPLICATION , Blockly . JavaScript . ORDER _MULTIPLICATION ] , [ Blockly . JavaScript . ORDER _ADDITION ,
Blockly . JavaScript . ORDER _ADDITION ] , [ Blockly . JavaScript . ORDER _LOGICAL _AND , Blockly . JavaScript . ORDER _LOGICAL _AND ] , [ Blockly . JavaScript . ORDER _LOGICAL _OR , Blockly . JavaScript . ORDER _LOGICAL _OR ] ] ; Blockly . JavaScript . isInitialized = ! 1 ;
Blockly . JavaScript . init = function ( a ) { Blockly . JavaScript . definitions _ = Object . create ( null ) ; Blockly . JavaScript . functionNames _ = Object . create ( null ) ; Blockly . JavaScript . variableDB _ ? Blockly . JavaScript . variableDB _ . reset ( ) : Blockly . JavaScript . variableDB _ = new Blockly . Names ( Blockly . JavaScript . RESERVED _WORDS _ ) ; Blockly . JavaScript . variableDB _ . setVariableMap ( a . getVariableMap ( ) ) ; for ( var b = [ ] , c = Blockly . Variables . allDeveloperVariables ( a ) , d = 0 ; d < c . length ; d ++ ) b . push ( Blockly . JavaScript . variableDB _ . getName ( c [ d ] , Blockly . Names . DEVELOPER _VARIABLE _TYPE ) ) ;
a = Blockly . Variables . allUsedVarModels ( a ) ; for ( d = 0 ; d < a . length ; d ++ ) b . push ( Blockly . JavaScript . variableDB _ . getName ( a [ d ] . getId ( ) , Blockly . VARIABLE _CATEGORY _NAME ) ) ; b . length && ( Blockly . JavaScript . definitions _ . variables = "var " + b . join ( ", " ) + ";" ) ; this . isInitialized = ! 0 } ;
Blockly . JavaScript . finish = function ( a ) { var b = [ ] , c ; for ( c in Blockly . JavaScript . definitions _ ) b . push ( Blockly . JavaScript . definitions _ [ c ] ) ; delete Blockly . JavaScript . definitions _ ; delete Blockly . JavaScript . functionNames _ ; Blockly . JavaScript . variableDB _ . reset ( ) ; return b . join ( "\n\n" ) + "\n\n\n" + a } ; Blockly . JavaScript . scrubNakedValue = function ( a ) { return a + ";\n" } ; Blockly . JavaScript . quote _ = function ( a ) { a = a . replace ( /\\/g , "\\\\" ) . replace ( /\n/g , "\\\n" ) . replace ( /'/g , "\\'" ) ; return "'" + a + "'" } ;
Blockly . JavaScript . multiline _quote _ = function ( a ) { return a . split ( /\n/g ) . map ( Blockly . JavaScript . quote _ ) . join ( " + '\\n' +\n" ) } ;
Blockly . JavaScript . scrub _ = function ( a , b , c ) { var d = "" ; if ( ! a . outputConnection || ! a . outputConnection . targetConnection ) { var e = a . getCommentText ( ) ; e && ( e = Blockly . utils . string . wrap ( e , Blockly . JavaScript . COMMENT _WRAP - 3 ) , d += Blockly . JavaScript . prefixLines ( e + "\n" , "// " ) ) ; for ( var f = 0 ; f < a . inputList . length ; f ++ ) a . inputList [ f ] . type == Blockly . INPUT _VALUE && ( e = a . inputList [ f ] . connection . targetBlock ( ) ) && ( e = Blockly . JavaScript . allNestedComments ( e ) ) && ( d += Blockly . JavaScript . prefixLines ( e , "// " ) ) } a = a . nextConnection && a . nextConnection . targetBlock ( ) ;
c = c ? "" : Blockly . JavaScript . blockToCode ( a ) ; return d + b + c } ;
Blockly . JavaScript . getAdjusted = function ( a , b , c , d , e ) { c = c || 0 ; e = e || Blockly . JavaScript . ORDER _NONE ; a . workspace . options . oneBasedIndex && c -- ; var f = a . workspace . options . oneBasedIndex ? "1" : "0" ; a = 0 < c ? Blockly . JavaScript . valueToCode ( a , b , Blockly . JavaScript . ORDER _ADDITION ) || f : 0 > c ? Blockly . JavaScript . valueToCode ( a , b , Blockly . JavaScript . ORDER _SUBTRACTION ) || f : d ? Blockly . JavaScript . valueToCode ( a , b , Blockly . JavaScript . ORDER _UNARY _NEGATION ) || f : Blockly . JavaScript . valueToCode ( a , b , e ) || f ; if ( Blockly . isNumber ( a ) ) a = Number ( a ) + c , d &&
( a = - a ) ; else { if ( 0 < c ) { a = a + " + " + c ; var g = Blockly . JavaScript . ORDER _ADDITION } else 0 > c && ( a = a + " - " + - c , g = Blockly . JavaScript . ORDER _SUBTRACTION ) ; d && ( a = c ? "-(" + a + ")" : "-" + a , g = Blockly . JavaScript . ORDER _UNARY _NEGATION ) ; g = Math . floor ( g ) ; e = Math . floor ( e ) ; g && e >= g && ( a = "(" + a + ")" ) } return a } ; Blockly . JavaScript . colour = { } ; Blockly . JavaScript . colour _picker = function ( a ) { return [ Blockly . JavaScript . quote _ ( a . getFieldValue ( "COLOUR" ) ) , Blockly . JavaScript . ORDER _ATOMIC ] } ; Blockly . JavaScript . colour _random = function ( a ) { return [ Blockly . JavaScript . provideFunction _ ( "colourRandom" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "() {" , " var num = Math.floor(Math.random() * Math.pow(2, 24));" , " return '#' + ('00000' + num.toString(16)).substr(-6);" , "}" ] ) + "()" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . colour _rgb = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "RED" , Blockly . JavaScript . ORDER _NONE ) || 0 , c = Blockly . JavaScript . valueToCode ( a , "GREEN" , Blockly . JavaScript . ORDER _NONE ) || 0 ; a = Blockly . JavaScript . valueToCode ( a , "BLUE" , Blockly . JavaScript . ORDER _NONE ) || 0 ; return [ Blockly . JavaScript . provideFunction _ ( "colourRgb" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(r, g, b) {" , " r = Math.max(Math.min(Number(r), 100), 0) * 2.55;" , " g = Math.max(Math.min(Number(g), 100), 0) * 2.55;" ,
" b = Math.max(Math.min(Number(b), 100), 0) * 2.55;" , " r = ('0' + (Math.round(r) || 0).toString(16)).slice(-2);" , " g = ('0' + (Math.round(g) || 0).toString(16)).slice(-2);" , " b = ('0' + (Math.round(b) || 0).toString(16)).slice(-2);" , " return '#' + r + g + b;" , "}" ] ) + "(" + b + ", " + c + ", " + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . colour _blend = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "COLOUR1" , Blockly . JavaScript . ORDER _NONE ) || "'#000000'" , c = Blockly . JavaScript . valueToCode ( a , "COLOUR2" , Blockly . JavaScript . ORDER _NONE ) || "'#000000'" ; a = Blockly . JavaScript . valueToCode ( a , "RATIO" , Blockly . JavaScript . ORDER _NONE ) || . 5 ; return [ Blockly . JavaScript . provideFunction _ ( "colourBlend" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(c1, c2, ratio) {" , " ratio = Math.max(Math.min(Number(ratio), 1), 0);" , " var r1 = parseInt(c1.substring(1, 3), 16);" ,
" var g1 = parseInt(c1.substring(3, 5), 16);" , " var b1 = parseInt(c1.substring(5, 7), 16);" , " var r2 = parseInt(c2.substring(1, 3), 16);" , " var g2 = parseInt(c2.substring(3, 5), 16);" , " var b2 = parseInt(c2.substring(5, 7), 16);" , " var r = Math.round(r1 * (1 - ratio) + r2 * ratio);" , " var g = Math.round(g1 * (1 - ratio) + g2 * ratio);" , " var b = Math.round(b1 * (1 - ratio) + b2 * ratio);" , " r = ('0' + (r || 0).toString(16)).slice(-2);" , " g = ('0' + (g || 0).toString(16)).slice(-2);" , " b = ('0' + (b || 0).toString(16)).slice(-2);" ,
" return '#' + r + g + b;" , "}" ] ) + "(" + b + ", " + c + ", " + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . lists = { } ; Blockly . JavaScript . lists _create _empty = function ( a ) { return [ "[]" , Blockly . JavaScript . ORDER _ATOMIC ] } ; Blockly . JavaScript . lists _create _with = function ( a ) { for ( var b = Array ( a . itemCount _ ) , c = 0 ; c < a . itemCount _ ; c ++ ) b [ c ] = Blockly . JavaScript . valueToCode ( a , "ADD" + c , Blockly . JavaScript . ORDER _NONE ) || "null" ; return [ "[" + b . join ( ", " ) + "]" , Blockly . JavaScript . ORDER _ATOMIC ] } ;
Blockly . JavaScript . lists _repeat = function ( a ) { var b = Blockly . JavaScript . provideFunction _ ( "listsRepeat" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(value, n) {" , " var array = [];" , " for (var i = 0; i < n; i++) {" , " array[i] = value;" , " }" , " return array;" , "}" ] ) , c = Blockly . JavaScript . valueToCode ( a , "ITEM" , Blockly . JavaScript . ORDER _NONE ) || "null" ; a = Blockly . JavaScript . valueToCode ( a , "NUM" , Blockly . JavaScript . ORDER _NONE ) || "0" ; return [ b + "(" + c + ", " + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . lists _length = function ( a ) { return [ ( Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _MEMBER ) || "[]" ) + ".length" , Blockly . JavaScript . ORDER _MEMBER ] } ; Blockly . JavaScript . lists _isEmpty = function ( a ) { return [ "!" + ( Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _MEMBER ) || "[]" ) + ".length" , Blockly . JavaScript . ORDER _LOGICAL _NOT ] } ;
Blockly . JavaScript . lists _indexOf = function ( a ) { var b = "FIRST" == a . getFieldValue ( "END" ) ? "indexOf" : "lastIndexOf" , c = Blockly . JavaScript . valueToCode ( a , "FIND" , Blockly . JavaScript . ORDER _NONE ) || "''" ; b = ( Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _MEMBER ) || "[]" ) + "." + b + "(" + c + ")" ; return a . workspace . options . oneBasedIndex ? [ b + " + 1" , Blockly . JavaScript . ORDER _ADDITION ] : [ b , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . lists _getIndex = function ( a ) { var b = a . getFieldValue ( "MODE" ) || "GET" , c = a . getFieldValue ( "WHERE" ) || "FROM_START" , d = Blockly . JavaScript . valueToCode ( a , "VALUE" , "RANDOM" == c ? Blockly . JavaScript . ORDER _NONE : Blockly . JavaScript . ORDER _MEMBER ) || "[]" ; switch ( c ) { case "FIRST" : if ( "GET" == b ) return [ d + "[0]" , Blockly . JavaScript . ORDER _MEMBER ] ; if ( "GET_REMOVE" == b ) return [ d + ".shift()" , Blockly . JavaScript . ORDER _MEMBER ] ; if ( "REMOVE" == b ) return d + ".shift();\n" ; break ; case "LAST" : if ( "GET" == b ) return [ d + ".slice(-1)[0]" , Blockly . JavaScript . ORDER _MEMBER ] ;
if ( "GET_REMOVE" == b ) return [ d + ".pop()" , Blockly . JavaScript . ORDER _MEMBER ] ; if ( "REMOVE" == b ) return d + ".pop();\n" ; break ; case "FROM_START" : a = Blockly . JavaScript . getAdjusted ( a , "AT" ) ; if ( "GET" == b ) return [ d + "[" + a + "]" , Blockly . JavaScript . ORDER _MEMBER ] ; if ( "GET_REMOVE" == b ) return [ d + ".splice(" + a + ", 1)[0]" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; if ( "REMOVE" == b ) return d + ".splice(" + a + ", 1);\n" ; break ; case "FROM_END" : a = Blockly . JavaScript . getAdjusted ( a , "AT" , 1 , ! 0 ) ; if ( "GET" == b ) return [ d + ".slice(" + a + ")[0]" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ;
if ( "GET_REMOVE" == b ) return [ d + ".splice(" + a + ", 1)[0]" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; if ( "REMOVE" == b ) return d + ".splice(" + a + ", 1);" ; break ; case "RANDOM" : d = Blockly . JavaScript . provideFunction _ ( "listsGetRandomItem" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(list, remove) {" , " var x = Math.floor(Math.random() * list.length);" , " if (remove) {" , " return list.splice(x, 1)[0];" , " } else {" , " return list[x];" , " }" , "}" ] ) + "(" + d + ", " + ( "GET" != b ) + ")" ; if ( "GET" == b || "GET_REMOVE" == b ) return [ d ,
Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; if ( "REMOVE" == b ) return d + ";\n" } throw Error ( "Unhandled combination (lists_getIndex)." ) ; } ;
Blockly . JavaScript . lists _setIndex = function ( a ) { function b ( ) { if ( c . match ( /^\w+$/ ) ) return "" ; var g = Blockly . JavaScript . variableDB _ . getDistinctName ( "tmpList" , Blockly . VARIABLE _CATEGORY _NAME ) , h = "var " + g + " = " + c + ";\n" ; c = g ; return h } var c = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _MEMBER ) || "[]" , d = a . getFieldValue ( "MODE" ) || "GET" , e = a . getFieldValue ( "WHERE" ) || "FROM_START" , f = Blockly . JavaScript . valueToCode ( a , "TO" , Blockly . JavaScript . ORDER _ASSIGNMENT ) || "null" ; switch ( e ) { case "FIRST" : if ( "SET" == d ) return c +
"[0] = " + f + ";\n" ; if ( "INSERT" == d ) return c + ".unshift(" + f + ");\n" ; break ; case "LAST" : if ( "SET" == d ) return a = b ( ) , a + ( c + "[" + c + ".length - 1] = " + f + ";\n" ) ; if ( "INSERT" == d ) return c + ".push(" + f + ");\n" ; break ; case "FROM_START" : e = Blockly . JavaScript . getAdjusted ( a , "AT" ) ; if ( "SET" == d ) return c + "[" + e + "] = " + f + ";\n" ; if ( "INSERT" == d ) return c + ".splice(" + e + ", 0, " + f + ");\n" ; break ; case "FROM_END" : e = Blockly . JavaScript . getAdjusted ( a , "AT" , 1 , ! 1 , Blockly . JavaScript . ORDER _SUBTRACTION ) ; a = b ( ) ; if ( "SET" == d ) return a + ( c + "[" + c + ".length - " + e +
"] = " + f + ";\n" ) ; if ( "INSERT" == d ) return a + ( c + ".splice(" + c + ".length - " + e + ", 0, " + f + ");\n" ) ; break ; case "RANDOM" : a = b ( ) ; e = Blockly . JavaScript . variableDB _ . getDistinctName ( "tmpX" , Blockly . VARIABLE _CATEGORY _NAME ) ; a += "var " + e + " = Math.floor(Math.random() * " + c + ".length);\n" ; if ( "SET" == d ) return a + ( c + "[" + e + "] = " + f + ";\n" ) ; if ( "INSERT" == d ) return a + ( c + ".splice(" + e + ", 0, " + f + ");\n" ) } throw Error ( "Unhandled combination (lists_setIndex)." ) ; } ;
Blockly . JavaScript . lists . getIndex _ = function ( a , b , c ) { return "FIRST" == b ? "0" : "FROM_END" == b ? a + ".length - 1 - " + c : "LAST" == b ? a + ".length - 1" : c } ;
Blockly . JavaScript . lists _getSublist = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _MEMBER ) || "[]" , c = a . getFieldValue ( "WHERE1" ) , d = a . getFieldValue ( "WHERE2" ) ; if ( "FIRST" == c && "LAST" == d ) b += ".slice(0)" ; else if ( b . match ( /^\w+$/ ) || "FROM_END" != c && "FROM_START" == d ) { switch ( c ) { case "FROM_START" : var e = Blockly . JavaScript . getAdjusted ( a , "AT1" ) ; break ; case "FROM_END" : e = Blockly . JavaScript . getAdjusted ( a , "AT1" , 1 , ! 1 , Blockly . JavaScript . ORDER _SUBTRACTION ) ; e = b + ".length - " + e ; break ; case "FIRST" : e =
"0" ; break ; default : throw Error ( "Unhandled option (lists_getSublist)." ) ; } switch ( d ) { case "FROM_START" : a = Blockly . JavaScript . getAdjusted ( a , "AT2" , 1 ) ; break ; case "FROM_END" : a = Blockly . JavaScript . getAdjusted ( a , "AT2" , 0 , ! 1 , Blockly . JavaScript . ORDER _SUBTRACTION ) ; a = b + ".length - " + a ; break ; case "LAST" : a = b + ".length" ; break ; default : throw Error ( "Unhandled option (lists_getSublist)." ) ; } b = b + ".slice(" + e + ", " + a + ")" } else { e = Blockly . JavaScript . getAdjusted ( a , "AT1" ) ; a = Blockly . JavaScript . getAdjusted ( a , "AT2" ) ; var f = Blockly . JavaScript . lists . getIndex _ ,
g = { FIRST : "First" , LAST : "Last" , FROM _START : "FromStart" , FROM _END : "FromEnd" } ; b = Blockly . JavaScript . provideFunction _ ( "subsequence" + g [ c ] + g [ d ] , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(sequence" + ( "FROM_END" == c || "FROM_START" == c ? ", at1" : "" ) + ( "FROM_END" == d || "FROM_START" == d ? ", at2" : "" ) + ") {" , " var start = " + f ( "sequence" , c , "at1" ) + ";" , " var end = " + f ( "sequence" , d , "at2" ) + " + 1;" , " return sequence.slice(start, end);" , "}" ] ) + "(" + b + ( "FROM_END" == c || "FROM_START" == c ? ", " + e : "" ) + ( "FROM_END" == d || "FROM_START" ==
d ? ", " + a : "" ) + ")" } return [ b , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . lists _sort = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _FUNCTION _CALL ) || "[]" , c = "1" === a . getFieldValue ( "DIRECTION" ) ? 1 : - 1 ; a = a . getFieldValue ( "TYPE" ) ; var d = Blockly . JavaScript . provideFunction _ ( "listsGetSortCompare" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(type, direction) {" , " var compareFuncs = {" , ' "NUMERIC": function(a, b) {' , " return Number(a) - Number(b); }," , ' "TEXT": function(a, b) {' , " return a.toString() > b.toString() ? 1 : -1; }," ,
' "IGNORE_CASE": function(a, b) {' , " return a.toString().toLowerCase() > b.toString().toLowerCase() ? 1 : -1; }," , " };" , " var compare = compareFuncs[type];" , " return function(a, b) { return compare(a, b) * direction; }" , "}" ] ) ; return [ b + ".slice().sort(" + d + '("' + a + '", ' + c + "))" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . lists _split = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "INPUT" , Blockly . JavaScript . ORDER _MEMBER ) , c = Blockly . JavaScript . valueToCode ( a , "DELIM" , Blockly . JavaScript . ORDER _NONE ) || "''" ; a = a . getFieldValue ( "MODE" ) ; if ( "SPLIT" == a ) b || ( b = "''" ) , a = "split" ; else if ( "JOIN" == a ) b || ( b = "[]" ) , a = "join" ; else throw Error ( "Unknown mode: " + a ) ; return [ b + "." + a + "(" + c + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . lists _reverse = function ( a ) { return [ ( Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _FUNCTION _CALL ) || "[]" ) + ".slice().reverse()" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . logic = { } ;
Blockly . JavaScript . controls _if = function ( a ) { var b = 0 , c = "" ; Blockly . JavaScript . STATEMENT _PREFIX && ( c += Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _PREFIX , a ) ) ; do { var d = Blockly . JavaScript . valueToCode ( a , "IF" + b , Blockly . JavaScript . ORDER _NONE ) || "false" ; var e = Blockly . JavaScript . statementToCode ( a , "DO" + b ) ; Blockly . JavaScript . STATEMENT _SUFFIX && ( e = Blockly . JavaScript . prefixLines ( Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _SUFFIX , a ) , Blockly . JavaScript . INDENT ) + e ) ; c += ( 0 < b ? " else " : "" ) + "if (" +
d + ") {\n" + e + "}" ; ++ b } while ( a . getInput ( "IF" + b ) ) ; if ( a . getInput ( "ELSE" ) || Blockly . JavaScript . STATEMENT _SUFFIX ) e = Blockly . JavaScript . statementToCode ( a , "ELSE" ) , Blockly . JavaScript . STATEMENT _SUFFIX && ( e = Blockly . JavaScript . prefixLines ( Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _SUFFIX , a ) , Blockly . JavaScript . INDENT ) + e ) , c += " else {\n" + e + "}" ; return c + "\n" } ; Blockly . JavaScript . controls _ifelse = Blockly . JavaScript . controls _if ;
Blockly . JavaScript . logic _compare = function ( a ) { var b = { EQ : "==" , NEQ : "!=" , LT : "<" , LTE : "<=" , GT : ">" , GTE : ">=" } [ a . getFieldValue ( "OP" ) ] , c = "==" == b || "!=" == b ? Blockly . JavaScript . ORDER _EQUALITY : Blockly . JavaScript . ORDER _RELATIONAL , d = Blockly . JavaScript . valueToCode ( a , "A" , c ) || "0" ; a = Blockly . JavaScript . valueToCode ( a , "B" , c ) || "0" ; return [ d + " " + b + " " + a , c ] } ;
Blockly . JavaScript . logic _operation = function ( a ) { var b = "AND" == a . getFieldValue ( "OP" ) ? "&&" : "||" , c = "&&" == b ? Blockly . JavaScript . ORDER _LOGICAL _AND : Blockly . JavaScript . ORDER _LOGICAL _OR , d = Blockly . JavaScript . valueToCode ( a , "A" , c ) ; a = Blockly . JavaScript . valueToCode ( a , "B" , c ) ; if ( d || a ) { var e = "&&" == b ? "true" : "false" ; d || ( d = e ) ; a || ( a = e ) } else a = d = "false" ; return [ d + " " + b + " " + a , c ] } ;
Blockly . JavaScript . logic _negate = function ( a ) { var b = Blockly . JavaScript . ORDER _LOGICAL _NOT ; return [ "!" + ( Blockly . JavaScript . valueToCode ( a , "BOOL" , b ) || "true" ) , b ] } ; Blockly . JavaScript . logic _boolean = function ( a ) { return [ "TRUE" == a . getFieldValue ( "BOOL" ) ? "true" : "false" , Blockly . JavaScript . ORDER _ATOMIC ] } ; Blockly . JavaScript . logic _null = function ( a ) { return [ "null" , Blockly . JavaScript . ORDER _ATOMIC ] } ;
Blockly . JavaScript . logic _ternary = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "IF" , Blockly . JavaScript . ORDER _CONDITIONAL ) || "false" , c = Blockly . JavaScript . valueToCode ( a , "THEN" , Blockly . JavaScript . ORDER _CONDITIONAL ) || "null" ; a = Blockly . JavaScript . valueToCode ( a , "ELSE" , Blockly . JavaScript . ORDER _CONDITIONAL ) || "null" ; return [ b + " ? " + c + " : " + a , Blockly . JavaScript . ORDER _CONDITIONAL ] } ; Blockly . JavaScript . loops = { } ;
Blockly . JavaScript . controls _repeat _ext = function ( a ) { var b = a . getField ( "TIMES" ) ? String ( Number ( a . getFieldValue ( "TIMES" ) ) ) : Blockly . JavaScript . valueToCode ( a , "TIMES" , Blockly . JavaScript . ORDER _ASSIGNMENT ) || "0" , c = Blockly . JavaScript . statementToCode ( a , "DO" ) ; c = Blockly . JavaScript . addLoopTrap ( c , a ) ; a = "" ; var d = Blockly . JavaScript . variableDB _ . getDistinctName ( "count" , Blockly . VARIABLE _CATEGORY _NAME ) , e = b ; b . match ( /^\w+$/ ) || Blockly . isNumber ( b ) || ( e = Blockly . JavaScript . variableDB _ . getDistinctName ( "repeat_end" , Blockly . VARIABLE _CATEGORY _NAME ) ,
a += "var " + e + " = " + b + ";\n" ) ; return a + ( "for (var " + d + " = 0; " + d + " < " + e + "; " + d + "++) {\n" + c + "}\n" ) } ; Blockly . JavaScript . controls _repeat = Blockly . JavaScript . controls _repeat _ext ;
Blockly . JavaScript . controls _whileUntil = function ( a ) { var b = "UNTIL" == a . getFieldValue ( "MODE" ) , c = Blockly . JavaScript . valueToCode ( a , "BOOL" , b ? Blockly . JavaScript . ORDER _LOGICAL _NOT : Blockly . JavaScript . ORDER _NONE ) || "false" , d = Blockly . JavaScript . statementToCode ( a , "DO" ) ; d = Blockly . JavaScript . addLoopTrap ( d , a ) ; b && ( c = "!" + c ) ; return "while (" + c + ") {\n" + d + "}\n" } ;
Blockly . JavaScript . controls _for = function ( a ) { var b = Blockly . JavaScript . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . VARIABLE _CATEGORY _NAME ) , c = Blockly . JavaScript . valueToCode ( a , "FROM" , Blockly . JavaScript . ORDER _ASSIGNMENT ) || "0" , d = Blockly . JavaScript . valueToCode ( a , "TO" , Blockly . JavaScript . ORDER _ASSIGNMENT ) || "0" , e = Blockly . JavaScript . valueToCode ( a , "BY" , Blockly . JavaScript . ORDER _ASSIGNMENT ) || "1" , f = Blockly . JavaScript . statementToCode ( a , "DO" ) ; f = Blockly . JavaScript . addLoopTrap ( f , a ) ; if ( Blockly . isNumber ( c ) && Blockly . isNumber ( d ) &&
Blockly . isNumber ( e ) ) { var g = Number ( c ) <= Number ( d ) ; a = "for (" + b + " = " + c + "; " + b + ( g ? " <= " : " >= " ) + d + "; " + b ; b = Math . abs ( Number ( e ) ) ; a = ( 1 == b ? a + ( g ? "++" : "--" ) : a + ( ( g ? " += " : " -= " ) + b ) ) + ( ") {\n" + f + "}\n" ) } else a = "" , g = c , c . match ( /^\w+$/ ) || Blockly . isNumber ( c ) || ( g = Blockly . JavaScript . variableDB _ . getDistinctName ( b + "_start" , Blockly . VARIABLE _CATEGORY _NAME ) , a += "var " + g + " = " + c + ";\n" ) , c = d , d . match ( /^\w+$/ ) || Blockly . isNumber ( d ) || ( c = Blockly . JavaScript . variableDB _ . getDistinctName ( b + "_end" , Blockly . VARIABLE _CATEGORY _NAME ) , a +=
"var " + c + " = " + d + ";\n" ) , d = Blockly . JavaScript . variableDB _ . getDistinctName ( b + "_inc" , Blockly . VARIABLE _CATEGORY _NAME ) , a += "var " + d + " = " , a = Blockly . isNumber ( e ) ? a + ( Math . abs ( e ) + ";\n" ) : a + ( "Math.abs(" + e + ");\n" ) , a = a + ( "if (" + g + " > " + c + ") {\n" ) + ( Blockly . JavaScript . INDENT + d + " = -" + d + ";\n" ) , a += "}\n" , a += "for (" + b + " = " + g + "; " + d + " >= 0 ? " + b + " <= " + c + " : " + b + " >= " + c + "; " + b + " += " + d + ") {\n" + f + "}\n" ; return a } ;
Blockly . JavaScript . controls _forEach = function ( a ) { var b = Blockly . JavaScript . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . VARIABLE _CATEGORY _NAME ) , c = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _ASSIGNMENT ) || "[]" , d = Blockly . JavaScript . statementToCode ( a , "DO" ) ; d = Blockly . JavaScript . addLoopTrap ( d , a ) ; a = "" ; var e = c ; c . match ( /^\w+$/ ) || ( e = Blockly . JavaScript . variableDB _ . getDistinctName ( b + "_list" , Blockly . VARIABLE _CATEGORY _NAME ) , a += "var " + e + " = " + c + ";\n" ) ; c = Blockly . JavaScript . variableDB _ . getDistinctName ( b +
"_index" , Blockly . VARIABLE _CATEGORY _NAME ) ; d = Blockly . JavaScript . INDENT + b + " = " + e + "[" + c + "];\n" + d ; return a + ( "for (var " + c + " in " + e + ") {\n" + d + "}\n" ) } ;
Blockly . JavaScript . controls _flow _statements = function ( a ) { var b = "" ; Blockly . JavaScript . STATEMENT _PREFIX && ( b += Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _PREFIX , a ) ) ; Blockly . JavaScript . STATEMENT _SUFFIX && ( b += Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _SUFFIX , a ) ) ; if ( Blockly . JavaScript . STATEMENT _PREFIX ) { var c = Blockly . Constants . Loops . CONTROL _FLOW _IN _LOOP _CHECK _MIXIN . getSurroundLoop ( a ) ; c && ! c . suppressPrefixSuffix && ( b += Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _PREFIX ,
c ) ) } switch ( a . getFieldValue ( "FLOW" ) ) { case "BREAK" : return b + "break;\n" ; case "CONTINUE" : return b + "continue;\n" } throw Error ( "Unknown flow statement." ) ; } ; Blockly . JavaScript . math = { } ; Blockly . JavaScript . math _number = function ( a ) { a = Number ( a . getFieldValue ( "NUM" ) ) ; return [ a , 0 <= a ? Blockly . JavaScript . ORDER _ATOMIC : Blockly . JavaScript . ORDER _UNARY _NEGATION ] } ;
Blockly . JavaScript . math _arithmetic = function ( a ) { var b = { ADD : [ " + " , Blockly . JavaScript . ORDER _ADDITION ] , MINUS : [ " - " , Blockly . JavaScript . ORDER _SUBTRACTION ] , MULTIPLY : [ " * " , Blockly . JavaScript . ORDER _MULTIPLICATION ] , DIVIDE : [ " / " , Blockly . JavaScript . ORDER _DIVISION ] , POWER : [ null , Blockly . JavaScript . ORDER _NONE ] } [ a . getFieldValue ( "OP" ) ] , c = b [ 0 ] ; b = b [ 1 ] ; var d = Blockly . JavaScript . valueToCode ( a , "A" , b ) || "0" ; a = Blockly . JavaScript . valueToCode ( a , "B" , b ) || "0" ; return c ? [ d + c + a , b ] : [ "Math.pow(" + d + ", " + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . math _single = function ( a ) { var b = a . getFieldValue ( "OP" ) ; if ( "NEG" == b ) return a = Blockly . JavaScript . valueToCode ( a , "NUM" , Blockly . JavaScript . ORDER _UNARY _NEGATION ) || "0" , "-" == a [ 0 ] && ( a = " " + a ) , [ "-" + a , Blockly . JavaScript . ORDER _UNARY _NEGATION ] ; a = "SIN" == b || "COS" == b || "TAN" == b ? Blockly . JavaScript . valueToCode ( a , "NUM" , Blockly . JavaScript . ORDER _DIVISION ) || "0" : Blockly . JavaScript . valueToCode ( a , "NUM" , Blockly . JavaScript . ORDER _NONE ) || "0" ; switch ( b ) { case "ABS" : var c = "Math.abs(" + a + ")" ; break ; case "ROOT" : c = "Math.sqrt(" +
a + ")" ; break ; case "LN" : c = "Math.log(" + a + ")" ; break ; case "EXP" : c = "Math.exp(" + a + ")" ; break ; case "POW10" : c = "Math.pow(10," + a + ")" ; break ; case "ROUND" : c = "Math.round(" + a + ")" ; break ; case "ROUNDUP" : c = "Math.ceil(" + a + ")" ; break ; case "ROUNDDOWN" : c = "Math.floor(" + a + ")" ; break ; case "SIN" : c = "Math.sin(" + a + " / 180 * Math.PI)" ; break ; case "COS" : c = "Math.cos(" + a + " / 180 * Math.PI)" ; break ; case "TAN" : c = "Math.tan(" + a + " / 180 * Math.PI)" } if ( c ) return [ c , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; switch ( b ) { case "LOG10" : c = "Math.log(" + a +
") / Math.log(10)" ; break ; case "ASIN" : c = "Math.asin(" + a + ") / Math.PI * 180" ; break ; case "ACOS" : c = "Math.acos(" + a + ") / Math.PI * 180" ; break ; case "ATAN" : c = "Math.atan(" + a + ") / Math.PI * 180" ; break ; default : throw Error ( "Unknown math operator: " + b ) ; } return [ c , Blockly . JavaScript . ORDER _DIVISION ] } ;
Blockly . JavaScript . math _constant = function ( a ) { return { PI : [ "Math.PI" , Blockly . JavaScript . ORDER _MEMBER ] , E : [ "Math.E" , Blockly . JavaScript . ORDER _MEMBER ] , GOLDEN _RATIO : [ "(1 + Math.sqrt(5)) / 2" , Blockly . JavaScript . ORDER _DIVISION ] , SQRT2 : [ "Math.SQRT2" , Blockly . JavaScript . ORDER _MEMBER ] , SQRT1 _2 : [ "Math.SQRT1_2" , Blockly . JavaScript . ORDER _MEMBER ] , INFINITY : [ "Infinity" , Blockly . JavaScript . ORDER _ATOMIC ] } [ a . getFieldValue ( "CONSTANT" ) ] } ;
Blockly . JavaScript . math _number _property = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "NUMBER_TO_CHECK" , Blockly . JavaScript . ORDER _MODULUS ) || "0" , c = a . getFieldValue ( "PROPERTY" ) ; if ( "PRIME" == c ) return [ Blockly . JavaScript . provideFunction _ ( "mathIsPrime" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(n) {" , " // https://en.wikipedia.org/wiki/Primality_test#Naive_methods" , " if (n == 2 || n == 3) {" , " return true;" , " }" , " // False if n is NaN, negative, is 1, or not whole." , " // And false if n is divisible by 2 or 3." ,
" if (isNaN(n) || n <= 1 || n % 1 != 0 || n % 2 == 0 || n % 3 == 0) {" , " return false;" , " }" , " // Check all the numbers of form 6k +/- 1, up to sqrt(n)." , " for (var x = 6; x <= Math.sqrt(n) + 1; x += 6) {" , " if (n % (x - 1) == 0 || n % (x + 1) == 0) {" , " return false;" , " }" , " }" , " return true;" , "}" ] ) + "(" + b + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; switch ( c ) { case "EVEN" : var d = b + " % 2 == 0" ; break ; case "ODD" : d = b + " % 2 == 1" ; break ; case "WHOLE" : d = b + " % 1 == 0" ; break ; case "POSITIVE" : d =
b + " > 0" ; break ; case "NEGATIVE" : d = b + " < 0" ; break ; case "DIVISIBLE_BY" : a = Blockly . JavaScript . valueToCode ( a , "DIVISOR" , Blockly . JavaScript . ORDER _MODULUS ) || "0" , d = b + " % " + a + " == 0" } return [ d , Blockly . JavaScript . ORDER _EQUALITY ] } ;
Blockly . JavaScript . math _change = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "DELTA" , Blockly . JavaScript . ORDER _ADDITION ) || "0" ; a = Blockly . JavaScript . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . VARIABLE _CATEGORY _NAME ) ; return a + " = (typeof " + a + " == 'number' ? " + a + " : 0) + " + b + ";\n" } ; Blockly . JavaScript . math _round = Blockly . JavaScript . math _single ; Blockly . JavaScript . math _trig = Blockly . JavaScript . math _single ;
Blockly . JavaScript . math _on _list = function ( a ) { var b = a . getFieldValue ( "OP" ) ; switch ( b ) { case "SUM" : a = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _MEMBER ) || "[]" ; a += ".reduce(function(x, y) {return x + y;})" ; break ; case "MIN" : a = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _NONE ) || "[]" ; a = "Math.min.apply(null, " + a + ")" ; break ; case "MAX" : a = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _NONE ) || "[]" ; a = "Math.max.apply(null, " + a + ")" ; break ; case "AVERAGE" : b = Blockly . JavaScript . provideFunction _ ( "mathMean" ,
[ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(myList) {" , " return myList.reduce(function(x, y) {return x + y;}) / myList.length;" , "}" ] ) ; a = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _NONE ) || "[]" ; a = b + "(" + a + ")" ; break ; case "MEDIAN" : b = Blockly . JavaScript . provideFunction _ ( "mathMedian" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(myList) {" , " var localList = myList.filter(function (x) {return typeof x == 'number';});" , " if (!localList.length) return null;" ,
" localList.sort(function(a, b) {return b - a;});" , " if (localList.length % 2 == 0) {" , " return (localList[localList.length / 2 - 1] + localList[localList.length / 2]) / 2;" , " } else {" , " return localList[(localList.length - 1) / 2];" , " }" , "}" ] ) ; a = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _NONE ) || "[]" ; a = b + "(" + a + ")" ; break ; case "MODE" : b = Blockly . JavaScript . provideFunction _ ( "mathModes" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(values) {" , " var modes = [];" ,
" var counts = [];" , " var maxCount = 0;" , " for (var i = 0; i < values.length; i++) {" , " var value = values[i];" , " var found = false;" , " var thisCount;" , " for (var j = 0; j < counts.length; j++) {" , " if (counts[j][0] === value) {" , " thisCount = ++counts[j][1];" , " found = true;" , " break;" , " }" , " }" , " if (!found) {" , " counts.push([value, 1]);" , " thisCount = 1;" , " }" , " maxCount = Math.max(thisCount, maxCount);" , " }" , " for (var j = 0; j < counts.length; j++) {" ,
" if (counts[j][1] == maxCount) {" , " modes.push(counts[j][0]);" , " }" , " }" , " return modes;" , "}" ] ) ; a = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _NONE ) || "[]" ; a = b + "(" + a + ")" ; break ; case "STD_DEV" : b = Blockly . JavaScript . provideFunction _ ( "mathStandardDeviation" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(numbers) {" , " var n = numbers.length;" , " if (!n) return null;" , " var mean = numbers.reduce(function(x, y) {return x + y;}) / n;" , " var variance = 0;" ,
" for (var j = 0; j < n; j++) {" , " variance += Math.pow(numbers[j] - mean, 2);" , " }" , " variance = variance / n;" , " return Math.sqrt(variance);" , "}" ] ) ; a = Blockly . JavaScript . valueToCode ( a , "LIST" , Blockly . JavaScript . ORDER _NONE ) || "[]" ; a = b + "(" + a + ")" ; break ; case "RANDOM" : b = Blockly . JavaScript . provideFunction _ ( "mathRandomList" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(list) {" , " var x = Math.floor(Math.random() * list.length);" , " return list[x];" , "}" ] ) ; a = Blockly . JavaScript . valueToCode ( a ,
"LIST" , Blockly . JavaScript . ORDER _NONE ) || "[]" ; a = b + "(" + a + ")" ; break ; default : throw Error ( "Unknown operator: " + b ) ; } return [ a , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . math _modulo = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "DIVIDEND" , Blockly . JavaScript . ORDER _MODULUS ) || "0" ; a = Blockly . JavaScript . valueToCode ( a , "DIVISOR" , Blockly . JavaScript . ORDER _MODULUS ) || "0" ; return [ b + " % " + a , Blockly . JavaScript . ORDER _MODULUS ] } ;
Blockly . JavaScript . math _constrain = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _NONE ) || "0" , c = Blockly . JavaScript . valueToCode ( a , "LOW" , Blockly . JavaScript . ORDER _NONE ) || "0" ; a = Blockly . JavaScript . valueToCode ( a , "HIGH" , Blockly . JavaScript . ORDER _NONE ) || "Infinity" ; return [ "Math.min(Math.max(" + b + ", " + c + "), " + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . math _random _int = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "FROM" , Blockly . JavaScript . ORDER _NONE ) || "0" ; a = Blockly . JavaScript . valueToCode ( a , "TO" , Blockly . JavaScript . ORDER _NONE ) || "0" ; return [ Blockly . JavaScript . provideFunction _ ( "mathRandomInt" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(a, b) {" , " if (a > b) {" , " // Swap a and b to ensure a is smaller." , " var c = a;" , " a = b;" , " b = c;" , " }" , " return Math.floor(Math.random() * (b - a + 1) + a);" ,
"}" ] ) + "(" + b + ", " + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . math _random _float = function ( a ) { return [ "Math.random()" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . math _atan2 = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "X" , Blockly . JavaScript . ORDER _NONE ) || "0" ; return [ "Math.atan2(" + ( Blockly . JavaScript . valueToCode ( a , "Y" , Blockly . JavaScript . ORDER _NONE ) || "0" ) + ", " + b + ") / Math.PI * 180" , Blockly . JavaScript . ORDER _DIVISION ] } ; Blockly . JavaScript . procedures = { } ;
Blockly . JavaScript . procedures _defreturn = function ( a ) { var b = Blockly . JavaScript . variableDB _ . getName ( a . getFieldValue ( "NAME" ) , Blockly . PROCEDURE _CATEGORY _NAME ) , c = "" ; Blockly . JavaScript . STATEMENT _PREFIX && ( c += Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _PREFIX , a ) ) ; Blockly . JavaScript . STATEMENT _SUFFIX && ( c += Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _SUFFIX , a ) ) ; c && ( c = Blockly . JavaScript . prefixLines ( c , Blockly . JavaScript . INDENT ) ) ; var d = "" ; Blockly . JavaScript . INFINITE _LOOP _TRAP && ( d = Blockly . JavaScript . prefixLines ( Blockly . JavaScript . injectId ( Blockly . JavaScript . INFINITE _LOOP _TRAP ,
a ) , Blockly . JavaScript . INDENT ) ) ; var e = Blockly . JavaScript . statementToCode ( a , "STACK" ) , f = Blockly . JavaScript . valueToCode ( a , "RETURN" , Blockly . JavaScript . ORDER _NONE ) || "" , g = "" ; e && f && ( g = c ) ; f && ( f = Blockly . JavaScript . INDENT + "return " + f + ";\n" ) ; for ( var h = [ ] , l = a . getVars ( ) , k = 0 ; k < l . length ; k ++ ) h [ k ] = Blockly . JavaScript . variableDB _ . getName ( l [ k ] , Blockly . VARIABLE _CATEGORY _NAME ) ; c = "function " + b + "(" + h . join ( ", " ) + ") {\n" + c + d + e + g + f + "}" ; c = Blockly . JavaScript . scrub _ ( a , c ) ; Blockly . JavaScript . definitions _ [ "%" + b ] = c ; return null } ;
Blockly . JavaScript . procedures _defnoreturn = Blockly . JavaScript . procedures _defreturn ; Blockly . JavaScript . procedures _callreturn = function ( a ) { for ( var b = Blockly . JavaScript . variableDB _ . getName ( a . getFieldValue ( "NAME" ) , Blockly . PROCEDURE _CATEGORY _NAME ) , c = [ ] , d = a . getVars ( ) , e = 0 ; e < d . length ; e ++ ) c [ e ] = Blockly . JavaScript . valueToCode ( a , "ARG" + e , Blockly . JavaScript . ORDER _NONE ) || "null" ; return [ b + "(" + c . join ( ", " ) + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . procedures _callnoreturn = function ( a ) { return Blockly . JavaScript . procedures _callreturn ( a ) [ 0 ] + ";\n" } ;
Blockly . JavaScript . procedures _ifreturn = function ( a ) { var b = "if (" + ( Blockly . JavaScript . valueToCode ( a , "CONDITION" , Blockly . JavaScript . ORDER _NONE ) || "false" ) + ") {\n" ; Blockly . JavaScript . STATEMENT _SUFFIX && ( b += Blockly . JavaScript . prefixLines ( Blockly . JavaScript . injectId ( Blockly . JavaScript . STATEMENT _SUFFIX , a ) , Blockly . JavaScript . INDENT ) ) ; a . hasReturnValue _ ? ( a = Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _NONE ) || "null" , b += Blockly . JavaScript . INDENT + "return " + a + ";\n" ) : b += Blockly . JavaScript . INDENT +
"return;\n" ; return b + "}\n" } ; Blockly . JavaScript . texts = { } ; Blockly . JavaScript . text = function ( a ) { return [ Blockly . JavaScript . quote _ ( a . getFieldValue ( "TEXT" ) ) , Blockly . JavaScript . ORDER _ATOMIC ] } ; Blockly . JavaScript . text _multiline = function ( a ) { a = Blockly . JavaScript . multiline _quote _ ( a . getFieldValue ( "TEXT" ) ) ; var b = - 1 != a . indexOf ( "+" ) ? Blockly . JavaScript . ORDER _ADDITION : Blockly . JavaScript . ORDER _ATOMIC ; return [ a , b ] } ;
Blockly . JavaScript . text . forceString _ = function ( a ) { return Blockly . JavaScript . text . forceString _ . strRegExp . test ( a ) ? [ a , Blockly . JavaScript . ORDER _ATOMIC ] : [ "String(" + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . text . forceString _ . strRegExp = /^\s*'([^']|\\')*'\s*$/ ;
Blockly . JavaScript . text _join = function ( a ) { switch ( a . itemCount _ ) { case 0 : return [ "''" , Blockly . JavaScript . ORDER _ATOMIC ] ; case 1 : return a = Blockly . JavaScript . valueToCode ( a , "ADD0" , Blockly . JavaScript . ORDER _NONE ) || "''" , Blockly . JavaScript . text . forceString _ ( a ) ; case 2 : var b = Blockly . JavaScript . valueToCode ( a , "ADD0" , Blockly . JavaScript . ORDER _NONE ) || "''" ; a = Blockly . JavaScript . valueToCode ( a , "ADD1" , Blockly . JavaScript . ORDER _NONE ) || "''" ; a = Blockly . JavaScript . text . forceString _ ( b ) [ 0 ] + " + " + Blockly . JavaScript . text . forceString _ ( a ) [ 0 ] ;
return [ a , Blockly . JavaScript . ORDER _ADDITION ] ; default : b = Array ( a . itemCount _ ) ; for ( var c = 0 ; c < a . itemCount _ ; c ++ ) b [ c ] = Blockly . JavaScript . valueToCode ( a , "ADD" + c , Blockly . JavaScript . ORDER _NONE ) || "''" ; a = "[" + b . join ( "," ) + "].join('')" ; return [ a , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } } ;
Blockly . JavaScript . text _append = function ( a ) { var b = Blockly . JavaScript . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . VARIABLE _CATEGORY _NAME ) ; a = Blockly . JavaScript . valueToCode ( a , "TEXT" , Blockly . JavaScript . ORDER _NONE ) || "''" ; return b + " += " + Blockly . JavaScript . text . forceString _ ( a ) [ 0 ] + ";\n" } ; Blockly . JavaScript . text _length = function ( a ) { return [ ( Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _MEMBER ) || "''" ) + ".length" , Blockly . JavaScript . ORDER _MEMBER ] } ;
Blockly . JavaScript . text _isEmpty = function ( a ) { return [ "!" + ( Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _MEMBER ) || "''" ) + ".length" , Blockly . JavaScript . ORDER _LOGICAL _NOT ] } ;
Blockly . JavaScript . text _indexOf = function ( a ) { var b = "FIRST" == a . getFieldValue ( "END" ) ? "indexOf" : "lastIndexOf" , c = Blockly . JavaScript . valueToCode ( a , "FIND" , Blockly . JavaScript . ORDER _NONE ) || "''" ; b = ( Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _MEMBER ) || "''" ) + "." + b + "(" + c + ")" ; return a . workspace . options . oneBasedIndex ? [ b + " + 1" , Blockly . JavaScript . ORDER _ADDITION ] : [ b , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . text _charAt = function ( a ) { var b = a . getFieldValue ( "WHERE" ) || "FROM_START" , c = Blockly . JavaScript . valueToCode ( a , "VALUE" , "RANDOM" == b ? Blockly . JavaScript . ORDER _NONE : Blockly . JavaScript . ORDER _MEMBER ) || "''" ; switch ( b ) { case "FIRST" : return [ c + ".charAt(0)" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; case "LAST" : return [ c + ".slice(-1)" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; case "FROM_START" : return a = Blockly . JavaScript . getAdjusted ( a , "AT" ) , [ c + ".charAt(" + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; case "FROM_END" : return a =
Blockly . JavaScript . getAdjusted ( a , "AT" , 1 , ! 0 ) , [ c + ".slice(" + a + ").charAt(0)" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; case "RANDOM" : return [ Blockly . JavaScript . provideFunction _ ( "textRandomLetter" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(text) {" , " var x = Math.floor(Math.random() * text.length);" , " return text[x];" , "}" ] ) + "(" + c + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } throw Error ( "Unhandled option (text_charAt)." ) ; } ;
Blockly . JavaScript . text . getIndex _ = function ( a , b , c ) { return "FIRST" == b ? "0" : "FROM_END" == b ? a + ".length - 1 - " + c : "LAST" == b ? a + ".length - 1" : c } ;
Blockly . JavaScript . text _getSubstring = function ( a ) { var b = a . getFieldValue ( "WHERE1" ) , c = a . getFieldValue ( "WHERE2" ) , d = "FROM_END" != b && "LAST" != b && "FROM_END" != c && "LAST" != c , e = Blockly . JavaScript . valueToCode ( a , "STRING" , d ? Blockly . JavaScript . ORDER _MEMBER : Blockly . JavaScript . ORDER _NONE ) || "''" ; if ( "FIRST" == b && "LAST" == c ) return [ e , Blockly . JavaScript . ORDER _NONE ] ; if ( e . match ( /^'?\w+'?$/ ) || d ) { switch ( b ) { case "FROM_START" : d = Blockly . JavaScript . getAdjusted ( a , "AT1" ) ; break ; case "FROM_END" : d = Blockly . JavaScript . getAdjusted ( a , "AT1" ,
1 , ! 1 , Blockly . JavaScript . ORDER _SUBTRACTION ) ; d = e + ".length - " + d ; break ; case "FIRST" : d = "0" ; break ; default : throw Error ( "Unhandled option (text_getSubstring)." ) ; } switch ( c ) { case "FROM_START" : a = Blockly . JavaScript . getAdjusted ( a , "AT2" , 1 ) ; break ; case "FROM_END" : a = Blockly . JavaScript . getAdjusted ( a , "AT2" , 0 , ! 1 , Blockly . JavaScript . ORDER _SUBTRACTION ) ; a = e + ".length - " + a ; break ; case "LAST" : a = e + ".length" ; break ; default : throw Error ( "Unhandled option (text_getSubstring)." ) ; } b = e + ".slice(" + d + ", " + a + ")" } else { d = Blockly . JavaScript . getAdjusted ( a ,
"AT1" ) ; a = Blockly . JavaScript . getAdjusted ( a , "AT2" ) ; var f = Blockly . JavaScript . text . getIndex _ , g = { FIRST : "First" , LAST : "Last" , FROM _START : "FromStart" , FROM _END : "FromEnd" } ; b = Blockly . JavaScript . provideFunction _ ( "subsequence" + g [ b ] + g [ c ] , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(sequence" + ( "FROM_END" == b || "FROM_START" == b ? ", at1" : "" ) + ( "FROM_END" == c || "FROM_START" == c ? ", at2" : "" ) + ") {" , " var start = " + f ( "sequence" , b , "at1" ) + ";" , " var end = " + f ( "sequence" , c , "at2" ) + " + 1;" , " return sequence.slice(start, end);" ,
"}" ] ) + "(" + e + ( "FROM_END" == b || "FROM_START" == b ? ", " + d : "" ) + ( "FROM_END" == c || "FROM_START" == c ? ", " + a : "" ) + ")" } return [ b , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . text _changeCase = function ( a ) { var b = { UPPERCASE : ".toUpperCase()" , LOWERCASE : ".toLowerCase()" , TITLECASE : null } [ a . getFieldValue ( "CASE" ) ] ; a = Blockly . JavaScript . valueToCode ( a , "TEXT" , b ? Blockly . JavaScript . ORDER _MEMBER : Blockly . JavaScript . ORDER _NONE ) || "''" ; return [ b ? a + b : Blockly . JavaScript . provideFunction _ ( "textToTitleCase" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(str) {" , " return str.replace(/\\S+/g," , " function(txt) {return txt[0].toUpperCase() + txt.substring(1).toLowerCase();});" ,
"}" ] ) + "(" + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . text _trim = function ( a ) { var b = { LEFT : ".replace(/^[\\s\\xa0]+/, '')" , RIGHT : ".replace(/[\\s\\xa0]+$/, '')" , BOTH : ".trim()" } [ a . getFieldValue ( "MODE" ) ] ; return [ ( Blockly . JavaScript . valueToCode ( a , "TEXT" , Blockly . JavaScript . ORDER _MEMBER ) || "''" ) + b , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . text _print = function ( a ) { return "window.alert(" + ( Blockly . JavaScript . valueToCode ( a , "TEXT" , Blockly . JavaScript . ORDER _NONE ) || "''" ) + ");\n" } ;
Blockly . JavaScript . text _prompt _ext = function ( a ) { var b = "window.prompt(" + ( a . getField ( "TEXT" ) ? Blockly . JavaScript . quote _ ( a . getFieldValue ( "TEXT" ) ) : Blockly . JavaScript . valueToCode ( a , "TEXT" , Blockly . JavaScript . ORDER _NONE ) || "''" ) + ")" ; "NUMBER" == a . getFieldValue ( "TYPE" ) && ( b = "Number(" + b + ")" ) ; return [ b , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . text _prompt = Blockly . JavaScript . text _prompt _ext ;
Blockly . JavaScript . text _count = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "TEXT" , Blockly . JavaScript . ORDER _NONE ) || "''" ; a = Blockly . JavaScript . valueToCode ( a , "SUB" , Blockly . JavaScript . ORDER _NONE ) || "''" ; return [ Blockly . JavaScript . provideFunction _ ( "textCount" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(haystack, needle) {" , " if (needle.length === 0) {" , " return haystack.length + 1;" , " } else {" , " return haystack.split(needle).length - 1;" , " }" , "}" ] ) + "(" + b + ", " + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ;
Blockly . JavaScript . text _replace = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "TEXT" , Blockly . JavaScript . ORDER _NONE ) || "''" , c = Blockly . JavaScript . valueToCode ( a , "FROM" , Blockly . JavaScript . ORDER _NONE ) || "''" ; a = Blockly . JavaScript . valueToCode ( a , "TO" , Blockly . JavaScript . ORDER _NONE ) || "''" ; return [ Blockly . JavaScript . provideFunction _ ( "textReplace" , [ "function " + Blockly . JavaScript . FUNCTION _NAME _PLACEHOLDER _ + "(haystack, needle, replacement) {" , ' needle = needle.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,"\\\\$1")' ,
' .replace(/\\x08/g,"\\\\x08");' , " return haystack.replace(new RegExp(needle, 'g'), replacement);" , "}" ] ) + "(" + b + ", " + c + ", " + a + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . text _reverse = function ( a ) { return [ ( Blockly . JavaScript . valueToCode ( a , "TEXT" , Blockly . JavaScript . ORDER _MEMBER ) || "''" ) + ".split('').reverse().join('')" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] } ; Blockly . JavaScript . variables = { } ; Blockly . JavaScript . variables _get = function ( a ) { return [ Blockly . JavaScript . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . VARIABLE _CATEGORY _NAME ) , Blockly . JavaScript . ORDER _ATOMIC ] } ; Blockly . JavaScript . variables _set = function ( a ) { var b = Blockly . JavaScript . valueToCode ( a , "VALUE" , Blockly . JavaScript . ORDER _ASSIGNMENT ) || "0" ; return Blockly . JavaScript . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . VARIABLE _CATEGORY _NAME ) + " = " + b + ";\n" } ; Blockly . JavaScript . variablesDynamic = { } ; Blockly . JavaScript . variables _get _dynamic = Blockly . JavaScript . variables _get ; Blockly . JavaScript . variables _set _dynamic = Blockly . JavaScript . variables _set ;
return Blockly . JavaScript ;
} ) ) ;
//# sourceMappingURL=javascript_compressed.js.map