Adding controls_ifelse block (#722)

Adding controls_ifelse, an if/else block that is loaded from JSON and does not use mutators. This gives "else" capability to Android & iOS implementations, which don't support JavaScript mutators.

Added this block to the playground simple toolbox and all generators.
This commit is contained in:
Andrew n marshall
2016-10-31 11:00:39 -07:00
committed by GitHub
parent 0156f2e103
commit 72ff6d9ead
8 changed files with 115 additions and 63 deletions

View File

@@ -32,23 +32,26 @@ goog.require('Blockly.Dart');
Blockly.Dart['controls_if'] = function(block) {
// If/elseif/else condition.
var n = 0;
var argument = Blockly.Dart.valueToCode(block, 'IF' + n,
var code = '', branchCode, conditionCode;
do {
conditionCode = Blockly.Dart.valueToCode(block, 'IF' + n,
Blockly.Dart.ORDER_NONE) || 'false';
var branch = Blockly.Dart.statementToCode(block, 'DO' + n);
var code = 'if (' + argument + ') {\n' + branch + '}';
for (n = 1; n <= block.elseifCount_; n++) {
argument = Blockly.Dart.valueToCode(block, 'IF' + n,
Blockly.Dart.ORDER_NONE) || 'false';
branch = Blockly.Dart.statementToCode(block, 'DO' + n);
code += ' else if (' + argument + ') {\n' + branch + '}';
}
if (block.elseCount_) {
branch = Blockly.Dart.statementToCode(block, 'ELSE');
code += ' else {\n' + branch + '}';
branchCode = Blockly.Dart.statementToCode(block, 'DO' + n);
code += (n > 0 ? 'else ' : '') +
'if (' + conditionCode + ') {\n' + branchCode + '}';
++n;
} while (block.getInput('IF' + n));
if (block.getInput('ELSE')) {
branchCode = Blockly.Dart.statementToCode(block, 'ELSE');
code += ' else {\n' + branchCode + '}';
}
return code + '\n';
};
Blockly.Dart['controls_ifelse'] = Blockly.Dart['controls_if'];
Blockly.Dart['logic_compare'] = function(block) {
// Comparison operator.
var OPERATORS = {

View File

@@ -32,23 +32,26 @@ goog.require('Blockly.JavaScript');
Blockly.JavaScript['controls_if'] = function(block) {
// If/elseif/else condition.
var n = 0;
var argument = Blockly.JavaScript.valueToCode(block, 'IF' + n,
var code = '', branchCode, conditionCode;
do {
conditionCode = Blockly.JavaScript.valueToCode(block, 'IF' + n,
Blockly.JavaScript.ORDER_NONE) || 'false';
var branch = Blockly.JavaScript.statementToCode(block, 'DO' + n);
var code = 'if (' + argument + ') {\n' + branch + '}';
for (n = 1; n <= block.elseifCount_; n++) {
argument = Blockly.JavaScript.valueToCode(block, 'IF' + n,
Blockly.JavaScript.ORDER_NONE) || 'false';
branch = Blockly.JavaScript.statementToCode(block, 'DO' + n);
code += ' else if (' + argument + ') {\n' + branch + '}';
}
if (block.elseCount_) {
branch = Blockly.JavaScript.statementToCode(block, 'ELSE');
code += ' else {\n' + branch + '}';
branchCode = Blockly.JavaScript.statementToCode(block, 'DO' + n);
code += (n > 0 ? ' else ' : '') +
'if (' + conditionCode + ') {\n' + branchCode + '}';
++n;
} while (block.getInput('IF' + n));
if (block.getInput('ELSE')) {
branchCode = Blockly.JavaScript.statementToCode(block, 'ELSE');
code += ' else {\n' + branchCode + '}';
}
return code + '\n';
};
Blockly.JavaScript['controls_ifelse'] = Blockly.JavaScript['controls_if'];
Blockly.JavaScript['logic_compare'] = function(block) {
// Comparison operator.
var OPERATORS = {

View File

@@ -32,23 +32,26 @@ goog.require('Blockly.Lua');
Blockly.Lua['controls_if'] = function(block) {
// If/elseif/else condition.
var n = 0;
var argument = Blockly.Lua.valueToCode(block, 'IF' + n,
var code = '', branchCode, conditionCode;
do {
conditionCode = Blockly.Lua.valueToCode(block, 'IF' + n,
Blockly.Lua.ORDER_NONE) || 'false';
var branch = Blockly.Lua.statementToCode(block, 'DO' + n);
var code = 'if ' + argument + ' then\n' + branch;
for (n = 1; n <= block.elseifCount_; n++) {
argument = Blockly.Lua.valueToCode(block, 'IF' + n,
Blockly.Lua.ORDER_NONE) || 'false';
branch = Blockly.Lua.statementToCode(block, 'DO' + n);
code += ' elseif ' + argument + ' then\n' + branch;
}
if (block.elseCount_) {
branch = Blockly.Lua.statementToCode(block, 'ELSE');
code += ' else\n' + branch;
branchCode = Blockly.Lua.statementToCode(block, 'DO' + n);
code += (n > 0 ? 'else' : '') +
'if ' + conditionCode + ' then\n' + branchCode;
++n;
} while (block.getInput('IF' + n));
if (block.getInput('ELSE')) {
branchCode = Blockly.Lua.statementToCode(block, 'ELSE');
code += 'else\n' + branchCode;
}
return code + 'end\n';
};
Blockly.Lua['controls_ifelse'] = Blockly.Lua['controls_if'];
Blockly.Lua['logic_compare'] = function(block) {
// Comparison operator.
var OPERATORS = {

View File

@@ -32,23 +32,26 @@ goog.require('Blockly.PHP');
Blockly.PHP['controls_if'] = function(block) {
// If/elseif/else condition.
var n = 0;
var argument = Blockly.PHP.valueToCode(block, 'IF' + n,
var code = '', branchCode, conditionCode;
do {
conditionCode = Blockly.PHP.valueToCode(block, 'IF' + n,
Blockly.PHP.ORDER_NONE) || 'false';
var branch = Blockly.PHP.statementToCode(block, 'DO' + n);
var code = 'if (' + argument + ') {\n' + branch + '}';
for (n = 1; n <= block.elseifCount_; n++) {
argument = Blockly.PHP.valueToCode(block, 'IF' + n,
Blockly.PHP.ORDER_NONE) || 'false';
branch = Blockly.PHP.statementToCode(block, 'DO' + n);
code += ' else if (' + argument + ') {\n' + branch + '}';
}
if (block.elseCount_) {
branch = Blockly.PHP.statementToCode(block, 'ELSE');
code += ' else {\n' + branch + '}';
branchCode = Blockly.PHP.statementToCode(block, 'DO' + n);
code += (n > 0 ? ' else ' : '') +
'if (' + conditionCode + ') {\n' + branchCode + '}';
++n;
} while (block.getInput('IF' + n));
if (block.getInput('ELSE')) {
branchCode = Blockly.PHP.statementToCode(block, 'ELSE');
code += ' else {\n' + branchCode + '}';
}
return code + '\n';
};
Blockly.PHP['controls_ifelse'] = Blockly.PHP['controls_if'];
Blockly.PHP['logic_compare'] = function(block) {
// Comparison operator.
var OPERATORS = {

View File

@@ -32,26 +32,27 @@ goog.require('Blockly.Python');
Blockly.Python['controls_if'] = function(block) {
// If/elseif/else condition.
var n = 0;
var argument = Blockly.Python.valueToCode(block, 'IF' + n,
Blockly.Python.ORDER_NONE) || 'False';
var branch = Blockly.Python.statementToCode(block, 'DO' + n) ||
Blockly.Python.PASS;
var code = 'if ' + argument + ':\n' + branch;
for (n = 1; n <= block.elseifCount_; n++) {
argument = Blockly.Python.valueToCode(block, 'IF' + n,
Blockly.Python.ORDER_NONE) || 'False';
branch = Blockly.Python.statementToCode(block, 'DO' + n) ||
var code = '', branchCode, conditionCode;
do {
conditionCode = Blockly.Python.valueToCode(block, 'IF' + n,
Blockly.Python.ORDER_NONE) || 'false';
branchCode = Blockly.Python.statementToCode(block, 'DO' + n) ||
Blockly.Python.PASS;
code += 'elif ' + argument + ':\n' + branch;
}
if (block.elseCount_) {
branch = Blockly.Python.statementToCode(block, 'ELSE') ||
code += (n == 0 ? 'if ' : 'elif ' ) + conditionCode + ':\n' + branchCode;
++n;
} while (block.getInput('IF' + n));
if (block.getInput('ELSE')) {
branchCode = Blockly.Python.statementToCode(block, 'ELSE') ||
Blockly.Python.PASS;
code += 'else:\n' + branch;
code += 'else:\n' + branchCode;
}
return code;
};
Blockly.Python['controls_ifelse'] = Blockly.Python['controls_if'];
Blockly.Python['logic_compare'] = function(block) {
// Comparison operator.
var OPERATORS = {