in generators/javascript/lists.js [83:160]
Blockly.JavaScript['lists_getIndex'] = function(block) {
// Get element at index.
// Note: Until January 2013 this block did not have MODE or WHERE inputs.
var mode = block.getFieldValue('MODE') || 'GET';
var where = block.getFieldValue('WHERE') || 'FROM_START';
var listOrder = (where == 'RANDOM') ? Blockly.JavaScript.ORDER_NONE :
Blockly.JavaScript.ORDER_MEMBER;
var list = Blockly.JavaScript.valueToCode(block, 'VALUE', listOrder) || '[]';
switch (where) {
case ('FIRST'):
if (mode == 'GET') {
var code = list + '[0]';
return [code, Blockly.JavaScript.ORDER_MEMBER];
} else if (mode == 'GET_REMOVE') {
var code = list + '.shift()';
return [code, Blockly.JavaScript.ORDER_MEMBER];
} else if (mode == 'REMOVE') {
return list + '.shift();\n';
}
break;
case ('LAST'):
if (mode == 'GET') {
var code = list + '.slice(-1)[0]';
return [code, Blockly.JavaScript.ORDER_MEMBER];
} else if (mode == 'GET_REMOVE') {
var code = list + '.pop()';
return [code, Blockly.JavaScript.ORDER_MEMBER];
} else if (mode == 'REMOVE') {
return list + '.pop();\n';
}
break;
case ('FROM_START'):
var at = Blockly.JavaScript.getAdjusted(block, 'AT');
if (mode == 'GET') {
var code = list + '[' + at + ']';
return [code, Blockly.JavaScript.ORDER_MEMBER];
} else if (mode == 'GET_REMOVE') {
var code = list + '.splice(' + at + ', 1)[0]';
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
} else if (mode == 'REMOVE') {
return list + '.splice(' + at + ', 1);\n';
}
break;
case ('FROM_END'):
var at = Blockly.JavaScript.getAdjusted(block, 'AT', 1, true);
if (mode == 'GET') {
var code = list + '.slice(' + at + ')[0]';
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
} else if (mode == 'GET_REMOVE') {
var code = list + '.splice(' + at + ', 1)[0]';
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
} else if (mode == 'REMOVE') {
return list + '.splice(' + at + ', 1);';
}
break;
case ('RANDOM'):
var functionName = 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];',
' }',
'}']);
code = functionName + '(' + list + ', ' + (mode != 'GET') + ')';
if (mode == 'GET' || mode == 'GET_REMOVE') {
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
} else if (mode == 'REMOVE') {
return code + ';\n';
}
break;
}
throw Error('Unhandled combination (lists_getIndex).');
};