mirror of
https://github.com/google/blockly.git
synced 2026-01-09 18:10:08 +01:00
Update to latest version.
This commit is contained in:
@@ -52,12 +52,12 @@ Blockly.JavaScript['controls_if'] = function(block) {
|
||||
Blockly.JavaScript['logic_compare'] = function(block) {
|
||||
// Comparison operator.
|
||||
var OPERATORS = {
|
||||
EQ: '==',
|
||||
NEQ: '!=',
|
||||
LT: '<',
|
||||
LTE: '<=',
|
||||
GT: '>',
|
||||
GTE: '>='
|
||||
'EQ': '==',
|
||||
'NEQ': '!=',
|
||||
'LT': '<',
|
||||
'LTE': '<=',
|
||||
'GT': '>',
|
||||
'GTE': '>='
|
||||
};
|
||||
var operator = OPERATORS[block.getFieldValue('OP')];
|
||||
var order = (operator == '==' || operator == '!=') ?
|
||||
@@ -121,6 +121,6 @@ Blockly.JavaScript['logic_ternary'] = function(block) {
|
||||
Blockly.JavaScript.ORDER_CONDITIONAL) || 'null';
|
||||
var value_else = Blockly.JavaScript.valueToCode(block, 'ELSE',
|
||||
Blockly.JavaScript.ORDER_CONDITIONAL) || 'null';
|
||||
var code = value_if + ' ? ' + value_then + ' : ' + value_else
|
||||
var code = value_if + ' ? ' + value_then + ' : ' + value_else;
|
||||
return [code, Blockly.JavaScript.ORDER_CONDITIONAL];
|
||||
};
|
||||
|
||||
@@ -33,10 +33,7 @@ Blockly.JavaScript['controls_repeat'] = function(block) {
|
||||
// Repeat n times (internal number).
|
||||
var repeats = Number(block.getFieldValue('TIMES'));
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
if (Blockly.JavaScript.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.JavaScript.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + block.id + '\'') + branch;
|
||||
}
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
var loopVar = Blockly.JavaScript.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
var code = 'for (var ' + loopVar + ' = 0; ' +
|
||||
@@ -51,10 +48,7 @@ Blockly.JavaScript['controls_repeat_ext'] = function(block) {
|
||||
var repeats = Blockly.JavaScript.valueToCode(block, 'TIMES',
|
||||
Blockly.JavaScript.ORDER_ASSIGNMENT) || '0';
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
if (Blockly.JavaScript.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.JavaScript.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + block.id + '\'') + branch;
|
||||
}
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
var code = '';
|
||||
var loopVar = Blockly.JavaScript.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
@@ -78,10 +72,7 @@ Blockly.JavaScript['controls_whileUntil'] = function(block) {
|
||||
until ? Blockly.JavaScript.ORDER_LOGICAL_NOT :
|
||||
Blockly.JavaScript.ORDER_NONE) || 'false';
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
if (Blockly.JavaScript.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.JavaScript.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + block.id + '\'') + branch;
|
||||
}
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
if (until) {
|
||||
argument0 = '!' + argument0;
|
||||
}
|
||||
@@ -99,10 +90,7 @@ Blockly.JavaScript['controls_for'] = function(block) {
|
||||
var increment = Blockly.JavaScript.valueToCode(block, 'BY',
|
||||
Blockly.JavaScript.ORDER_ASSIGNMENT) || '1';
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
if (Blockly.JavaScript.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.JavaScript.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + block.id + '\'') + branch;
|
||||
}
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
var code;
|
||||
if (Blockly.isNumber(argument0) && Blockly.isNumber(argument1) &&
|
||||
Blockly.isNumber(increment)) {
|
||||
@@ -144,10 +132,10 @@ Blockly.JavaScript['controls_for'] = function(block) {
|
||||
code += 'Math.abs(' + increment + ');\n';
|
||||
}
|
||||
code += 'if (' + startVar + ' > ' + endVar + ') {\n';
|
||||
code += ' ' + incVar + ' = -' + incVar +';\n';
|
||||
code += Blockly.JavaScript.INDENT + incVar + ' = -' + incVar + ';\n';
|
||||
code += '}\n';
|
||||
code += 'for (' + variable0 + ' = ' + startVar + ';\n' +
|
||||
' ' + incVar + ' >= 0 ? ' +
|
||||
' ' + incVar + ' >= 0 ? ' +
|
||||
variable0 + ' <= ' + endVar + ' : ' +
|
||||
variable0 + ' >= ' + endVar + ';\n' +
|
||||
' ' + variable0 + ' += ' + incVar + ') {\n' +
|
||||
@@ -163,14 +151,11 @@ Blockly.JavaScript['controls_forEach'] = function(block) {
|
||||
var argument0 = Blockly.JavaScript.valueToCode(block, 'LIST',
|
||||
Blockly.JavaScript.ORDER_ASSIGNMENT) || '[]';
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
if (Blockly.JavaScript.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.JavaScript.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + block.id + '\'') + branch;
|
||||
}
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
var indexVar = Blockly.JavaScript.variableDB_.getDistinctName(
|
||||
variable0 + '_index', Blockly.Variables.NAME_TYPE);
|
||||
branch = ' ' + variable0 + ' = ' + argument0 + '[' + indexVar + '];\n' +
|
||||
branch;
|
||||
branch = Blockly.JavaScript.INDENT + variable0 + ' = ' +
|
||||
argument0 + '[' + indexVar + '];\n' + branch;
|
||||
var code = 'for (var ' + indexVar + ' in ' + argument0 + ') {\n' +
|
||||
branch + '}\n';
|
||||
return code;
|
||||
|
||||
@@ -38,11 +38,11 @@ Blockly.JavaScript['math_number'] = function(block) {
|
||||
Blockly.JavaScript['math_arithmetic'] = function(block) {
|
||||
// Basic arithmetic operators, and power.
|
||||
var OPERATORS = {
|
||||
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_COMMA] // Handle power separately.
|
||||
'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_COMMA] // Handle power separately.
|
||||
};
|
||||
var tuple = OPERATORS[block.getFieldValue('OP')];
|
||||
var operator = tuple[0];
|
||||
@@ -146,12 +146,13 @@ Blockly.JavaScript['math_single'] = function(block) {
|
||||
Blockly.JavaScript['math_constant'] = function(block) {
|
||||
// Constants: PI, E, the Golden Ratio, sqrt(2), 1/sqrt(2), INFINITY.
|
||||
var CONSTANTS = {
|
||||
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]
|
||||
'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]
|
||||
};
|
||||
return CONSTANTS[block.getFieldValue('CONSTANT')];
|
||||
};
|
||||
|
||||
@@ -34,6 +34,11 @@ Blockly.JavaScript['procedures_defreturn'] = function(block) {
|
||||
var funcName = Blockly.JavaScript.variableDB_.getName(
|
||||
block.getFieldValue('NAME'), Blockly.Procedures.NAME_TYPE);
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'STACK');
|
||||
if (Blockly.JavaScript.STATEMENT_PREFIX) {
|
||||
branch = Blockly.JavaScript.prefixLines(
|
||||
Blockly.JavaScript.STATEMENT_PREFIX.replace(/%1/g,
|
||||
'\'' + block.id + '\''), Blockly.JavaScript.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.JavaScript.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.JavaScript.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + block.id + '\'') + branch;
|
||||
|
||||
@@ -185,9 +185,9 @@ Blockly.JavaScript['text_getSubstring'] = function(block) {
|
||||
Blockly.JavaScript['text_changeCase'] = function(block) {
|
||||
// Change capitalization.
|
||||
var OPERATORS = {
|
||||
UPPERCASE: '.toUpperCase()',
|
||||
LOWERCASE: '.toLowerCase()',
|
||||
TITLECASE: null
|
||||
'UPPERCASE': '.toUpperCase()',
|
||||
'LOWERCASE': '.toLowerCase()',
|
||||
'TITLECASE': null
|
||||
};
|
||||
var operator = OPERATORS[block.getFieldValue('CASE')];
|
||||
var code;
|
||||
@@ -200,7 +200,8 @@ Blockly.JavaScript['text_changeCase'] = function(block) {
|
||||
// Title case is not a native JavaScript function. Define one.
|
||||
var functionName = Blockly.JavaScript.provideFunction_(
|
||||
'text_toTitleCase',
|
||||
[ 'function ' + Blockly.JavaScript.FUNCTION_NAME_PLACEHOLDER_ + '(str) {',
|
||||
[ 'function ' +
|
||||
Blockly.JavaScript.FUNCTION_NAME_PLACEHOLDER_ + '(str) {',
|
||||
' return str.replace(/\\S+/g,',
|
||||
' function(txt) {return txt[0].toUpperCase() + ' +
|
||||
'txt.substring(1).toLowerCase();});',
|
||||
@@ -215,9 +216,9 @@ Blockly.JavaScript['text_changeCase'] = function(block) {
|
||||
Blockly.JavaScript['text_trim'] = function(block) {
|
||||
// Trim spaces.
|
||||
var OPERATORS = {
|
||||
LEFT: '.trimLeft()',
|
||||
RIGHT: '.trimRight()',
|
||||
BOTH: '.trim()'
|
||||
'LEFT': '.trimLeft()',
|
||||
'RIGHT': '.trimRight()',
|
||||
'BOTH': '.trim()'
|
||||
};
|
||||
var operator = OPERATORS[block.getFieldValue('MODE')];
|
||||
var argument0 = Blockly.JavaScript.valueToCode(block, 'TEXT',
|
||||
@@ -233,7 +234,7 @@ Blockly.JavaScript['text_print'] = function(block) {
|
||||
};
|
||||
|
||||
Blockly.JavaScript['text_prompt'] = function(block) {
|
||||
// Prompt function.
|
||||
// Prompt function (internal message).
|
||||
var msg = Blockly.JavaScript.quote_(block.getFieldValue('TEXT'));
|
||||
var code = 'window.prompt(' + msg + ')';
|
||||
var toNumber = block.getFieldValue('TYPE') == 'NUMBER';
|
||||
@@ -242,3 +243,15 @@ Blockly.JavaScript['text_prompt'] = function(block) {
|
||||
}
|
||||
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
|
||||
};
|
||||
|
||||
Blockly.JavaScript['text_prompt_ext'] = function(block) {
|
||||
// Prompt function (external message).
|
||||
var msg = Blockly.JavaScript.valueToCode(block, 'TEXT',
|
||||
Blockly.JavaScript.ORDER_NONE) || '\'\'';
|
||||
var code = 'window.prompt(' + msg + ')';
|
||||
var toNumber = block.getFieldValue('TYPE') == 'NUMBER';
|
||||
if (toNumber) {
|
||||
code = 'parseFloat(' + code + ')';
|
||||
}
|
||||
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user