diff --git a/core/field_number.js b/core/field_number.js index b580d737a..cd773cb87 100644 --- a/core/field_number.js +++ b/core/field_number.js @@ -44,6 +44,7 @@ goog.require('goog.math'); */ Blockly.FieldNumber = function(value, opt_min, opt_max, opt_precision, opt_validator) { + value = String(value); Blockly.FieldNumber.superClass_.constructor.call(this, value, opt_validator); this.setConstraints(opt_min, opt_max, opt_precision); }; diff --git a/demos/blockfactory/blocks.js b/demos/blockfactory/blocks.js index 012c76fe0..db14b1d90 100644 --- a/demos/blockfactory/blocks.js +++ b/demos/blockfactory/blocks.js @@ -243,6 +243,32 @@ Blockly.Blocks['field_input'] = { } }; +Blockly.Blocks['field_number'] = { + // Numeric input. + init: function() { + this.setColour(160); + this.appendDummyInput() + .appendField('numeric input') + .appendField(new Blockly.FieldNumber(0), 'VALUE') + .appendField(',') + .appendField(new Blockly.FieldTextInput('NAME'), 'FIELDNAME'); + this.appendDummyInput() + .appendField('min') + .appendField(new Blockly.FieldNumber(-Infinity), 'MIN') + .appendField('max') + .appendField(new Blockly.FieldNumber(Infinity), 'MAX') + .appendField('precision') + .appendField(new Blockly.FieldNumber(0, 0), 'PRECISION'); + this.setPreviousStatement(true, 'Field'); + this.setNextStatement(true, 'Field'); + this.setTooltip('An input field for the user to enter a number.'); + this.setHelpUrl('https://www.youtube.com/watch?v=s2_xaEvcVI0#t=319'); + }, + onchange: function() { + fieldNameCheck(this); + } +}; + Blockly.Blocks['field_angle'] = { // Angle input. init: function() { diff --git a/demos/blockfactory/factory.js b/demos/blockfactory/factory.js index 1bfdf6ce9..4af5ff28a 100644 --- a/demos/blockfactory/factory.js +++ b/demos/blockfactory/factory.js @@ -309,10 +309,31 @@ function getFieldsJs_(block) { escapeString(block.getFieldValue('TEXT')) + '), ' + escapeString(block.getFieldValue('FIELDNAME'))); break; + case 'field_number': + // Result: new Blockly.FieldNumber(10, 0, 100, 1), 'NUMBER' + var args = [ + Number(block.getFieldValue('VALUE')), + Number(block.getFieldValue('MIN')), + Number(block.getFieldValue('MAX')), + Number(block.getFieldValue('PRECISION')) + ]; + // Remove any trailing arguments that aren't needed. + if (args[3] == 0) { + args.pop(); + if (args[2] == Infinity) { + args.pop(); + if (args[1] == -Infinity) { + args.pop(); + } + } + } + fields.push('new Blockly.FieldNumber(' + args.join(', ') + '), ' + + escapeString(block.getFieldValue('FIELDNAME'))); + break; case 'field_angle': // Result: new Blockly.FieldAngle(90), 'ANGLE' fields.push('new Blockly.FieldAngle(' + - parseFloat(block.getFieldValue('ANGLE')) + '), ' + + Number(block.getFieldValue('ANGLE')) + '), ' + escapeString(block.getFieldValue('FIELDNAME'))); break; case 'field_checkbox': @@ -354,7 +375,7 @@ function getFieldsJs_(block) { } break; case 'field_image': - // Result: new Blockly.FieldImage('http://...', 80, 60) + // Result: new Blockly.FieldImage('http://...', 80, 60, '*') var src = escapeString(block.getFieldValue('SRC')); var width = Number(block.getFieldValue('WIDTH')); var height = Number(block.getFieldValue('HEIGHT')); @@ -391,6 +412,26 @@ function getFieldsJson_(block) { text: block.getFieldValue('TEXT') }); break; + case 'field_number': + var obj = { + type: block.type, + name: block.getFieldValue('FIELDNAME'), + value: parseFloat(block.getFieldValue('VALUE')) + }; + var min = parseFloat(block.getFieldValue('MIN')); + if (min > -Infinity) { + obj.min = min; + } + var max = parseFloat(block.getFieldValue('MAX')); + if (max < Infinity) { + obj.max = max; + } + var precision = parseFloat(block.getFieldValue('PRECISION')); + if (precision) { + obj.precision = precision; + } + fields.push(obj); + break; case 'field_angle': fields.push({ type: block.type, @@ -562,6 +603,9 @@ function updateGenerator(block) { } else if (field instanceof Blockly.FieldDropdown) { code.push(makeVar('dropdown', name) + " = block.getFieldValue('" + name + "');"); + } else if (field instanceof Blockly.FieldNumber) { + code.push(makeVar('number', name) + + " = block.getFieldValue('" + name + "');"); } else if (field instanceof Blockly.FieldTextInput) { code.push(makeVar('text', name) + " = block.getFieldValue('" + name + "');"); diff --git a/demos/blockfactory/index.html b/demos/blockfactory/index.html index 0377bc587..ce87f88f8 100644 --- a/demos/blockfactory/index.html +++ b/demos/blockfactory/index.html @@ -192,6 +192,7 @@ +