mirror of
https://github.com/google/blockly.git
synced 2026-01-09 18:10:08 +01:00
Add field_number to Block Factory.
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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 + "');");
|
||||
|
||||
@@ -192,6 +192,7 @@
|
||||
<category name="Field">
|
||||
<block type="field_static"></block>
|
||||
<block type="field_input"></block>
|
||||
<block type="field_number"></block>
|
||||
<block type="field_angle"></block>
|
||||
<block type="field_dropdown"></block>
|
||||
<block type="field_checkbox"></block>
|
||||
|
||||
Reference in New Issue
Block a user