mirror of
https://github.com/google/blockly.git
synced 2026-01-11 02:47:09 +01:00
Add optional alt prop for JSON.
This commit is contained in:
@@ -1058,12 +1058,12 @@ Blockly.Block.prototype.getInputsInline=function(){if(void 0!=this.inputsInline)
|
||||
Blockly.Block.prototype.getInheritedDisabled=function(){for(var a=this;;){a=a.getSurroundParent();if(!a)return!1;if(a.disabled)return!0}};Blockly.Block.prototype.isCollapsed=function(){return this.collapsed_};Blockly.Block.prototype.setCollapsed=function(a){this.collapsed_=a};
|
||||
Blockly.Block.prototype.toString=function(a){var b=[];if(this.collapsed_)b.push(this.getInput("_TEMP_COLLAPSED_INPUT").fieldRow[0].text_);else for(var c=0,d;d=this.inputList[c];c++){for(var e=0,f;f=d.fieldRow[e];e++)b.push(f.getText());d.connection&&((d=d.connection.targetBlock())?b.push(d.toString()):b.push("?"))}b=goog.string.trim(b.join(" "))||"???";a&&(b=goog.string.truncate(b,a));return b};Blockly.Block.prototype.appendValueInput=function(a){return this.appendInput_(Blockly.INPUT_VALUE,a)};
|
||||
Blockly.Block.prototype.appendStatementInput=function(a){return this.appendInput_(Blockly.NEXT_STATEMENT,a)};Blockly.Block.prototype.appendDummyInput=function(a){return this.appendInput_(Blockly.DUMMY_INPUT,a||"")};
|
||||
Blockly.Block.prototype.jsonInit=function(a){goog.asserts.assert(void 0==a.output||void 0==a.previousStatement,"Must not have both an output and a previousStatement.");this.setColour(a.colour);for(var b=0;a["message"+b]&&a["args"+b];)this.interpolate_(a["message"+b],a["args"+b],a["lastDummyAlign"+b]),b++;void 0!==a.inputsInline&&this.setInputsInline(a.inputsInline);void 0!==a.output&&this.setOutput(!0,a.output);void 0!==a.previousStatement&&this.setPreviousStatement(!0,a.previousStatement);void 0!==
|
||||
Blockly.Block.prototype.jsonInit=function(a){goog.asserts.assert(void 0==a.output||void 0==a.previousStatement,"Must not have both an output and a previousStatement.");this.setColour(a.colour);for(var b=0;void 0!==a["message"+b];)this.interpolate_(a["message"+b],a["args"+b]||[],a["lastDummyAlign"+b]),b++;void 0!==a.inputsInline&&this.setInputsInline(a.inputsInline);void 0!==a.output&&this.setOutput(!0,a.output);void 0!==a.previousStatement&&this.setPreviousStatement(!0,a.previousStatement);void 0!==
|
||||
a.nextStatement&&this.setNextStatement(!0,a.nextStatement);void 0!==a.tooltip&&this.setTooltip(a.tooltip);void 0!==a.helpUrl&&this.setHelpUrl(a.helpUrl)};
|
||||
Blockly.Block.prototype.interpolate_=function(a,b,c){var d=a.split(/(%\d+)/),e=[],f=0;a=[];for(var g=0;g<d.length;g++){var h=d[g];if(h.match(/^%\d+$/)){var k=parseInt(h.substring(1),10);goog.asserts.assert(0<k&&k<=b.length,'Message index "%s" out of range.',h);goog.asserts.assert(!e[k],'Message index "%s" duplicated.',h);e[k]=!0;f++;a.push(b[k-1])}else(h=h.replace(/%%/g,"%").trim())&&a.push(h)}goog.asserts.assert(f==b.length,"Message does not reference all %s arg(s).",b.length);!a.length||"string"!=
|
||||
typeof a[a.length-1]&&0!=a[a.length-1].type.indexOf("field_")||(b={type:"input_dummy"},c&&(b.align=c),a.push(b));c={LEFT:Blockly.ALIGN_LEFT,RIGHT:Blockly.ALIGN_RIGHT,CENTRE:Blockly.ALIGN_CENTRE};d=[];for(g=0;g<a.length;g++)if(e=a[g],"string"==typeof e)d.push([e,void 0]);else{b=f=null;switch(e.type){case "field_label":f=new Blockly.FieldLabel(e.text);break;case "field_input":f=new Blockly.FieldTextInput(e.text);break;case "field_angle":f=new Blockly.FieldAngle(e.angle);break;case "field_checkbox":f=
|
||||
new Blockly.FieldCheckbox(e.checked?"TRUE":"FALSE");break;case "field_colour":f=new Blockly.FieldColour(e.colour);break;case "field_date":f=new Blockly.FieldDate(e.date);break;case "field_variable":f=new Blockly.FieldVariable(e.variable);break;case "field_dropdown":f=new Blockly.FieldDropdown(e.options);break;case "field_image":f=new Blockly.FieldImage(e.src,e.width,e.height,e.alt);break;case "input_value":b=this.appendValueInput(e.name);break;case "input_statement":b=this.appendStatementInput(e.name);
|
||||
break;case "input_dummy":b=this.appendDummyInput(e.name);break;default:throw"Unknown element type: "+e.type;}if(f)d.push([f,e.name]);else if(b){e.check&&b.setCheck(e.check);e.align&&b.setAlign(c[e.align]);for(e=0;e<d.length;e++)b.appendField(d[e][0],d[e][1]);d.length=0}}};
|
||||
typeof a[a.length-1]&&0!=a[a.length-1].type.indexOf("field_")||(b={type:"input_dummy"},c&&(b.align=c),a.push(b));c={LEFT:Blockly.ALIGN_LEFT,RIGHT:Blockly.ALIGN_RIGHT,CENTRE:Blockly.ALIGN_CENTRE};d=[];for(g=0;g<a.length;g++)if(e=a[g],"string"==typeof e)d.push([e,void 0]);else{b=f=null;do switch(h=!1,e.type){case "input_value":b=this.appendValueInput(e.name);break;case "input_statement":b=this.appendStatementInput(e.name);break;case "input_dummy":b=this.appendDummyInput(e.name);break;case "field_label":f=
|
||||
new Blockly.FieldLabel(e.text);break;case "field_input":f=new Blockly.FieldTextInput(e.text);break;case "field_angle":f=new Blockly.FieldAngle(e.angle);break;case "field_checkbox":f=new Blockly.FieldCheckbox(e.checked?"TRUE":"FALSE");break;case "field_colour":f=new Blockly.FieldColour(e.colour);break;case "field_variable":f=new Blockly.FieldVariable(e.variable);break;case "field_dropdown":f=new Blockly.FieldDropdown(e.options);break;case "field_image":f=new Blockly.FieldImage(e.src,e.width,e.height,
|
||||
e.alt);break;case "field_date":if(Blockly.FieldDate){f=new Blockly.FieldDate(e.date);break}default:e.alt&&(e=e.alt,h=!0)}while(h);if(f)d.push([f,e.name]);else if(b){e.check&&b.setCheck(e.check);e.align&&b.setAlign(c[e.align]);for(e=0;e<d.length;e++)b.appendField(d[e][0],d[e][1]);d.length=0}}};
|
||||
Blockly.Block.prototype.appendInput_=function(a,b){var c=null;if(a==Blockly.INPUT_VALUE||a==Blockly.NEXT_STATEMENT)c=new Blockly.Connection(this,a);c=new Blockly.Input(a,b,this,c);this.inputList.push(c);this.rendered&&(this.render(),this.bumpNeighbours_());return c};
|
||||
Blockly.Block.prototype.moveInputBefore=function(a,b){if(a!=b){for(var c=-1,d=b?-1:this.inputList.length,e=0,f;f=this.inputList[e];e++)if(f.name==a){if(c=e,-1!=d)break}else if(b&&f.name==b&&(d=e,-1!=c))break;goog.asserts.assert(-1!=c,'Named input "%s" not found.',a);goog.asserts.assert(-1!=d,'Reference input "%s" not found.',b);this.moveNumberedInputBefore(c,d)}};
|
||||
Blockly.Block.prototype.moveNumberedInputBefore=function(a,b){goog.asserts.assert(a!=b,"Can't move input to itself.");goog.asserts.assert(a<this.inputList.length,"Input index "+a+" out of bounds.");goog.asserts.assert(b<=this.inputList.length,"Reference input "+b+" out of bounds.");var c=this.inputList[a];this.inputList.splice(a,1);a<b&&b--;this.inputList.splice(b,0,c);this.rendered&&(this.render(),this.bumpNeighbours_())};
|
||||
|
||||
100
core/block.js
100
core/block.js
@@ -912,8 +912,8 @@ Blockly.Block.prototype.jsonInit = function(json) {
|
||||
|
||||
// Interpolate the message blocks.
|
||||
var i = 0;
|
||||
while (json['message' + i] && json['args' + i]) {
|
||||
this.interpolate_(json['message' + i], json['args' + i],
|
||||
while (json['message' + i] !== undefined) {
|
||||
this.interpolate_(json['message' + i], json['args' + i] || [],
|
||||
json['lastDummyAlign' + i]);
|
||||
i++;
|
||||
}
|
||||
@@ -941,7 +941,7 @@ Blockly.Block.prototype.jsonInit = function(json) {
|
||||
|
||||
/**
|
||||
* Interpolate a message description onto the block.
|
||||
* @param {string} message Text Contains interpolation tokens (%1, %2, ...)
|
||||
* @param {string} message Text contains interpolation tokens (%1, %2, ...)
|
||||
* that match with fields or inputs defined in the args array.
|
||||
* @param {!Array} args Array of arguments to be interpolated.
|
||||
* @param {=string} lastDummyAlign If a dummy input is added at the end,
|
||||
@@ -999,48 +999,58 @@ Blockly.Block.prototype.interpolate_ = function(message, args, lastDummyAlign) {
|
||||
} else {
|
||||
var field = null;
|
||||
var input = null;
|
||||
switch (element['type']) {
|
||||
case 'field_label':
|
||||
field = new Blockly.FieldLabel(element['text']);
|
||||
break;
|
||||
case 'field_input':
|
||||
field = new Blockly.FieldTextInput(element['text']);
|
||||
break;
|
||||
case 'field_angle':
|
||||
field = new Blockly.FieldAngle(element['angle']);
|
||||
break;
|
||||
case 'field_checkbox':
|
||||
field = new Blockly.FieldCheckbox(
|
||||
element['checked'] ? 'TRUE' : 'FALSE');
|
||||
break;
|
||||
case 'field_colour':
|
||||
field = new Blockly.FieldColour(element['colour']);
|
||||
break;
|
||||
case 'field_date':
|
||||
field = new Blockly.FieldDate(element['date']);
|
||||
break;
|
||||
case 'field_variable':
|
||||
field = new Blockly.FieldVariable(element['variable']);
|
||||
break;
|
||||
case 'field_dropdown':
|
||||
field = new Blockly.FieldDropdown(element['options']);
|
||||
break;
|
||||
case 'field_image':
|
||||
field = new Blockly.FieldImage(element['src'],
|
||||
element['width'], element['height'], element['alt']);
|
||||
break;
|
||||
case 'input_value':
|
||||
input = this.appendValueInput(element['name']);
|
||||
break;
|
||||
case 'input_statement':
|
||||
input = this.appendStatementInput(element['name']);
|
||||
break;
|
||||
case 'input_dummy':
|
||||
input = this.appendDummyInput(element['name']);
|
||||
break;
|
||||
default:
|
||||
throw 'Unknown element type: ' + element['type'];
|
||||
}
|
||||
do {
|
||||
var altRepeat = false;
|
||||
switch (element['type']) {
|
||||
case 'input_value':
|
||||
input = this.appendValueInput(element['name']);
|
||||
break;
|
||||
case 'input_statement':
|
||||
input = this.appendStatementInput(element['name']);
|
||||
break;
|
||||
case 'input_dummy':
|
||||
input = this.appendDummyInput(element['name']);
|
||||
break;
|
||||
case 'field_label':
|
||||
field = new Blockly.FieldLabel(element['text']);
|
||||
break;
|
||||
case 'field_input':
|
||||
field = new Blockly.FieldTextInput(element['text']);
|
||||
break;
|
||||
case 'field_angle':
|
||||
field = new Blockly.FieldAngle(element['angle']);
|
||||
break;
|
||||
case 'field_checkbox':
|
||||
field = new Blockly.FieldCheckbox(
|
||||
element['checked'] ? 'TRUE' : 'FALSE');
|
||||
break;
|
||||
case 'field_colour':
|
||||
field = new Blockly.FieldColour(element['colour']);
|
||||
break;
|
||||
case 'field_variable':
|
||||
field = new Blockly.FieldVariable(element['variable']);
|
||||
break;
|
||||
case 'field_dropdown':
|
||||
field = new Blockly.FieldDropdown(element['options']);
|
||||
break;
|
||||
case 'field_image':
|
||||
field = new Blockly.FieldImage(element['src'],
|
||||
element['width'], element['height'], element['alt']);
|
||||
break;
|
||||
case 'field_date':
|
||||
if (Blockly.FieldDate) {
|
||||
field = new Blockly.FieldDate(element['date']);
|
||||
break;
|
||||
}
|
||||
// Fall through if FieldDate is not compiled in.
|
||||
default:
|
||||
// Unknown field.
|
||||
if (element['alt']) {
|
||||
element = element['alt'];
|
||||
altRepeat = true;
|
||||
}
|
||||
}
|
||||
} while (altRepeat);
|
||||
if (field) {
|
||||
fieldStack.push([field, element['name']]);
|
||||
} else if (input) {
|
||||
|
||||
Reference in New Issue
Block a user