/** * @fileoverview FTC robot blocks related to Temperature. * @author lizlooney@google.com (Liz Looney) */ // The following are generated dynamically in HardwareUtil.fetchJavaScriptForHardware(): // temperatureIdentifier // The following are defined in vars.js: // createNonEditableField // getPropertyColor // functionColor Blockly.Blocks['temperature_getProperty'] = { init: function() { var PROPERTY_CHOICES = [ ['TempUnit', 'TempUnit'], ['Temperature', 'Temperature'], ['AcquisitionTime', 'AcquisitionTime'], ]; this.setOutput(true); // no type, for compatibility this.appendDummyInput() .appendField(createNonEditableField('Temperature')) .appendField('.') .appendField(new Blockly.FieldDropdown(PROPERTY_CHOICES), 'PROP'); this.appendValueInput('TEMPERATURE').setCheck('Temperature') .appendField('temperature') .setAlign(Blockly.ALIGN_RIGHT); this.setColour(getPropertyColor); // Assign 'this' to a variable for use in the tooltip closure below. var thisBlock = this; var TOOLTIPS = [ ['TempUnit', 'The TempUnit of the given Temperature object.'], ['Temperature', 'The Temperature of the given Temperature object.'], ['AcquisitionTime', 'The AcquisitionTime of the given Temperature object.'], ]; this.setTooltip(function() { var key = thisBlock.getFieldValue('PROP'); for (var i = 0; i < TOOLTIPS.length; i++) { if (TOOLTIPS[i][0] == key) { return TOOLTIPS[i][1]; } } return ''; }); } }; Blockly.JavaScript['temperature_getProperty'] = function(block) { var property = block.getFieldValue('PROP'); var temperature = Blockly.JavaScript.valueToCode( block, 'TEMPERATURE', Blockly.JavaScript.ORDER_NONE); var code = temperatureIdentifier + '.get' + property + '(' + temperature + ')'; return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL]; }; Blockly.Blocks['temperature_getProperty_TempUnit'] = { init: function() { var PROPERTY_CHOICES = [ ['TempUnit', 'TempUnit'], ]; this.setOutput(true, 'TempUnit'); this.appendDummyInput() .appendField(createNonEditableField('Temperature')) .appendField('.') .appendField(new Blockly.FieldDropdown(PROPERTY_CHOICES), 'PROP'); this.appendValueInput('TEMPERATURE').setCheck('Temperature') .appendField('temperature') .setAlign(Blockly.ALIGN_RIGHT); this.setColour(getPropertyColor); // Assign 'this' to a variable for use in the tooltip closure below. var thisBlock = this; var TOOLTIPS = [ ['TempUnit', 'The TempUnit of the given Temperature object.'], ]; this.setTooltip(function() { var key = thisBlock.getFieldValue('PROP'); for (var i = 0; i < TOOLTIPS.length; i++) { if (TOOLTIPS[i][0] == key) { return TOOLTIPS[i][1]; } } return ''; }); } }; Blockly.JavaScript['temperature_getProperty_TempUnit'] = Blockly.JavaScript['temperature_getProperty']; Blockly.Blocks['temperature_getProperty_Number'] = { init: function() { var PROPERTY_CHOICES = [ ['Temperature', 'Temperature'], ['AcquisitionTime', 'AcquisitionTime'], ]; this.setOutput(true, 'Number'); this.appendDummyInput() .appendField(createNonEditableField('Temperature')) .appendField('.') .appendField(new Blockly.FieldDropdown(PROPERTY_CHOICES), 'PROP'); this.appendValueInput('TEMPERATURE').setCheck('Temperature') .appendField('temperature') .setAlign(Blockly.ALIGN_RIGHT); this.setColour(getPropertyColor); // Assign 'this' to a variable for use in the tooltip closure below. var thisBlock = this; var TOOLTIPS = [ ['Temperature', 'The Temperature of the given Temperature object.'], ['AcquisitionTime', 'The AcquisitionTime of the given Temperature object.'], ]; this.setTooltip(function() { var key = thisBlock.getFieldValue('PROP'); for (var i = 0; i < TOOLTIPS.length; i++) { if (TOOLTIPS[i][0] == key) { return TOOLTIPS[i][1]; } } return ''; }); } }; Blockly.JavaScript['temperature_getProperty_Number'] = Blockly.JavaScript['temperature_getProperty']; // Functions Blockly.Blocks['temperature_create'] = { init: function() { this.setOutput(true, 'Temperature'); this.appendDummyInput() .appendField('new') .appendField(createNonEditableField('Temperature')); this.setColour(functionColor); this.setTooltip('Create a new Temperature object.'); } }; Blockly.JavaScript['temperature_create'] = function(block) { var code = temperatureIdentifier + '.create()'; return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL]; }; Blockly.Blocks['temperature_create_withArgs'] = { init: function() { this.setOutput(true, 'Temperature'); this.appendDummyInput() .appendField('new') .appendField(createNonEditableField('Temperature')); this.appendValueInput('TEMP_UNIT').setCheck('TempUnit') .appendField('tempUnit') .setAlign(Blockly.ALIGN_RIGHT); this.appendValueInput('TEMPERATURE').setCheck('Number') .appendField('temperature') .setAlign(Blockly.ALIGN_RIGHT); this.appendValueInput('ACQUISITION_TIME').setCheck('Number') .appendField('acquisitionTime') .setAlign(Blockly.ALIGN_RIGHT); this.setColour(functionColor); this.setTooltip('Create a new Temperature object.'); } }; Blockly.JavaScript['temperature_create_withArgs'] = function(block) { var tempUnit = Blockly.JavaScript.valueToCode( block, 'TEMP_UNIT', Blockly.JavaScript.ORDER_COMMA); var temperature = Blockly.JavaScript.valueToCode( block, 'TEMPERATURE', Blockly.JavaScript.ORDER_COMMA); var acquisitionTime = Blockly.JavaScript.valueToCode( block, 'ACQUISITION_TIME', Blockly.JavaScript.ORDER_COMMA); var code = temperatureIdentifier + '.create_withArgs(' + tempUnit + ', ' + temperature + ', ' + acquisitionTime + ')'; return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL]; }; Blockly.Blocks['temperature_toTempUnit'] = { init: function() { this.setOutput(true, 'Temperature'); this.appendDummyInput() .appendField('call') .appendField(createNonEditableField('Temperature')) .appendField('.') .appendField(createNonEditableField('toTempUnit')); this.appendValueInput('TEMPERATURE').setCheck('Temperature') .appendField('temperature') .setAlign(Blockly.ALIGN_RIGHT); this.appendValueInput('TEMP_UNIT').setCheck('TempUnit') .appendField('tempUnit') .setAlign(Blockly.ALIGN_RIGHT); this.setColour(functionColor); this.setTooltip('Returns a new Temperature object created from the given Temperature ' + 'object and temp unit.'); } }; Blockly.JavaScript['temperature_toTempUnit'] = function(block) { var temperature = Blockly.JavaScript.valueToCode( block, 'TEMPERATURE', Blockly.JavaScript.ORDER_COMMA); var tempUnit = Blockly.JavaScript.valueToCode( block, 'TEMP_UNIT', Blockly.JavaScript.ORDER_COMMA); var code = temperatureIdentifier + '.toTempUnit(' + temperature + ', ' + tempUnit + ')'; return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL]; };