@blockdia/scratch-blocks 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1127,9 +1127,10 @@ Blockly.FieldVariableGetter.prototype.setValue=function(a){var b=Blockly.Variabl
1127
1127
  Blockly.FieldVariableGetter.prototype.showEditor_=function(){};Blockly.FieldVariableGetter.prototype.updateEditable=function(){};Blockly.FieldVariableGetter.prototype.referencesVariables=function(){return!0};Blockly.Field.register("field_variable_getter",Blockly.FieldVariableGetter);Blockly.Input=function(a,b,c,d){if(a!=Blockly.DUMMY_INPUT&&!b)throw"Value inputs and statement inputs must have non-empty name.";this.type=a;this.name=b;this.sourceBlock_=c;this.connection=d;this.fieldRow=[];this.outlinePath=null};Blockly.Input.prototype.align=Blockly.ALIGN_LEFT;Blockly.Input.prototype.visible_=!0;Blockly.Input.prototype.appendField=function(a,b){this.insertFieldAt(this.fieldRow.length,a,b);return this};
1128
1128
  Blockly.Input.prototype.insertFieldAt=function(a,b,c){if(0>a||a>this.fieldRow.length)throw Error("index "+a+" out of bounds.");if(!b&&!c)return this;goog.isString(b)&&(b=new Blockly.FieldLabel(b));b.setSourceBlock(this.sourceBlock_);this.sourceBlock_.rendered&&b.init();b.name=c;b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);++a;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_());
1129
1129
  return a};Blockly.Input.prototype.removeField=function(a){for(var b=0,c;c=this.fieldRow[b];b++)if(c.name===a){c.dispose();this.fieldRow.splice(b,1);this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_());return}goog.asserts.fail('Field "%s" not found.',a)};Blockly.Input.prototype.isVisible=function(){return this.visible_};
1130
- Blockly.Input.prototype.setVisible=function(a){var b=[];if(this.visible_==a)return b;for(var c=(this.visible_=a)?"block":"none",d=0,e;e=this.fieldRow[d];d++)e.setVisible(a);this.connection&&(a?b=this.connection.unhideAll():this.connection.hideAll(),d=this.connection.targetBlock())&&(d.getSvgRoot().style.display=c,a||(d.rendered=!1));return b};Blockly.Input.prototype.setCheck=function(a){if(!this.connection)throw"This input does not have a connection.";this.connection.setCheck(a);return this};
1131
- Blockly.Input.prototype.setAlign=function(a){this.align=a;this.sourceBlock_.rendered&&this.sourceBlock_.render();return this};Blockly.Input.prototype.init=function(){if(this.sourceBlock_.workspace.rendered)for(var a=0;a<this.fieldRow.length;a++)this.fieldRow[a].init(this.sourceBlock_)};Blockly.Input.prototype.dispose=function(){this.outlinePath&&goog.dom.removeNode(this.outlinePath);for(var a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose();this.sourceBlock_=null};
1132
- Blockly.Input.prototype.initOutlinePath=function(a){this.sourceBlock_.workspace.rendered&&!this.outlinePath&&this.type==Blockly.INPUT_VALUE&&(this.outlinePath=Blockly.utils.createSvgElement("path",{"class":"blocklyPath",style:"visibility: hidden",d:""},a))};Blockly.Warning=function(a){Blockly.Warning.superClass_.constructor.call(this,a);this.createIcon();this.text_={}};goog.inherits(Blockly.Warning,Blockly.Icon);Blockly.Warning.prototype.collapseHidden=!1;
1130
+ Blockly.Input.prototype.setVisible=function(a){var b=[];if(this.visible_==a)return b;for(var c=(this.visible_=a)?"block":"none",d=0,e;e=this.fieldRow[d];d++)e.setVisible(a);this.connection&&(a?b=this.connection.unhideAll():this.connection.hideAll(),d=this.connection.targetBlock())&&(d.getSvgRoot().style.display=c,a||(d.rendered=!1));return b};
1131
+ Blockly.Input.prototype.setCheck=function(a){if(!this.connection)throw"This input does not have a connection.";this.connection.setCheck(a);if(("Boolean"===a||goog.isArray(a)&&-1!==a.indexOf("Boolean"))&&!this.sourceBlock_.workspace.isMutator&&!this.sourceBlock_.isInsertionMarker()&&"procedures_definition"!==this.sourceBlock_.type&&!this.connection.getShadowDom()){a=goog.dom.createDom("shadow");a.setAttribute("type","operator_boolean");var b=goog.dom.createDom("field",null,"FALSE");b.setAttribute("name",
1132
+ "VALUE");a.appendChild(b);this.connection.setShadowDom(a)}return this};Blockly.Input.prototype.setAlign=function(a){this.align=a;this.sourceBlock_.rendered&&this.sourceBlock_.render();return this};Blockly.Input.prototype.init=function(){if(this.sourceBlock_.workspace.rendered)for(var a=0;a<this.fieldRow.length;a++)this.fieldRow[a].init(this.sourceBlock_)};
1133
+ Blockly.Input.prototype.dispose=function(){this.outlinePath&&goog.dom.removeNode(this.outlinePath);for(var a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose();this.sourceBlock_=null};Blockly.Input.prototype.initOutlinePath=function(a){this.sourceBlock_.workspace.rendered&&!this.outlinePath&&this.type==Blockly.INPUT_VALUE&&(this.outlinePath=Blockly.utils.createSvgElement("path",{"class":"blocklyPath",style:"visibility: hidden",d:""},a))};Blockly.Warning=function(a){Blockly.Warning.superClass_.constructor.call(this,a);this.createIcon();this.text_={}};goog.inherits(Blockly.Warning,Blockly.Icon);Blockly.Warning.prototype.collapseHidden=!1;
1133
1134
  Blockly.Warning.prototype.drawIcon_=function(a){Blockly.utils.createSvgElement("path",{"class":"blocklyIconShape",d:"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z"},a);Blockly.utils.createSvgElement("path",{"class":"blocklyIconSymbol",d:"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z"},a);Blockly.utils.createSvgElement("rect",{"class":"blocklyIconSymbol",x:"7",y:"11",height:"2",width:"2"},a)};
1134
1135
  Blockly.Warning.textToDom_=function(a){var b=Blockly.utils.createSvgElement("text",{"class":"blocklyText blocklyBubbleText",y:Blockly.Bubble.BORDER_WIDTH},null);a=a.split("\n");for(var c=0;c<a.length;c++){var d=Blockly.utils.createSvgElement("tspan",{dy:"1em",x:Blockly.Bubble.BORDER_WIDTH},b),e=document.createTextNode(a[c]);d.appendChild(e)}return b};
1135
1136
  Blockly.Warning.prototype.setVisible=function(a){if(a!=this.isVisible())if(Blockly.Events.fire(new Blockly.Events.Ui(this.block_,"warningOpen",!a,a)),a){a=Blockly.Warning.textToDom_(this.getText());this.bubble_=new Blockly.Bubble(this.block_.workspace,a,this.block_.svgPath_,this.iconXY_,null,null);if(this.block_.RTL)for(var b=a.getBBox().width,c=0,d;d=a.childNodes[c];c++)d.setAttribute("text-anchor","end"),d.setAttribute("x",b+Blockly.Bubble.BORDER_WIDTH);this.updateColour();a=this.bubble_.getBubbleSize();
@@ -1456,8 +1457,9 @@ goog.Timer.prototype.dispatchTick=function(){this.dispatchEvent(goog.Timer.TICK)
1456
1457
  goog.Timer.TICK="tick";goog.Timer.callOnce=function(a,b,c){if(goog.isFunction(a))c&&(a=goog.bind(a,c));else if(a&&"function"==typeof a.handleEvent)a=goog.bind(a.handleEvent,a);else throw Error("Invalid listener argument");return Number(b)>goog.Timer.MAX_TIMEOUT_?goog.Timer.INVALID_TIMEOUT_ID_:goog.Timer.defaultTimerObject.setTimeout(a,b||0)};goog.Timer.clear=function(a){goog.Timer.defaultTimerObject.clearTimeout(a)};
1457
1458
  goog.Timer.promise=function(a,b){var c=null;return(new goog.Promise(function(d,e){c=goog.Timer.callOnce(function(){d(b)},a);c==goog.Timer.INVALID_TIMEOUT_ID_&&e(Error("Failed to schedule timer."))})).thenCatch(function(a){goog.Timer.clear(c);throw a;})};Blockly.BlockSvg=function(a,b,c){this.svgGroup_=Blockly.utils.createSvgElement("g",{},null);this.svgPath_=Blockly.utils.createSvgElement("path",{"class":"blocklyPath blocklyBlockBackground"},this.svgGroup_);this.svgPath_.tooltip=this;this.rendered=!1;this.useDragSurface_=Blockly.utils.is3dSupported()&&!!a.blockDragSurface_;Blockly.Tooltip.bindMouseEvents(this.svgPath_);Blockly.BlockSvg.superClass_.constructor.call(this,a,b,c);this.svgGroup_.dataset&&(this.svgGroup_.dataset.id=this.id)};
1458
1459
  goog.inherits(Blockly.BlockSvg,Blockly.Block);Blockly.BlockSvg.prototype.height=0;Blockly.BlockSvg.prototype.width=0;Blockly.BlockSvg.prototype.insertionMarkerMinWidth_=0;Blockly.BlockSvg.prototype.opacity_=1;Blockly.BlockSvg.prototype.dragStartXY_=null;Blockly.BlockSvg.prototype.isGlowingBlock_=!1;Blockly.BlockSvg.prototype.isGlowingStack_=!1;Blockly.BlockSvg.INLINE=-1;
1459
- Blockly.BlockSvg.prototype.initSvg=function(){goog.asserts.assert(this.workspace.rendered,"Workspace is headless.");if(!this.isInsertionMarker()){for(var a=0,b;b=this.inputList[a];a++)b.init(),b.initOutlinePath(this.svgGroup_);b=this.getIcons();for(a=0;a<b.length;a++)b[a].createIcon()}this.updateColour();this.updateMovable();this.workspace.options.readOnly||this.eventsInit_||Blockly.bindEventWithChecks_(this.getSvgRoot(),"mousedown",this,this.onMouseDown_);this.eventsInit_=!0;this.getSvgRoot().parentNode||
1460
- this.workspace.getCanvas().appendChild(this.getSvgRoot())};Blockly.BlockSvg.prototype.select=function(){if(this.isShadow()&&this.getParent())this.getParent().select();else if(Blockly.selected!=this){var a=null;if(Blockly.selected){a=Blockly.selected.id;Blockly.Events.disable();try{Blockly.selected.unselect()}finally{Blockly.Events.enable()}}a=new Blockly.Events.Ui(null,"selected",a,this.id);a.workspaceId=this.workspace.id;Blockly.Events.fire(a);Blockly.selected=this;this.addSelect()}};
1460
+ Blockly.BlockSvg.prototype.initSvg=function(){goog.asserts.assert(this.workspace.rendered,"Workspace is headless.");if(!this.isInsertionMarker()){for(var a=0,b;b=this.inputList[a];a++)b.connection&&!b.connection.isConnected()&&b.connection.getShadowDom()&&b.connection.getOutputShape()===Blockly.OUTPUT_SHAPE_HEXAGONAL&&b.connection.respawnShadow_();for(a=0;b=this.inputList[a];a++)b.init(),b.initOutlinePath(this.svgGroup_);b=this.getIcons();for(a=0;a<b.length;a++)b[a].createIcon()}this.updateColour();
1461
+ this.updateMovable();this.workspace.options.readOnly||this.eventsInit_||Blockly.bindEventWithChecks_(this.getSvgRoot(),"mousedown",this,this.onMouseDown_);this.eventsInit_=!0;this.getSvgRoot().parentNode||this.workspace.getCanvas().appendChild(this.getSvgRoot())};
1462
+ Blockly.BlockSvg.prototype.select=function(){if(this.isShadow()&&this.getParent())this.getParent().select();else if(Blockly.selected!=this){var a=null;if(Blockly.selected){a=Blockly.selected.id;Blockly.Events.disable();try{Blockly.selected.unselect()}finally{Blockly.Events.enable()}}a=new Blockly.Events.Ui(null,"selected",a,this.id);a.workspaceId=this.workspace.id;Blockly.Events.fire(a);Blockly.selected=this;this.addSelect()}};
1461
1463
  Blockly.BlockSvg.prototype.unselect=function(){if(Blockly.selected==this){var a=new Blockly.Events.Ui(null,"selected",this.id,null);a.workspaceId=this.workspace.id;Blockly.Events.fire(a);Blockly.selected=null;this.removeSelect()}};Blockly.BlockSvg.prototype.setGlowBlock=function(a){this.isGlowingBlock_=a;this.updateColour()};
1462
1464
  Blockly.BlockSvg.prototype.setGlowStack=function(a){this.isGlowingStack_=a;a=this.getSvgRoot();this.isGlowingStack_&&!a.hasAttribute("filter")?a.setAttribute("filter","url(#"+(this.workspace.options.stackGlowFilterId||"blocklyStackGlowFilter")+")"):!this.isGlowingStack_&&a.hasAttribute("filter")&&a.removeAttribute("filter")};Blockly.BlockSvg.prototype.mutator=null;Blockly.BlockSvg.prototype.comment=null;Blockly.BlockSvg.prototype.warning=null;
1463
1465
  Blockly.BlockSvg.prototype.getIcons=function(){var a=[];this.mutator&&a.push(this.mutator);this.comment&&a.push(this.comment);this.warning&&a.push(this.warning);return a};Blockly.BlockSvg.prototype.intersects_=!0;Blockly.BlockSvg.prototype.setIntersects=function(a){if(a!==this.intersects_){this.intersects_=a;var b=this.getSvgRoot();b&&(b.style.display=a?"":"none")}};
@@ -1555,7 +1557,10 @@ Blockly.FieldAngle.prototype.onMouseMove=function(a){a.preventDefault();var b=th
1555
1557
  Blockly.FieldTextInput.htmlInput_.value=b,this.setValue(b),this.validate_(),this.resizeEditor_())};Blockly.FieldAngle.prototype.setText=function(a){Blockly.FieldAngle.superClass_.setText.call(this,a);this.textElement_&&(this.updateGraph_(),this.size_.width=0)};
1556
1558
  Blockly.FieldAngle.prototype.updateGraph_=function(){if(this.gauge_){var a=Number(this.getText())%360+Blockly.FieldAngle.OFFSET,b=goog.math.toRadians(a),c=["M ",Blockly.FieldAngle.HALF,",",Blockly.FieldAngle.HALF],d=Blockly.FieldAngle.HALF,e=Blockly.FieldAngle.HALF;if(!isNaN(b)){var f=goog.math.toRadians(Blockly.FieldAngle.OFFSET),g=Math.cos(f)*Blockly.FieldAngle.RADIUS,h=Math.sin(f)*-Blockly.FieldAngle.RADIUS;Blockly.FieldAngle.CLOCKWISE&&(b=2*f-b);d+=Math.cos(b)*Blockly.FieldAngle.RADIUS;e-=Math.sin(b)*
1557
1559
  Blockly.FieldAngle.RADIUS;b=180<Math.abs(a-Blockly.FieldAngle.OFFSET)?1:0;f=Number(Blockly.FieldAngle.CLOCKWISE);a<Blockly.FieldAngle.OFFSET&&(f=1-f);c.push(" l ",g,",",h," A ",Blockly.FieldAngle.RADIUS,",",Blockly.FieldAngle.RADIUS," 0 ",b," ",f," ",d,",",e," z");this.arrowSvg_.setAttribute("transform","rotate("+(Blockly.FieldAngle.CLOCKWISE?a+2*Blockly.FieldAngle.OFFSET:-a)+")")}this.gauge_.setAttribute("d",c.join(""));this.line_.setAttribute("x2",d);this.line_.setAttribute("y2",e);this.handle_.setAttribute("transform",
1558
- "translate("+d+","+e+")")}};Blockly.FieldAngle.prototype.classValidator=function(a){if(null===a)return null;a=parseFloat(a||0);if(isNaN(a))return null;a%=360;0>a&&(a+=360);a>Blockly.FieldAngle.WRAP&&(a-=360);return String(a)};Blockly.Field.register("field_angle",Blockly.FieldAngle);Blockly.FieldCheckbox=function(a,b){Blockly.FieldCheckbox.superClass_.constructor.call(this,"",b);this.setValue(a);this.addArgType("checkbox")};goog.inherits(Blockly.FieldCheckbox,Blockly.Field);Blockly.FieldCheckbox.fromJson=function(a){return new Blockly.FieldCheckbox(a.checked?"TRUE":"FALSE")};Blockly.FieldCheckbox.CHECK_CHAR="\u2713";Blockly.FieldCheckbox.prototype.CURSOR="default";
1560
+ "translate("+d+","+e+")")}};Blockly.FieldAngle.prototype.classValidator=function(a){if(null===a)return null;a=parseFloat(a||0);if(isNaN(a))return null;a%=360;0>a&&(a+=360);a>Blockly.FieldAngle.WRAP&&(a-=360);return String(a)};Blockly.Field.register("field_angle",Blockly.FieldAngle);Blockly.FieldBooleanToggle=function(a){Blockly.FieldBooleanToggle.superClass_.constructor.call(this,"");this.size_=new goog.math.Size(32,24);this.setValue(a);this.addArgType("boolean")};goog.inherits(Blockly.FieldBooleanToggle,Blockly.Field);Blockly.FieldBooleanToggle.fromJson=function(a){return new Blockly.FieldBooleanToggle(a.value||"FALSE")};Blockly.FieldBooleanToggle.prototype.CURSOR="pointer";Blockly.FieldBooleanToggle.prototype.render_=function(){this.size_.width=32;this.size_.height=24};
1561
+ Blockly.FieldBooleanToggle.prototype.init=function(){this.fieldGroup_||(Blockly.FieldBooleanToggle.superClass_.init.call(this),this.textElement_.style.display="none",this.iconElement_=Blockly.utils.createSvgElement("path",{fill:"none",stroke:"#ffffff","stroke-width":4,"stroke-linecap":"round","stroke-linejoin":"round","pointer-events":"none"},this.fieldGroup_),this.updateIcon_())};Blockly.FieldBooleanToggle.prototype.getValue=function(){return this.state_?"TRUE":"FALSE"};
1562
+ Blockly.FieldBooleanToggle.prototype.setValue=function(a){a="string"==typeof a?"TRUE"==a.toUpperCase():!!a;if(this.state_!==a){var b=this.getValue();this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,b,a?"TRUE":"FALSE"));this.state_=a;this.updateIcon_();this.sourceBlock_&&this.sourceBlock_.rendered&&this.sourceBlock_.updateColour()}};
1563
+ Blockly.FieldBooleanToggle.prototype.updateIcon_=function(){this.iconElement_&&this.iconElement_.setAttribute("d",this.state_?"M 8 12 L 13 17 L 24 6":"M 10 6 L 22 18 M 22 6 L 10 18")};Blockly.FieldBooleanToggle.prototype.showEditor_=function(){this.setValue(!this.state_)};Blockly.Field.register("field_boolean_toggle",Blockly.FieldBooleanToggle);Blockly.FieldCheckbox=function(a,b){Blockly.FieldCheckbox.superClass_.constructor.call(this,"",b);this.setValue(a);this.addArgType("checkbox")};goog.inherits(Blockly.FieldCheckbox,Blockly.Field);Blockly.FieldCheckbox.fromJson=function(a){return new Blockly.FieldCheckbox(a.checked?"TRUE":"FALSE")};Blockly.FieldCheckbox.CHECK_CHAR="\u2713";Blockly.FieldCheckbox.prototype.CURSOR="default";
1559
1564
  Blockly.FieldCheckbox.prototype.init=function(){if(!this.fieldGroup_){Blockly.FieldCheckbox.superClass_.init.call(this);this.checkElement_=Blockly.utils.createSvgElement("text",{"class":"blocklyText blocklyCheckbox",x:-3,y:14},this.fieldGroup_);var a=document.createTextNode(Blockly.FieldCheckbox.CHECK_CHAR);this.checkElement_.appendChild(a);this.checkElement_.style.display=this.state_?"block":"none"}};Blockly.FieldCheckbox.prototype.getValue=function(){return String(this.state_).toUpperCase()};
1560
1565
  Blockly.FieldCheckbox.prototype.setValue=function(a){a="string"==typeof a?"TRUE"==a.toUpperCase():!!a;this.state_!==a&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,this.state_,a)),this.state_=a,this.checkElement_&&(this.checkElement_.style.display=a?"block":"none"))};Blockly.FieldCheckbox.prototype.showEditor_=function(){var a=!this.state_;this.sourceBlock_&&(a=this.callValidator(a));null!==a&&this.setValue(String(a).toUpperCase())};
1561
1566
  Blockly.Field.register("field_checkbox",Blockly.FieldCheckbox);goog.color={};
@@ -1127,9 +1127,10 @@ Blockly.FieldVariableGetter.prototype.setValue=function(a){var b=Blockly.Variabl
1127
1127
  Blockly.FieldVariableGetter.prototype.showEditor_=function(){};Blockly.FieldVariableGetter.prototype.updateEditable=function(){};Blockly.FieldVariableGetter.prototype.referencesVariables=function(){return!0};Blockly.Field.register("field_variable_getter",Blockly.FieldVariableGetter);Blockly.Input=function(a,b,c,d){if(a!=Blockly.DUMMY_INPUT&&!b)throw"Value inputs and statement inputs must have non-empty name.";this.type=a;this.name=b;this.sourceBlock_=c;this.connection=d;this.fieldRow=[];this.outlinePath=null};Blockly.Input.prototype.align=Blockly.ALIGN_LEFT;Blockly.Input.prototype.visible_=!0;Blockly.Input.prototype.appendField=function(a,b){this.insertFieldAt(this.fieldRow.length,a,b);return this};
1128
1128
  Blockly.Input.prototype.insertFieldAt=function(a,b,c){if(0>a||a>this.fieldRow.length)throw Error("index "+a+" out of bounds.");if(!b&&!c)return this;goog.isString(b)&&(b=new Blockly.FieldLabel(b));b.setSourceBlock(this.sourceBlock_);this.sourceBlock_.rendered&&b.init();b.name=c;b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);++a;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_());
1129
1129
  return a};Blockly.Input.prototype.removeField=function(a){for(var b=0,c;c=this.fieldRow[b];b++)if(c.name===a){c.dispose();this.fieldRow.splice(b,1);this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_());return}goog.asserts.fail('Field "%s" not found.',a)};Blockly.Input.prototype.isVisible=function(){return this.visible_};
1130
- Blockly.Input.prototype.setVisible=function(a){var b=[];if(this.visible_==a)return b;for(var c=(this.visible_=a)?"block":"none",d=0,e;e=this.fieldRow[d];d++)e.setVisible(a);this.connection&&(a?b=this.connection.unhideAll():this.connection.hideAll(),d=this.connection.targetBlock())&&(d.getSvgRoot().style.display=c,a||(d.rendered=!1));return b};Blockly.Input.prototype.setCheck=function(a){if(!this.connection)throw"This input does not have a connection.";this.connection.setCheck(a);return this};
1131
- Blockly.Input.prototype.setAlign=function(a){this.align=a;this.sourceBlock_.rendered&&this.sourceBlock_.render();return this};Blockly.Input.prototype.init=function(){if(this.sourceBlock_.workspace.rendered)for(var a=0;a<this.fieldRow.length;a++)this.fieldRow[a].init(this.sourceBlock_)};Blockly.Input.prototype.dispose=function(){this.outlinePath&&goog.dom.removeNode(this.outlinePath);for(var a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose();this.sourceBlock_=null};
1132
- Blockly.Input.prototype.initOutlinePath=function(a){this.sourceBlock_.workspace.rendered&&!this.outlinePath&&this.type==Blockly.INPUT_VALUE&&(this.outlinePath=Blockly.utils.createSvgElement("path",{"class":"blocklyPath",style:"visibility: hidden",d:""},a))};Blockly.Warning=function(a){Blockly.Warning.superClass_.constructor.call(this,a);this.createIcon();this.text_={}};goog.inherits(Blockly.Warning,Blockly.Icon);Blockly.Warning.prototype.collapseHidden=!1;
1130
+ Blockly.Input.prototype.setVisible=function(a){var b=[];if(this.visible_==a)return b;for(var c=(this.visible_=a)?"block":"none",d=0,e;e=this.fieldRow[d];d++)e.setVisible(a);this.connection&&(a?b=this.connection.unhideAll():this.connection.hideAll(),d=this.connection.targetBlock())&&(d.getSvgRoot().style.display=c,a||(d.rendered=!1));return b};
1131
+ Blockly.Input.prototype.setCheck=function(a){if(!this.connection)throw"This input does not have a connection.";this.connection.setCheck(a);if(("Boolean"===a||goog.isArray(a)&&-1!==a.indexOf("Boolean"))&&!this.sourceBlock_.workspace.isMutator&&!this.sourceBlock_.isInsertionMarker()&&"procedures_definition"!==this.sourceBlock_.type&&!this.connection.getShadowDom()){a=goog.dom.createDom("shadow");a.setAttribute("type","operator_boolean");var b=goog.dom.createDom("field",null,"FALSE");b.setAttribute("name",
1132
+ "VALUE");a.appendChild(b);this.connection.setShadowDom(a)}return this};Blockly.Input.prototype.setAlign=function(a){this.align=a;this.sourceBlock_.rendered&&this.sourceBlock_.render();return this};Blockly.Input.prototype.init=function(){if(this.sourceBlock_.workspace.rendered)for(var a=0;a<this.fieldRow.length;a++)this.fieldRow[a].init(this.sourceBlock_)};
1133
+ Blockly.Input.prototype.dispose=function(){this.outlinePath&&goog.dom.removeNode(this.outlinePath);for(var a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose();this.sourceBlock_=null};Blockly.Input.prototype.initOutlinePath=function(a){this.sourceBlock_.workspace.rendered&&!this.outlinePath&&this.type==Blockly.INPUT_VALUE&&(this.outlinePath=Blockly.utils.createSvgElement("path",{"class":"blocklyPath",style:"visibility: hidden",d:""},a))};Blockly.Warning=function(a){Blockly.Warning.superClass_.constructor.call(this,a);this.createIcon();this.text_={}};goog.inherits(Blockly.Warning,Blockly.Icon);Blockly.Warning.prototype.collapseHidden=!1;
1133
1134
  Blockly.Warning.prototype.drawIcon_=function(a){Blockly.utils.createSvgElement("path",{"class":"blocklyIconShape",d:"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z"},a);Blockly.utils.createSvgElement("path",{"class":"blocklyIconSymbol",d:"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z"},a);Blockly.utils.createSvgElement("rect",{"class":"blocklyIconSymbol",x:"7",y:"11",height:"2",width:"2"},a)};
1134
1135
  Blockly.Warning.textToDom_=function(a){var b=Blockly.utils.createSvgElement("text",{"class":"blocklyText blocklyBubbleText",y:Blockly.Bubble.BORDER_WIDTH},null);a=a.split("\n");for(var c=0;c<a.length;c++){var d=Blockly.utils.createSvgElement("tspan",{dy:"1em",x:Blockly.Bubble.BORDER_WIDTH},b),e=document.createTextNode(a[c]);d.appendChild(e)}return b};
1135
1136
  Blockly.Warning.prototype.setVisible=function(a){if(a!=this.isVisible())if(Blockly.Events.fire(new Blockly.Events.Ui(this.block_,"warningOpen",!a,a)),a){a=Blockly.Warning.textToDom_(this.getText());this.bubble_=new Blockly.Bubble(this.block_.workspace,a,this.block_.svgPath_,this.iconXY_,null,null);if(this.block_.RTL)for(var b=a.getBBox().width,c=0,d;d=a.childNodes[c];c++)d.setAttribute("text-anchor","end"),d.setAttribute("x",b+Blockly.Bubble.BORDER_WIDTH);this.updateColour();a=this.bubble_.getBubbleSize();
@@ -1456,8 +1457,9 @@ goog.Timer.prototype.dispatchTick=function(){this.dispatchEvent(goog.Timer.TICK)
1456
1457
  goog.Timer.TICK="tick";goog.Timer.callOnce=function(a,b,c){if(goog.isFunction(a))c&&(a=goog.bind(a,c));else if(a&&"function"==typeof a.handleEvent)a=goog.bind(a.handleEvent,a);else throw Error("Invalid listener argument");return Number(b)>goog.Timer.MAX_TIMEOUT_?goog.Timer.INVALID_TIMEOUT_ID_:goog.Timer.defaultTimerObject.setTimeout(a,b||0)};goog.Timer.clear=function(a){goog.Timer.defaultTimerObject.clearTimeout(a)};
1457
1458
  goog.Timer.promise=function(a,b){var c=null;return(new goog.Promise(function(d,e){c=goog.Timer.callOnce(function(){d(b)},a);c==goog.Timer.INVALID_TIMEOUT_ID_&&e(Error("Failed to schedule timer."))})).thenCatch(function(a){goog.Timer.clear(c);throw a;})};Blockly.BlockSvg=function(a,b,c){this.svgGroup_=Blockly.utils.createSvgElement("g",{},null);this.svgPath_=Blockly.utils.createSvgElement("path",{"class":"blocklyPath blocklyBlockBackground"},this.svgGroup_);this.svgPath_.tooltip=this;this.rendered=!1;this.useDragSurface_=Blockly.utils.is3dSupported()&&!!a.blockDragSurface_;Blockly.Tooltip.bindMouseEvents(this.svgPath_);Blockly.BlockSvg.superClass_.constructor.call(this,a,b,c);this.svgGroup_.dataset&&(this.svgGroup_.dataset.id=this.id)};
1458
1459
  goog.inherits(Blockly.BlockSvg,Blockly.Block);Blockly.BlockSvg.prototype.height=0;Blockly.BlockSvg.prototype.width=0;Blockly.BlockSvg.prototype.insertionMarkerMinWidth_=0;Blockly.BlockSvg.prototype.opacity_=1;Blockly.BlockSvg.prototype.dragStartXY_=null;Blockly.BlockSvg.prototype.isGlowingBlock_=!1;Blockly.BlockSvg.prototype.isGlowingStack_=!1;Blockly.BlockSvg.INLINE=-1;
1459
- Blockly.BlockSvg.prototype.initSvg=function(){goog.asserts.assert(this.workspace.rendered,"Workspace is headless.");if(!this.isInsertionMarker()){for(var a=0,b;b=this.inputList[a];a++)b.init(),b.initOutlinePath(this.svgGroup_);b=this.getIcons();for(a=0;a<b.length;a++)b[a].createIcon()}this.updateColour();this.updateMovable();this.workspace.options.readOnly||this.eventsInit_||Blockly.bindEventWithChecks_(this.getSvgRoot(),"mousedown",this,this.onMouseDown_);this.eventsInit_=!0;this.getSvgRoot().parentNode||
1460
- this.workspace.getCanvas().appendChild(this.getSvgRoot())};Blockly.BlockSvg.prototype.select=function(){if(this.isShadow()&&this.getParent())this.getParent().select();else if(Blockly.selected!=this){var a=null;if(Blockly.selected){a=Blockly.selected.id;Blockly.Events.disable();try{Blockly.selected.unselect()}finally{Blockly.Events.enable()}}a=new Blockly.Events.Ui(null,"selected",a,this.id);a.workspaceId=this.workspace.id;Blockly.Events.fire(a);Blockly.selected=this;this.addSelect()}};
1460
+ Blockly.BlockSvg.prototype.initSvg=function(){goog.asserts.assert(this.workspace.rendered,"Workspace is headless.");if(!this.isInsertionMarker()){for(var a=0,b;b=this.inputList[a];a++)b.connection&&!b.connection.isConnected()&&b.connection.getShadowDom()&&b.connection.getOutputShape()===Blockly.OUTPUT_SHAPE_HEXAGONAL&&b.connection.respawnShadow_();for(a=0;b=this.inputList[a];a++)b.init(),b.initOutlinePath(this.svgGroup_);b=this.getIcons();for(a=0;a<b.length;a++)b[a].createIcon()}this.updateColour();
1461
+ this.updateMovable();this.workspace.options.readOnly||this.eventsInit_||Blockly.bindEventWithChecks_(this.getSvgRoot(),"mousedown",this,this.onMouseDown_);this.eventsInit_=!0;this.getSvgRoot().parentNode||this.workspace.getCanvas().appendChild(this.getSvgRoot())};
1462
+ Blockly.BlockSvg.prototype.select=function(){if(this.isShadow()&&this.getParent())this.getParent().select();else if(Blockly.selected!=this){var a=null;if(Blockly.selected){a=Blockly.selected.id;Blockly.Events.disable();try{Blockly.selected.unselect()}finally{Blockly.Events.enable()}}a=new Blockly.Events.Ui(null,"selected",a,this.id);a.workspaceId=this.workspace.id;Blockly.Events.fire(a);Blockly.selected=this;this.addSelect()}};
1461
1463
  Blockly.BlockSvg.prototype.unselect=function(){if(Blockly.selected==this){var a=new Blockly.Events.Ui(null,"selected",this.id,null);a.workspaceId=this.workspace.id;Blockly.Events.fire(a);Blockly.selected=null;this.removeSelect()}};Blockly.BlockSvg.prototype.setGlowBlock=function(a){this.isGlowingBlock_=a;this.updateColour()};
1462
1464
  Blockly.BlockSvg.prototype.setGlowStack=function(a){this.isGlowingStack_=a;a=this.getSvgRoot();this.isGlowingStack_&&!a.hasAttribute("filter")?a.setAttribute("filter","url(#"+(this.workspace.options.stackGlowFilterId||"blocklyStackGlowFilter")+")"):!this.isGlowingStack_&&a.hasAttribute("filter")&&a.removeAttribute("filter")};Blockly.BlockSvg.prototype.mutator=null;Blockly.BlockSvg.prototype.comment=null;Blockly.BlockSvg.prototype.warning=null;
1463
1465
  Blockly.BlockSvg.prototype.getIcons=function(){var a=[];this.mutator&&a.push(this.mutator);this.comment&&a.push(this.comment);this.warning&&a.push(this.warning);return a};Blockly.BlockSvg.prototype.intersects_=!0;Blockly.BlockSvg.prototype.setIntersects=function(a){if(a!==this.intersects_){this.intersects_=a;var b=this.getSvgRoot();b&&(b.style.display=a?"":"none")}};
@@ -1508,12 +1510,12 @@ Blockly.BlockSvg.SHAPE_IN_SHAPE_PADDING={1:{0:5*Blockly.BlockSvg.GRID_UNIT,1:2*B
1508
1510
  Blockly.BlockSvg.TOP_LEFT_CORNER_DEFINE_HAT="a "+Blockly.BlockSvg.DEFINE_HAT_CORNER_RADIUS+","+Blockly.BlockSvg.DEFINE_HAT_CORNER_RADIUS+" 0 0,1 "+Blockly.BlockSvg.DEFINE_HAT_CORNER_RADIUS+",-"+Blockly.BlockSvg.DEFINE_HAT_CORNER_RADIUS;Blockly.BlockSvg.TOP_RIGHT_CORNER_DEFINE_HAT="a "+Blockly.BlockSvg.DEFINE_HAT_CORNER_RADIUS+","+Blockly.BlockSvg.DEFINE_HAT_CORNER_RADIUS+" 0 0,1 "+Blockly.BlockSvg.DEFINE_HAT_CORNER_RADIUS+","+Blockly.BlockSvg.DEFINE_HAT_CORNER_RADIUS;
1509
1511
  Blockly.BlockSvg.DEFINE_BLOCK_PADDING_RIGHT=2*Blockly.BlockSvg.GRID_UNIT;
1510
1512
  Blockly.BlockSvg.prototype.updateColour=function(){var a=this.getColourTertiary(),b=this.isShadow()&&!Blockly.scratchBlocksUtils.isShadowArgumentReporter(this);b&&this.parentBlock_&&(a=this.parentBlock_.getColourTertiary(),this.inputList[0]&&this.inputList[0].fieldRow[0]&&(this.inputList[0].fieldRow[0]instanceof Blockly.FieldColour||this.inputList[0].fieldRow[0]instanceof Blockly.FieldColourSlider)&&(a=Blockly.Colours.colourPickerStroke));this.svgPath_.setAttribute("stroke",a);a=this.isGlowingBlock_||
1511
- b?this.getShadowColour()?this.getShadowColour():this.getColourSecondary():this.getColour();this.svgPath_.setAttribute("fill",a);this.svgPath_.setAttribute("fill-opacity",this.getOpacity());for(b=0;a=this.inputList[b];b++)a.outlinePath&&a.outlinePath.setAttribute("fill",this.getColourTertiary());a=this.getIcons();for(b=0;b<a.length;b++)a[b].updateColour();for(b=0;a=this.inputList[b];b++)for(var c=0,d;d=a.fieldRow[c];c++)d.setText(null)};
1512
- Blockly.BlockSvg.prototype.highlightForReplacement=function(a){a?(this.svgPath_.setAttribute("filter","url(#"+(this.workspace.options.replacementGlowFilterId||"blocklyReplacementGlowFilter")+")"),Blockly.utils.addClass(this.svgGroup_,"blocklyReplaceable")):(this.svgPath_.removeAttribute("filter"),Blockly.utils.removeClass(this.svgGroup_,"blocklyReplaceable"))};
1513
+ b?this.getShadowColour()?this.getShadowColour():this.getColourSecondary():this.getColour();this.svgPath_.setAttribute("fill",a);this.svgPath_.setAttribute("fill-opacity",this.getOpacity());for(b=0;a=this.inputList[b];b++)a.outlinePath&&a.outlinePath.setAttribute("fill",this.getColourTertiary()),(a=a.connection&&a.connection.targetBlock())&&"operator_boolean"===a.type&&a.rendered&&a.updateColour();a=this.getIcons();for(b=0;b<a.length;b++)a[b].updateColour();for(b=0;a=this.inputList[b];b++)for(var c=
1514
+ 0,d;d=a.fieldRow[c];c++)d.setText(null)};Blockly.BlockSvg.prototype.highlightForReplacement=function(a){a?(this.svgPath_.setAttribute("filter","url(#"+(this.workspace.options.replacementGlowFilterId||"blocklyReplacementGlowFilter")+")"),Blockly.utils.addClass(this.svgGroup_,"blocklyReplaceable")):(this.svgPath_.removeAttribute("filter"),Blockly.utils.removeClass(this.svgGroup_,"blocklyReplaceable"))};
1513
1515
  Blockly.BlockSvg.prototype.highlightShapeForInput=function(a,b){a=this.getInputWithConnection(a);if(!a)throw"No input found for the connection";a.outlinePath&&(b?(a.outlinePath.setAttribute("filter","url(#"+(this.workspace.options.replacementGlowFilterId||"blocklyReplacementGlowFilter")+")"),Blockly.utils.addClass(this.svgGroup_,"blocklyReplaceable")):(a.outlinePath.removeAttribute("filter"),Blockly.utils.removeClass(this.svgGroup_,"blocklyReplaceable")))};
1514
1516
  Blockly.BlockSvg.prototype.getHeightWidth=function(){var a=this.height,b=this.width,c=this.getNextBlock();c&&(c=c.getHeightWidth(),a+=c.height,a-=Blockly.BlockSvg.NOTCH_HEIGHT,b=Math.max(b,c.width));return{height:a,width:b}};
1515
- Blockly.BlockSvg.prototype.render=function(a){Blockly.Field.startCache();this.rendered=!0;var b=Blockly.BlockSvg.SEP_SPACE_X;this.RTL&&(b=-b);for(var c=this.getIcons(),d=null,e=0;e<c.length;e++)c[e]instanceof Blockly.ScratchBlockComment?d=c[e]:b=c[e].renderIcon(b);b+=this.RTL?Blockly.BlockSvg.SEP_SPACE_X:-Blockly.BlockSvg.SEP_SPACE_X;this.isScratchExtension&&this.outputConnection&&(b+=this.RTL?-Blockly.BlockSvg.GRID_UNIT:Blockly.BlockSvg.GRID_UNIT);c=this.renderCompute_(b);this.renderDraw_(b,c);this.renderMoveConnections_();
1516
- this.renderClassify_();d&&d.renderIcon(this.RTL?-c.rightEdge:c.rightEdge,c[0].height/2);!1!==a&&((a=this.getParent())?a.render(!0):Blockly.resizeSvgContents(this.workspace));Blockly.Field.stopCache();this.updateIntersectionObserver()};
1517
+ Blockly.BlockSvg.prototype.render=function(a){if(!this.isInsertionMarker())for(var b=0,c;c=this.inputList[b];b++)c.connection&&!c.connection.isConnected()&&c.connection.getShadowDom()&&c.connection.getOutputShape()===Blockly.OUTPUT_SHAPE_HEXAGONAL&&c.connection.respawnShadow_();Blockly.Field.startCache();this.rendered=!0;b=Blockly.BlockSvg.SEP_SPACE_X;this.RTL&&(b=-b);var d=this.getIcons();c=null;for(var e=0;e<d.length;e++)d[e]instanceof Blockly.ScratchBlockComment?c=d[e]:b=d[e].renderIcon(b);b+=
1518
+ this.RTL?Blockly.BlockSvg.SEP_SPACE_X:-Blockly.BlockSvg.SEP_SPACE_X;this.isScratchExtension&&this.outputConnection&&(b+=this.RTL?-Blockly.BlockSvg.GRID_UNIT:Blockly.BlockSvg.GRID_UNIT);d=this.renderCompute_(b);this.renderDraw_(b,d);this.renderMoveConnections_();this.renderClassify_();c&&c.renderIcon(this.RTL?-d.rightEdge:d.rightEdge,d[0].height/2);!1!==a&&((a=this.getParent())?a.render(!0):Blockly.resizeSvgContents(this.workspace));Blockly.Field.stopCache();this.updateIntersectionObserver()};
1517
1519
  Blockly.BlockSvg.prototype.renderFields_=function(a,b,c){this.RTL&&(b=-b);for(var d=0,e;e=a[d];d++){var f=e.getSvgRoot();if(f){!this.previousConnection||e instanceof Blockly.FieldLabel||e instanceof Blockly.FieldImage||(b=this.RTL?Math.min(b,-Blockly.BlockSvg.INPUT_AND_FIELD_MIN_X):Math.max(b,Blockly.BlockSvg.INPUT_AND_FIELD_MIN_X));var g=-e.getSize().height/2;this.isScratchExtension&&e===this.inputList[0].fieldRow[0]&&e instanceof Blockly.FieldImage&&this.previousConnection&&(g+=Blockly.BlockSvg.GRID_UNIT);
1518
1520
  this.isScratchExtension&&!this.previousConnection&&this.nextConnection&&e instanceof Blockly.FieldVerticalSeparator&&e.setLineHeight(Blockly.BlockSvg.ICON_SEPARATOR_HEIGHT-Blockly.BlockSvg.GRID_UNIT);var h="";if(this.RTL){var k=b-=e.renderSep+e.renderWidth;g=c+g;e.renderWidth&&(b-=Blockly.BlockSvg.SEP_SPACE_X)}else k=b+e.renderSep,g=c+g,e.renderWidth&&(b+=e.renderSep+e.renderWidth+Blockly.BlockSvg.SEP_SPACE_X);this.RTL&&e instanceof Blockly.FieldImage&&e.getFlipRTL()&&(h="scale(-1 1)",k+=e.renderWidth);
1519
1521
  f.setAttribute("transform","translate("+k+", "+g+") "+h);this.isInsertionMarker()&&f.setAttribute("display","none")}}return this.RTL?-b:b};
@@ -1583,7 +1585,10 @@ Blockly.FieldAngle.prototype.onMouseMove=function(a){a.preventDefault();var b=th
1583
1585
  Blockly.FieldTextInput.htmlInput_.value=b,this.setValue(b),this.validate_(),this.resizeEditor_())};Blockly.FieldAngle.prototype.setText=function(a){Blockly.FieldAngle.superClass_.setText.call(this,a);this.textElement_&&(this.updateGraph_(),this.size_.width=0)};
1584
1586
  Blockly.FieldAngle.prototype.updateGraph_=function(){if(this.gauge_){var a=Number(this.getText())%360+Blockly.FieldAngle.OFFSET,b=goog.math.toRadians(a),c=["M ",Blockly.FieldAngle.HALF,",",Blockly.FieldAngle.HALF],d=Blockly.FieldAngle.HALF,e=Blockly.FieldAngle.HALF;if(!isNaN(b)){var f=goog.math.toRadians(Blockly.FieldAngle.OFFSET),g=Math.cos(f)*Blockly.FieldAngle.RADIUS,h=Math.sin(f)*-Blockly.FieldAngle.RADIUS;Blockly.FieldAngle.CLOCKWISE&&(b=2*f-b);d+=Math.cos(b)*Blockly.FieldAngle.RADIUS;e-=Math.sin(b)*
1585
1587
  Blockly.FieldAngle.RADIUS;b=180<Math.abs(a-Blockly.FieldAngle.OFFSET)?1:0;f=Number(Blockly.FieldAngle.CLOCKWISE);a<Blockly.FieldAngle.OFFSET&&(f=1-f);c.push(" l ",g,",",h," A ",Blockly.FieldAngle.RADIUS,",",Blockly.FieldAngle.RADIUS," 0 ",b," ",f," ",d,",",e," z");this.arrowSvg_.setAttribute("transform","rotate("+(Blockly.FieldAngle.CLOCKWISE?a+2*Blockly.FieldAngle.OFFSET:-a)+")")}this.gauge_.setAttribute("d",c.join(""));this.line_.setAttribute("x2",d);this.line_.setAttribute("y2",e);this.handle_.setAttribute("transform",
1586
- "translate("+d+","+e+")")}};Blockly.FieldAngle.prototype.classValidator=function(a){if(null===a)return null;a=parseFloat(a||0);if(isNaN(a))return null;a%=360;0>a&&(a+=360);a>Blockly.FieldAngle.WRAP&&(a-=360);return String(a)};Blockly.Field.register("field_angle",Blockly.FieldAngle);Blockly.FieldCheckbox=function(a,b){Blockly.FieldCheckbox.superClass_.constructor.call(this,"",b);this.setValue(a);this.addArgType("checkbox")};goog.inherits(Blockly.FieldCheckbox,Blockly.Field);Blockly.FieldCheckbox.fromJson=function(a){return new Blockly.FieldCheckbox(a.checked?"TRUE":"FALSE")};Blockly.FieldCheckbox.CHECK_CHAR="\u2713";Blockly.FieldCheckbox.prototype.CURSOR="default";
1588
+ "translate("+d+","+e+")")}};Blockly.FieldAngle.prototype.classValidator=function(a){if(null===a)return null;a=parseFloat(a||0);if(isNaN(a))return null;a%=360;0>a&&(a+=360);a>Blockly.FieldAngle.WRAP&&(a-=360);return String(a)};Blockly.Field.register("field_angle",Blockly.FieldAngle);Blockly.FieldBooleanToggle=function(a){Blockly.FieldBooleanToggle.superClass_.constructor.call(this,"");this.size_=new goog.math.Size(32,24);this.setValue(a);this.addArgType("boolean")};goog.inherits(Blockly.FieldBooleanToggle,Blockly.Field);Blockly.FieldBooleanToggle.fromJson=function(a){return new Blockly.FieldBooleanToggle(a.value||"FALSE")};Blockly.FieldBooleanToggle.prototype.CURSOR="pointer";Blockly.FieldBooleanToggle.prototype.render_=function(){this.size_.width=32;this.size_.height=24};
1589
+ Blockly.FieldBooleanToggle.prototype.init=function(){this.fieldGroup_||(Blockly.FieldBooleanToggle.superClass_.init.call(this),this.textElement_.style.display="none",this.iconElement_=Blockly.utils.createSvgElement("path",{fill:"none",stroke:"#ffffff","stroke-width":4,"stroke-linecap":"round","stroke-linejoin":"round","pointer-events":"none"},this.fieldGroup_),this.updateIcon_())};Blockly.FieldBooleanToggle.prototype.getValue=function(){return this.state_?"TRUE":"FALSE"};
1590
+ Blockly.FieldBooleanToggle.prototype.setValue=function(a){a="string"==typeof a?"TRUE"==a.toUpperCase():!!a;if(this.state_!==a){var b=this.getValue();this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,b,a?"TRUE":"FALSE"));this.state_=a;this.updateIcon_();this.sourceBlock_&&this.sourceBlock_.rendered&&this.sourceBlock_.updateColour()}};
1591
+ Blockly.FieldBooleanToggle.prototype.updateIcon_=function(){this.iconElement_&&this.iconElement_.setAttribute("d",this.state_?"M 8 12 L 13 17 L 24 6":"M 10 6 L 22 18 M 22 6 L 10 18")};Blockly.FieldBooleanToggle.prototype.showEditor_=function(){this.setValue(!this.state_)};Blockly.Field.register("field_boolean_toggle",Blockly.FieldBooleanToggle);Blockly.FieldCheckbox=function(a,b){Blockly.FieldCheckbox.superClass_.constructor.call(this,"",b);this.setValue(a);this.addArgType("checkbox")};goog.inherits(Blockly.FieldCheckbox,Blockly.Field);Blockly.FieldCheckbox.fromJson=function(a){return new Blockly.FieldCheckbox(a.checked?"TRUE":"FALSE")};Blockly.FieldCheckbox.CHECK_CHAR="\u2713";Blockly.FieldCheckbox.prototype.CURSOR="default";
1587
1592
  Blockly.FieldCheckbox.prototype.init=function(){if(!this.fieldGroup_){Blockly.FieldCheckbox.superClass_.init.call(this);this.checkElement_=Blockly.utils.createSvgElement("text",{"class":"blocklyText blocklyCheckbox",x:-3,y:14},this.fieldGroup_);var a=document.createTextNode(Blockly.FieldCheckbox.CHECK_CHAR);this.checkElement_.appendChild(a);this.checkElement_.style.display=this.state_?"block":"none"}};Blockly.FieldCheckbox.prototype.getValue=function(){return String(this.state_).toUpperCase()};
1588
1593
  Blockly.FieldCheckbox.prototype.setValue=function(a){a="string"==typeof a?"TRUE"==a.toUpperCase():!!a;this.state_!==a&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,this.state_,a)),this.state_=a,this.checkElement_&&(this.checkElement_.style.display=a?"block":"none"))};Blockly.FieldCheckbox.prototype.showEditor_=function(){var a=!this.state_;this.sourceBlock_&&(a=this.callValidator(a));null!==a&&this.setValue(String(a).toUpperCase())};
1589
1594
  Blockly.Field.register("field_checkbox",Blockly.FieldCheckbox);goog.color={};
@@ -49,7 +49,7 @@ goog.addDependency("../../../" + dir + "/core/block_dragger.js", ['Blockly.Block
49
49
  goog.addDependency("../../../" + dir + "/core/block_events.js", ['Blockly.Events.BlockBase', 'Blockly.Events.BlockChange', 'Blockly.Events.BlockCreate', 'Blockly.Events.BlockDelete', 'Blockly.Events.BlockMove', 'Blockly.Events.Change', 'Blockly.Events.Create', 'Blockly.Events.Delete', 'Blockly.Events.Move'], ['Blockly.Events', 'Blockly.Events.Abstract', 'goog.array', 'goog.math.Coordinate']);
50
50
  goog.addDependency("../../../" + dir + "/core/block_render_svg_horizontal.js", ['Blockly.BlockSvg.render'], ['Blockly.BlockSvg']);
51
51
  goog.addDependency("../../../" + dir + "/core/block_svg.js", ['Blockly.BlockSvg'], ['Blockly.Block', 'Blockly.BlockAnimations', 'Blockly.ContextMenu', 'Blockly.Events.Ui', 'Blockly.Events.BlockMove', 'Blockly.Grid', 'Blockly.RenderedConnection', 'Blockly.scratchBlocksUtils', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.utils', 'goog.Timer', 'goog.asserts', 'goog.dom', 'goog.math.Coordinate']);
52
- goog.addDependency("../../../" + dir + "/core/blockly.js", ['Blockly'], ['Blockly.BlockSvg.render', 'Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.FieldAngle', 'Blockly.FieldCheckbox', 'Blockly.FieldColour', 'Blockly.FieldColourSlider', 'Blockly.FieldDropdown', 'Blockly.FieldIconMenu', 'Blockly.FieldImage', 'Blockly.FieldNote', 'Blockly.FieldTextInput', 'Blockly.FieldTextInputRemovable', 'Blockly.FieldTextDropdown', 'Blockly.FieldNumber', 'Blockly.FieldNumberDropdown', 'Blockly.FieldMatrix', 'Blockly.FieldVariable', 'Blockly.FieldVerticalSeparator', 'Blockly.Generator', 'Blockly.Msg', 'Blockly.Procedures', 'Blockly.ScratchMsgs', 'Blockly.Toolbox', 'Blockly.Touch', 'Blockly.WidgetDiv', 'Blockly.WorkspaceSvg', 'Blockly.constants', 'Blockly.inject', 'Blockly.utils', 'goog.color']);
52
+ goog.addDependency("../../../" + dir + "/core/blockly.js", ['Blockly'], ['Blockly.BlockSvg.render', 'Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.FieldAngle', 'Blockly.FieldBooleanToggle', 'Blockly.FieldCheckbox', 'Blockly.FieldColour', 'Blockly.FieldColourSlider', 'Blockly.FieldDropdown', 'Blockly.FieldIconMenu', 'Blockly.FieldImage', 'Blockly.FieldNote', 'Blockly.FieldTextInput', 'Blockly.FieldTextInputRemovable', 'Blockly.FieldTextDropdown', 'Blockly.FieldNumber', 'Blockly.FieldNumberDropdown', 'Blockly.FieldMatrix', 'Blockly.FieldVariable', 'Blockly.FieldVerticalSeparator', 'Blockly.Generator', 'Blockly.Msg', 'Blockly.Procedures', 'Blockly.ScratchMsgs', 'Blockly.Toolbox', 'Blockly.Touch', 'Blockly.WidgetDiv', 'Blockly.WorkspaceSvg', 'Blockly.constants', 'Blockly.inject', 'Blockly.utils', 'goog.color']);
53
53
  goog.addDependency("../../../" + dir + "/core/blocks.js", ['Blockly.Blocks'], []);
54
54
  goog.addDependency("../../../" + dir + "/core/bubble.js", ['Blockly.Bubble'], ['Blockly.Touch', 'Blockly.Workspace', 'goog.dom', 'goog.math.Coordinate', 'goog.userAgent']);
55
55
  goog.addDependency("../../../" + dir + "/core/bubble_dragger.js", ['Blockly.BubbleDragger'], ['Blockly.Bubble', 'Blockly.Events.CommentMove', 'Blockly.WorkspaceCommentSvg', 'goog.math.Coordinate', 'goog.asserts']);
@@ -69,6 +69,7 @@ goog.addDependency("../../../" + dir + "/core/events_abstract.js", ['Blockly.Eve
69
69
  goog.addDependency("../../../" + dir + "/core/extensions.js", ['Blockly.Extensions'], ['Blockly.Mutator', 'Blockly.utils', 'goog.string']);
70
70
  goog.addDependency("../../../" + dir + "/core/field.js", ['Blockly.Field'], ['Blockly.Events.BlockChange', 'Blockly.Gesture', 'goog.asserts', 'goog.dom', 'goog.math.Size', 'goog.style', 'goog.userAgent']);
71
71
  goog.addDependency("../../../" + dir + "/core/field_angle.js", ['Blockly.FieldAngle'], ['Blockly.DropDownDiv', 'Blockly.FieldTextInput', 'goog.math', 'goog.userAgent']);
72
+ goog.addDependency("../../../" + dir + "/core/field_boolean_toggle.js", ['Blockly.FieldBooleanToggle'], ['Blockly.Field', 'Blockly.Events.BlockChange', 'goog.math.Size']);
72
73
  goog.addDependency("../../../" + dir + "/core/field_checkbox.js", ['Blockly.FieldCheckbox'], ['Blockly.Field']);
73
74
  goog.addDependency("../../../" + dir + "/core/field_colour.js", ['Blockly.FieldColour'], ['Blockly.Field', 'Blockly.utils', 'goog.dom', 'goog.events', 'goog.style', 'goog.ui.ColorPicker']);
74
75
  goog.addDependency("../../../" + dir + "/core/field_colour_slider.js", ['Blockly.FieldColourSlider'], ['Blockly.Field', 'Blockly.DropDownDiv', 'goog.dom', 'goog.events', 'goog.style', 'goog.color', 'goog.ui.Slider']);
@@ -99,7 +100,7 @@ goog.addDependency("../../../" + dir + "/core/gesture.js", ['Blockly.Gesture'],
99
100
  goog.addDependency("../../../" + dir + "/core/grid.js", ['Blockly.Grid'], ['Blockly.utils', 'goog.userAgent']);
100
101
  goog.addDependency("../../../" + dir + "/core/icon.js", ['Blockly.Icon'], ['goog.dom', 'goog.math.Coordinate']);
101
102
  goog.addDependency("../../../" + dir + "/core/inject.js", ['Blockly.inject'], ['Blockly.BlockDragSurfaceSvg', 'Blockly.Css', 'Blockly.constants', 'Blockly.DropDownDiv', 'Blockly.Grid', 'Blockly.Options', 'Blockly.WorkspaceSvg', 'Blockly.WorkspaceDragSurfaceSvg', 'goog.dom', 'goog.ui.Component', 'goog.userAgent']);
102
- goog.addDependency("../../../" + dir + "/core/input.js", ['Blockly.Input'], ['Blockly.Connection', 'Blockly.FieldLabel', 'goog.asserts']);
103
+ goog.addDependency("../../../" + dir + "/core/input.js", ['Blockly.Input'], ['Blockly.Connection', 'Blockly.FieldLabel', 'goog.asserts', 'goog.dom']);
103
104
  goog.addDependency("../../../" + dir + "/core/insertion_marker_manager.js", ['Blockly.InsertionMarkerManager'], ['Blockly.BlockAnimations', 'Blockly.Events.BlockMove', 'Blockly.RenderedConnection', 'goog.math.Coordinate']);
104
105
  goog.addDependency("../../../" + dir + "/core/intersection_observer.js", ['Blockly.IntersectionObserver'], []);
105
106
  goog.addDependency("../../../" + dir + "/core/msg.js", ['Blockly.Msg'], []);
@@ -1127,6 +1128,7 @@ goog.require('Blockly.Events.VarRename');
1127
1128
  goog.require('Blockly.Extensions');
1128
1129
  goog.require('Blockly.Field');
1129
1130
  goog.require('Blockly.FieldAngle');
1131
+ goog.require('Blockly.FieldBooleanToggle');
1130
1132
  goog.require('Blockly.FieldCheckbox');
1131
1133
  goog.require('Blockly.FieldColour');
1132
1134
  goog.require('Blockly.FieldColourSlider');
@@ -49,7 +49,7 @@ goog.addDependency("../../../" + dir + "/core/block_dragger.js", ['Blockly.Block
49
49
  goog.addDependency("../../../" + dir + "/core/block_events.js", ['Blockly.Events.BlockBase', 'Blockly.Events.BlockChange', 'Blockly.Events.BlockCreate', 'Blockly.Events.BlockDelete', 'Blockly.Events.BlockMove', 'Blockly.Events.Change', 'Blockly.Events.Create', 'Blockly.Events.Delete', 'Blockly.Events.Move'], ['Blockly.Events', 'Blockly.Events.Abstract', 'goog.array', 'goog.math.Coordinate']);
50
50
  goog.addDependency("../../../" + dir + "/core/block_render_svg_vertical.js", ['Blockly.BlockSvg.render'], ['Blockly.BlockSvg', 'Blockly.scratchBlocksUtils', 'Blockly.utils']);
51
51
  goog.addDependency("../../../" + dir + "/core/block_svg.js", ['Blockly.BlockSvg'], ['Blockly.Block', 'Blockly.BlockAnimations', 'Blockly.ContextMenu', 'Blockly.Events.Ui', 'Blockly.Events.BlockMove', 'Blockly.Grid', 'Blockly.RenderedConnection', 'Blockly.scratchBlocksUtils', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.utils', 'goog.Timer', 'goog.asserts', 'goog.dom', 'goog.math.Coordinate']);
52
- goog.addDependency("../../../" + dir + "/core/blockly.js", ['Blockly'], ['Blockly.BlockSvg.render', 'Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.FieldAngle', 'Blockly.FieldCheckbox', 'Blockly.FieldColour', 'Blockly.FieldColourSlider', 'Blockly.FieldDropdown', 'Blockly.FieldIconMenu', 'Blockly.FieldImage', 'Blockly.FieldNote', 'Blockly.FieldTextInput', 'Blockly.FieldTextInputRemovable', 'Blockly.FieldTextDropdown', 'Blockly.FieldNumber', 'Blockly.FieldNumberDropdown', 'Blockly.FieldMatrix', 'Blockly.FieldVariable', 'Blockly.FieldVerticalSeparator', 'Blockly.Generator', 'Blockly.Msg', 'Blockly.Procedures', 'Blockly.ScratchMsgs', 'Blockly.Toolbox', 'Blockly.Touch', 'Blockly.WidgetDiv', 'Blockly.WorkspaceSvg', 'Blockly.constants', 'Blockly.inject', 'Blockly.utils', 'goog.color']);
52
+ goog.addDependency("../../../" + dir + "/core/blockly.js", ['Blockly'], ['Blockly.BlockSvg.render', 'Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.FieldAngle', 'Blockly.FieldBooleanToggle', 'Blockly.FieldCheckbox', 'Blockly.FieldColour', 'Blockly.FieldColourSlider', 'Blockly.FieldDropdown', 'Blockly.FieldIconMenu', 'Blockly.FieldImage', 'Blockly.FieldNote', 'Blockly.FieldTextInput', 'Blockly.FieldTextInputRemovable', 'Blockly.FieldTextDropdown', 'Blockly.FieldNumber', 'Blockly.FieldNumberDropdown', 'Blockly.FieldMatrix', 'Blockly.FieldVariable', 'Blockly.FieldVerticalSeparator', 'Blockly.Generator', 'Blockly.Msg', 'Blockly.Procedures', 'Blockly.ScratchMsgs', 'Blockly.Toolbox', 'Blockly.Touch', 'Blockly.WidgetDiv', 'Blockly.WorkspaceSvg', 'Blockly.constants', 'Blockly.inject', 'Blockly.utils', 'goog.color']);
53
53
  goog.addDependency("../../../" + dir + "/core/blocks.js", ['Blockly.Blocks'], []);
54
54
  goog.addDependency("../../../" + dir + "/core/bubble.js", ['Blockly.Bubble'], ['Blockly.Touch', 'Blockly.Workspace', 'goog.dom', 'goog.math.Coordinate', 'goog.userAgent']);
55
55
  goog.addDependency("../../../" + dir + "/core/bubble_dragger.js", ['Blockly.BubbleDragger'], ['Blockly.Bubble', 'Blockly.Events.CommentMove', 'Blockly.WorkspaceCommentSvg', 'goog.math.Coordinate', 'goog.asserts']);
@@ -69,6 +69,7 @@ goog.addDependency("../../../" + dir + "/core/events_abstract.js", ['Blockly.Eve
69
69
  goog.addDependency("../../../" + dir + "/core/extensions.js", ['Blockly.Extensions'], ['Blockly.Mutator', 'Blockly.utils', 'goog.string']);
70
70
  goog.addDependency("../../../" + dir + "/core/field.js", ['Blockly.Field'], ['Blockly.Events.BlockChange', 'Blockly.Gesture', 'goog.asserts', 'goog.dom', 'goog.math.Size', 'goog.style', 'goog.userAgent']);
71
71
  goog.addDependency("../../../" + dir + "/core/field_angle.js", ['Blockly.FieldAngle'], ['Blockly.DropDownDiv', 'Blockly.FieldTextInput', 'goog.math', 'goog.userAgent']);
72
+ goog.addDependency("../../../" + dir + "/core/field_boolean_toggle.js", ['Blockly.FieldBooleanToggle'], ['Blockly.Field', 'Blockly.Events.BlockChange', 'goog.math.Size']);
72
73
  goog.addDependency("../../../" + dir + "/core/field_checkbox.js", ['Blockly.FieldCheckbox'], ['Blockly.Field']);
73
74
  goog.addDependency("../../../" + dir + "/core/field_colour.js", ['Blockly.FieldColour'], ['Blockly.Field', 'Blockly.utils', 'goog.dom', 'goog.events', 'goog.style', 'goog.ui.ColorPicker']);
74
75
  goog.addDependency("../../../" + dir + "/core/field_colour_slider.js", ['Blockly.FieldColourSlider'], ['Blockly.Field', 'Blockly.DropDownDiv', 'goog.dom', 'goog.events', 'goog.style', 'goog.color', 'goog.ui.Slider']);
@@ -99,7 +100,7 @@ goog.addDependency("../../../" + dir + "/core/gesture.js", ['Blockly.Gesture'],
99
100
  goog.addDependency("../../../" + dir + "/core/grid.js", ['Blockly.Grid'], ['Blockly.utils', 'goog.userAgent']);
100
101
  goog.addDependency("../../../" + dir + "/core/icon.js", ['Blockly.Icon'], ['goog.dom', 'goog.math.Coordinate']);
101
102
  goog.addDependency("../../../" + dir + "/core/inject.js", ['Blockly.inject'], ['Blockly.BlockDragSurfaceSvg', 'Blockly.Css', 'Blockly.constants', 'Blockly.DropDownDiv', 'Blockly.Grid', 'Blockly.Options', 'Blockly.WorkspaceSvg', 'Blockly.WorkspaceDragSurfaceSvg', 'goog.dom', 'goog.ui.Component', 'goog.userAgent']);
102
- goog.addDependency("../../../" + dir + "/core/input.js", ['Blockly.Input'], ['Blockly.Connection', 'Blockly.FieldLabel', 'goog.asserts']);
103
+ goog.addDependency("../../../" + dir + "/core/input.js", ['Blockly.Input'], ['Blockly.Connection', 'Blockly.FieldLabel', 'goog.asserts', 'goog.dom']);
103
104
  goog.addDependency("../../../" + dir + "/core/insertion_marker_manager.js", ['Blockly.InsertionMarkerManager'], ['Blockly.BlockAnimations', 'Blockly.Events.BlockMove', 'Blockly.RenderedConnection', 'goog.math.Coordinate']);
104
105
  goog.addDependency("../../../" + dir + "/core/intersection_observer.js", ['Blockly.IntersectionObserver'], []);
105
106
  goog.addDependency("../../../" + dir + "/core/msg.js", ['Blockly.Msg'], []);
@@ -1127,6 +1128,7 @@ goog.require('Blockly.Events.VarRename');
1127
1128
  goog.require('Blockly.Extensions');
1128
1129
  goog.require('Blockly.Field');
1129
1130
  goog.require('Blockly.FieldAngle');
1131
+ goog.require('Blockly.FieldBooleanToggle');
1130
1132
  goog.require('Blockly.FieldCheckbox');
1131
1133
  goog.require('Blockly.FieldColour');
1132
1134
  goog.require('Blockly.FieldColourSlider');
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ goog.provide('Blockly.Blocks.boolean');
4
+
5
+ goog.require('Blockly.Blocks');
6
+ goog.require('Blockly.constants');
7
+
8
+ /** A compact boolean literal used as the default shadow for boolean inputs. */
9
+ Blockly.Blocks['operator_boolean'] = {
10
+ init: function() {
11
+ this.jsonInit({
12
+ "message0": "%1",
13
+ "args0": [{
14
+ "type": "field_boolean_toggle",
15
+ "name": "VALUE",
16
+ "value": "FALSE"
17
+ }],
18
+ "output": "Boolean",
19
+ "outputShape": Blockly.OUTPUT_SHAPE_HEXAGONAL,
20
+ "colour": "#59C059",
21
+ "colourSecondary": "#389438",
22
+ "colourTertiary": "#2E7D32"
23
+ });
24
+ },
25
+
26
+ getShadowColour: function() {
27
+ var value = this.getFieldValue('VALUE');
28
+ if (value === 'TRUE') return '#20D94B';
29
+ return this.parentBlock_ ? this.parentBlock_.getColourTertiary() : '#666666';
30
+ }
31
+ };
@@ -6,7 +6,7 @@ Blockly.constants={};Blockly.DRAG_RADIUS=3;Blockly.FLYOUT_DRAG_RADIUS=10;Blockly
6
6
  Blockly.INPUT_VALUE=1;Blockly.OUTPUT_VALUE=2;Blockly.NEXT_STATEMENT=3;Blockly.PREVIOUS_STATEMENT=4;Blockly.DUMMY_INPUT=5;Blockly.ALIGN_LEFT=-1;Blockly.ALIGN_CENTRE=0;Blockly.ALIGN_RIGHT=1;Blockly.DRAG_NONE=0;Blockly.DRAG_STICKY=1;Blockly.DRAG_BEGIN=1;Blockly.DRAG_FREE=2;Blockly.OPPOSITE_TYPE=[];Blockly.OPPOSITE_TYPE[Blockly.INPUT_VALUE]=Blockly.OUTPUT_VALUE;Blockly.OPPOSITE_TYPE[Blockly.OUTPUT_VALUE]=Blockly.INPUT_VALUE;Blockly.OPPOSITE_TYPE[Blockly.NEXT_STATEMENT]=Blockly.PREVIOUS_STATEMENT;
7
7
  Blockly.OPPOSITE_TYPE[Blockly.PREVIOUS_STATEMENT]=Blockly.NEXT_STATEMENT;Blockly.TOOLBOX_AT_TOP=0;Blockly.TOOLBOX_AT_BOTTOM=1;Blockly.TOOLBOX_AT_LEFT=2;Blockly.TOOLBOX_AT_RIGHT=3;Blockly.OUTPUT_SHAPE_HEXAGONAL=1;Blockly.OUTPUT_SHAPE_ROUND=2;Blockly.OUTPUT_SHAPE_SQUARE=3;Blockly.Categories={motion:"motion",looks:"looks",sound:"sounds",pen:"pen",data:"data",dataLists:"data-lists",event:"events",control:"control",sensing:"sensing",operators:"operators",more:"more"};Blockly.DELETE_AREA_NONE=null;
8
8
  Blockly.DELETE_AREA_TRASH=1;Blockly.DELETE_AREA_TOOLBOX=2;Blockly.VARIABLE_CATEGORY_NAME="VARIABLE";Blockly.PROCEDURE_CATEGORY_NAME="PROCEDURE";Blockly.RENAME_VARIABLE_ID="RENAME_VARIABLE_ID";Blockly.DELETE_VARIABLE_ID="DELETE_VARIABLE_ID";Blockly.NEW_BROADCAST_MESSAGE_ID="NEW_BROADCAST_MESSAGE_ID";Blockly.BROADCAST_MESSAGE_VARIABLE_TYPE="broadcast_msg";Blockly.LIST_VARIABLE_TYPE="list";Blockly.SCALAR_VARIABLE_TYPE="";Blockly.PROCEDURES_DEFINITION_BLOCK_TYPE="procedures_definition";
9
- Blockly.PROCEDURES_PROTOTYPE_BLOCK_TYPE="procedures_prototype";Blockly.PROCEDURES_CALL_BLOCK_TYPE="procedures_call";Blockly.PROCEDURES_CALL_TYPE_STATEMENT=0;Blockly.PROCEDURES_CALL_TYPE_REPORTER=1;Blockly.PROCEDURES_CALL_TYPE_BOOLEAN=2;Blockly.PROCEDURES_RETURN_BLOCK_TYPE="procedures_return";Blockly.StatusButtonState={READY:"ready",NOT_READY:"not ready"};
9
+ Blockly.PROCEDURES_PROTOTYPE_BLOCK_TYPE="procedures_prototype";Blockly.PROCEDURES_CALL_BLOCK_TYPE="procedures_call";Blockly.PROCEDURES_CALL_TYPE_STATEMENT=0;Blockly.PROCEDURES_CALL_TYPE_REPORTER=1;Blockly.PROCEDURES_CALL_TYPE_BOOLEAN=2;Blockly.PROCEDURES_RETURN_BLOCK_TYPE="procedures_return";Blockly.StatusButtonState={READY:"ready",NOT_READY:"not ready"};Blockly.Blocks.boolean={};Blockly.Blocks.operator_boolean={init:function(){this.jsonInit({message0:"%1",args0:[{type:"field_boolean_toggle",name:"VALUE",value:"FALSE"}],output:"Boolean",outputShape:Blockly.OUTPUT_SHAPE_HEXAGONAL,colour:"#59C059",colourSecondary:"#389438",colourTertiary:"#2E7D32"})},getShadowColour:function(){return"TRUE"===this.getFieldValue("VALUE")?"#20D94B":this.parentBlock_?this.parentBlock_.getColourTertiary():"#666666"}};
10
10
  Blockly.Blocks.colour={};function randomColour(){return"#"+("00000"+Math.floor(Math.random()*Math.pow(2,24)).toString(16)).substr(-6)}Blockly.Blocks.colour_picker={init:function(){this.jsonInit({message0:"%1",args0:[{type:"field_colour_slider",name:"COLOUR",colour:randomColour()}],outputShape:Blockly.OUTPUT_SHAPE_ROUND,output:"Colour"})}};/*
11
11
 
12
12
  Visual Blocks Editor
@@ -160,10 +160,10 @@ Blockly.ScratchBlocks.ProcedureUtils.updateDisplay_=function(){var a=this.render
160
160
  Blockly.ScratchBlocks.ProcedureUtils.removeAllInputs_=function(){for(var a=0,b;b=this.inputList[a];a++)b.dispose();this.inputList=[]};
161
161
  Blockly.ScratchBlocks.ProcedureUtils.createAllInputs_=function(a){var b=this.procCode_.split(/(?=[^\\]%[nbs])/);b=b.map(function(a){return a.trim()});for(var c=0,d=!1,e=0,f;f=b[e];e++){if("%"==f.substring(0,1)){d=f.substring(1,2);if("n"!=d&&"b"!=d&&"s"!=d)throw Error("Found an custom procedure with an invalid type: "+d);f=f.substring(2).trim();var g=this.argumentIds_[c],h=this.appendValueInput(g);"b"==d&&h.setCheck("Boolean");this.populateArgument_(d,c,a,g,h);d=!0;c++}else f=f.trim();if(f=f.replace(/\\%/,
162
162
  "%"))this.addProcedureLabel_(f),d=!0}d||this.addProcedureLabel_(" ")};Blockly.ScratchBlocks.ProcedureUtils.deleteShadows_=function(a){if(a)for(var b in a){var c=a[b];c&&(c=c.block)&&c.isShadow()&&(c.dispose(),a[b]=null)}};Blockly.ScratchBlocks.ProcedureUtils.addLabelField_=function(a){this.appendDummyInput().appendField(a)};Blockly.ScratchBlocks.ProcedureUtils.addLabelEditor_=function(a){a&&this.appendDummyInput(Blockly.utils.genUid()).appendField(new Blockly.FieldTextInputRemovable(a))};
163
- Blockly.ScratchBlocks.ProcedureUtils.buildShadowDom_=function(a){var b=goog.dom.createDom("shadow");if("n"==a){var c="math_number";a="NUM";var d="1"}else c="text",a="TEXT",d="";b.setAttribute("type",c);c=goog.dom.createDom("field",null,d);c.setAttribute("name",a);b.appendChild(c);return b};
164
- Blockly.ScratchBlocks.ProcedureUtils.attachShadow_=function(a,b){if("n"==b||"s"==b){var c="n"==b?"math_number":"text";Blockly.Events.disable();try{var d=this.workspace.newBlock(c);"n"==b?d.setFieldValue("1","NUM"):d.setFieldValue("","TEXT");d.setShadow(!0);this.isInsertionMarker()||(d.initSvg(),d.render(!1))}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockCreate(d));d.outputConnection.connect(a.connection)}};
163
+ Blockly.ScratchBlocks.ProcedureUtils.buildShadowDom_=function(a){var b=goog.dom.createDom("shadow");if("b"==a){var c="operator_boolean";a="VALUE";var d="FALSE"}else"n"==a?(c="math_number",a="NUM",d="1"):(c="text",a="TEXT",d="");b.setAttribute("type",c);c=goog.dom.createDom("field",null,d);c.setAttribute("name",a);b.appendChild(c);return b};
164
+ Blockly.ScratchBlocks.ProcedureUtils.attachShadow_=function(a,b){if("b"==b||"n"==b||"s"==b){var c="b"==b?"operator_boolean":"n"==b?"math_number":"text";Blockly.Events.disable();try{var d=this.workspace.newBlock(c);"b"==b?d.setFieldValue("FALSE","VALUE"):"n"==b?d.setFieldValue("1","NUM"):d.setFieldValue("","TEXT");d.setShadow(!0);this.isInsertionMarker()||(d.initSvg(),d.render(!1))}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockCreate(d));d.outputConnection.connect(a.connection)}};
165
165
  Blockly.ScratchBlocks.ProcedureUtils.createArgumentReporter_=function(a,b){a="n"==a||"s"==a?"argument_reporter_string_number":"argument_reporter_boolean";Blockly.Events.disable();try{var c=this.workspace.newBlock(a);c.setShadow(!0);c.setFieldValue(b,"VALUE");this.isInsertionMarker()||(c.initSvg(),c.render(!1))}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockCreate(c));return c};
166
- Blockly.ScratchBlocks.ProcedureUtils.populateArgumentOnCaller_=function(a,b,c,d,e){var f=b=null;c&&d in c&&(d=c[d],b=d.block,f=d.shadow);c&&b?(c[e.name]=null,b.outputConnection.connect(e.connection),"b"!=a&&this.generateShadows_&&(a=f||this.buildShadowDom_(a),console.log("setting shadow dom: "+a),e.connection.setShadowDom(a))):this.generateShadows_&&this.attachShadow_(e,a)};
166
+ Blockly.ScratchBlocks.ProcedureUtils.populateArgumentOnCaller_=function(a,b,c,d,e){var f=b=null;c&&d in c&&(d=c[d],b=d.block,f=d.shadow);c&&b?(c[e.name]=null,b.outputConnection.connect(e.connection),this.generateShadows_&&(a=f||this.buildShadowDom_(a),console.log("setting shadow dom: "+a),e.connection.setShadowDom(a))):this.generateShadows_&&this.attachShadow_(e,a)};
167
167
  Blockly.ScratchBlocks.ProcedureUtils.populateArgumentOnPrototype_=function(a,b,c,d,e){var f=null;c&&d in c&&(f=c[d].block);d=Blockly.ScratchBlocks.ProcedureUtils.checkOldTypeMatches_(f,a);b=this.displayNames_[b];c&&f&&d?(a=f,a.setFieldValue(b,"VALUE"),c[e.name]=null):a=this.createArgumentReporter_(a,b);e.connection.connect(a.outputConnection)};
168
168
  Blockly.ScratchBlocks.ProcedureUtils.populateArgumentOnDeclaration_=function(a,b,c,d,e){var f=null;c&&d in c&&(f=c[d].block);d=Blockly.ScratchBlocks.ProcedureUtils.checkOldTypeMatches_(f,a);b=this.displayNames_[b];f&&d?(a=f,f.setFieldValue(b,"TEXT"),c[e.name]=null):a=this.createArgumentEditor_(a,b);e.connection.connect(a.outputConnection)};
169
169
  Blockly.ScratchBlocks.ProcedureUtils.checkOldTypeMatches_=function(a,b){return a?("n"==b||"s"==b)&&"argument_reporter_string_number"==a.type||"b"==b&&"argument_reporter_boolean"==a.type?!0:!1:!1};
@@ -337,14 +337,18 @@ Blockly.ScratchBlocks.ProcedureUtils.addLabelEditor_ = function(text) {
337
337
 
338
338
  /**
339
339
  * Build a DOM node representing a shadow block of the given type.
340
- * @param {string} type One of 's' (string) or 'n' (number).
340
+ * @param {string} type One of 'b' (boolean), 's' (string) or 'n' (number).
341
341
  * @return {!Element} The DOM node representing the new shadow block.
342
342
  * @private
343
343
  * @this Blockly.Block
344
344
  */
345
345
  Blockly.ScratchBlocks.ProcedureUtils.buildShadowDom_ = function(type) {
346
346
  var shadowDom = goog.dom.createDom('shadow');
347
- if (type == 'n') {
347
+ if (type == 'b') {
348
+ var shadowType = 'operator_boolean';
349
+ var fieldName = 'VALUE';
350
+ var fieldValue = 'FALSE';
351
+ } else if (type == 'n') {
348
352
  var shadowType = 'math_number';
349
353
  var fieldName = 'NUM';
350
354
  var fieldValue = '1';
@@ -370,12 +374,15 @@ Blockly.ScratchBlocks.ProcedureUtils.buildShadowDom_ = function(type) {
370
374
  */
371
375
  Blockly.ScratchBlocks.ProcedureUtils.attachShadow_ = function(input,
372
376
  argumentType) {
373
- if (argumentType == 'n' || argumentType == 's') {
374
- var blockType = argumentType == 'n' ? 'math_number' : 'text';
377
+ if (argumentType == 'b' || argumentType == 'n' || argumentType == 's') {
378
+ var blockType = argumentType == 'b' ? 'operator_boolean' :
379
+ (argumentType == 'n' ? 'math_number' : 'text');
375
380
  Blockly.Events.disable();
376
381
  try {
377
382
  var newBlock = this.workspace.newBlock(blockType);
378
- if (argumentType == 'n') {
383
+ if (argumentType == 'b') {
384
+ newBlock.setFieldValue('FALSE', 'VALUE');
385
+ } else if (argumentType == 'n') {
379
386
  newBlock.setFieldValue('1', 'NUM');
380
387
  } else {
381
388
  newBlock.setFieldValue('', 'TEXT');
@@ -456,7 +463,7 @@ Blockly.ScratchBlocks.ProcedureUtils.populateArgumentOnCaller_ = function(type,
456
463
  // Reattach the old block and shadow DOM.
457
464
  connectionMap[input.name] = null;
458
465
  oldBlock.outputConnection.connect(input.connection);
459
- if (type != 'b' && this.generateShadows_) {
466
+ if (this.generateShadows_) {
460
467
  var shadowDom = oldShadow || this.buildShadowDom_(type);
461
468
  console.log("setting shadow dom: " + shadowDom);
462
469
  input.connection.setShadowDom(shadowDom);
@@ -542,6 +542,10 @@ Blockly.BlockSvg.prototype.updateColour = function() {
542
542
  if (input.outlinePath) {
543
543
  input.outlinePath.setAttribute('fill', this.getColourTertiary());
544
544
  }
545
+ var inputBlock = input.connection && input.connection.targetBlock();
546
+ if (inputBlock && inputBlock.type === 'operator_boolean' && inputBlock.rendered) {
547
+ inputBlock.updateColour();
548
+ }
545
549
  }
546
550
 
547
551
  // Render icon(s) if applicable
@@ -631,6 +635,16 @@ Blockly.BlockSvg.prototype.getHeightWidth = function() {
631
635
  * If true, also render block's parent, grandparent, etc. Defaults to true.
632
636
  */
633
637
  Blockly.BlockSvg.prototype.render = function(opt_bubble) {
638
+ if (!this.isInsertionMarker()) {
639
+ for (var booleanIndex = 0, booleanInput;
640
+ booleanInput = this.inputList[booleanIndex]; booleanIndex++) {
641
+ if (booleanInput.connection && !booleanInput.connection.isConnected() &&
642
+ booleanInput.connection.getShadowDom() &&
643
+ booleanInput.connection.getOutputShape() === Blockly.OUTPUT_SHAPE_HEXAGONAL) {
644
+ booleanInput.connection.respawnShadow_();
645
+ }
646
+ }
647
+ }
634
648
  Blockly.Field.startCache();
635
649
  this.rendered = true;
636
650
 
package/core/block_svg.js CHANGED
@@ -151,6 +151,16 @@ Blockly.BlockSvg.INLINE = -1;
151
151
  Blockly.BlockSvg.prototype.initSvg = function() {
152
152
  goog.asserts.assert(this.workspace.rendered, 'Workspace is headless.');
153
153
  if (!this.isInsertionMarker()) { // Insertion markers not allowed to have inputs or icons
154
+ // Materialize default boolean shadows after the parent block has finished
155
+ // defining all of its inputs. XML loading already supplies its own shadow.
156
+ for (var inputIndex = 0, booleanInput;
157
+ booleanInput = this.inputList[inputIndex]; inputIndex++) {
158
+ if (booleanInput.connection && !booleanInput.connection.isConnected() &&
159
+ booleanInput.connection.getShadowDom() &&
160
+ booleanInput.connection.getOutputShape() === Blockly.OUTPUT_SHAPE_HEXAGONAL) {
161
+ booleanInput.connection.respawnShadow_();
162
+ }
163
+ }
154
164
  // Input shapes are empty holes drawn when a value input is not connected.
155
165
  for (var i = 0, input; input = this.inputList[i]; i++) {
156
166
  input.init();
package/core/blockly.js CHANGED
@@ -34,6 +34,7 @@ goog.require('Blockly.BlockSvg.render');
34
34
  goog.require('Blockly.DropDownDiv');
35
35
  goog.require('Blockly.Events');
36
36
  goog.require('Blockly.FieldAngle');
37
+ goog.require('Blockly.FieldBooleanToggle');
37
38
  goog.require('Blockly.FieldCheckbox');
38
39
  goog.require('Blockly.FieldColour');
39
40
  goog.require('Blockly.FieldColourSlider');
@@ -0,0 +1,81 @@
1
+ 'use strict';
2
+
3
+ goog.provide('Blockly.FieldBooleanToggle');
4
+
5
+ goog.require('Blockly.Field');
6
+ goog.require('Blockly.Events.BlockChange');
7
+ goog.require('goog.math.Size');
8
+
9
+ /**
10
+ * Clickable TRUE/FALSE field used by the boolean shadow block.
11
+ * @param {string|boolean} state Initial state.
12
+ * @extends {Blockly.Field}
13
+ * @constructor
14
+ */
15
+ Blockly.FieldBooleanToggle = function(state) {
16
+ Blockly.FieldBooleanToggle.superClass_.constructor.call(this, '');
17
+ this.size_ = new goog.math.Size(32, 24);
18
+ this.setValue(state);
19
+ this.addArgType('boolean');
20
+ };
21
+ goog.inherits(Blockly.FieldBooleanToggle, Blockly.Field);
22
+
23
+ Blockly.FieldBooleanToggle.fromJson = function(options) {
24
+ return new Blockly.FieldBooleanToggle(options['value'] || 'FALSE');
25
+ };
26
+
27
+ Blockly.FieldBooleanToggle.prototype.CURSOR = 'pointer';
28
+
29
+ Blockly.FieldBooleanToggle.prototype.render_ = function() {
30
+ this.size_.width = 32;
31
+ this.size_.height = 24;
32
+ };
33
+
34
+ Blockly.FieldBooleanToggle.prototype.init = function() {
35
+ if (this.fieldGroup_) return;
36
+ Blockly.FieldBooleanToggle.superClass_.init.call(this);
37
+ this.textElement_.style.display = 'none';
38
+ this.iconElement_ = Blockly.utils.createSvgElement('path', {
39
+ 'fill': 'none',
40
+ 'stroke': '#ffffff',
41
+ 'stroke-width': 4,
42
+ 'stroke-linecap': 'round',
43
+ 'stroke-linejoin': 'round',
44
+ 'pointer-events': 'none'
45
+ }, this.fieldGroup_);
46
+ this.updateIcon_();
47
+ };
48
+
49
+ Blockly.FieldBooleanToggle.prototype.getValue = function() {
50
+ return this.state_ ? 'TRUE' : 'FALSE';
51
+ };
52
+
53
+ Blockly.FieldBooleanToggle.prototype.setValue = function(newValue) {
54
+ var newState = typeof newValue == 'string' ?
55
+ newValue.toUpperCase() == 'TRUE' : !!newValue;
56
+ if (this.state_ === newState) return;
57
+ var oldValue = this.getValue();
58
+ if (this.sourceBlock_ && Blockly.Events.isEnabled()) {
59
+ Blockly.Events.fire(new Blockly.Events.BlockChange(
60
+ this.sourceBlock_, 'field', this.name, oldValue,
61
+ newState ? 'TRUE' : 'FALSE'));
62
+ }
63
+ this.state_ = newState;
64
+ this.updateIcon_();
65
+ if (this.sourceBlock_ && this.sourceBlock_.rendered) {
66
+ this.sourceBlock_.updateColour();
67
+ }
68
+ };
69
+
70
+ Blockly.FieldBooleanToggle.prototype.updateIcon_ = function() {
71
+ if (!this.iconElement_) return;
72
+ this.iconElement_.setAttribute('d', this.state_ ?
73
+ 'M 8 12 L 13 17 L 24 6' :
74
+ 'M 10 6 L 22 18 M 22 6 L 10 18');
75
+ };
76
+
77
+ Blockly.FieldBooleanToggle.prototype.showEditor_ = function() {
78
+ this.setValue(!this.state_);
79
+ };
80
+
81
+ Blockly.Field.register('field_boolean_toggle', Blockly.FieldBooleanToggle);
package/core/input.js CHANGED
@@ -29,6 +29,7 @@ goog.provide('Blockly.Input');
29
29
  goog.require('Blockly.Connection');
30
30
  goog.require('Blockly.FieldLabel');
31
31
  goog.require('goog.asserts');
32
+ goog.require('goog.dom');
32
33
 
33
34
 
34
35
  /**
@@ -215,6 +216,20 @@ Blockly.Input.prototype.setCheck = function(check) {
215
216
  throw 'This input does not have a connection.';
216
217
  }
217
218
  this.connection.setCheck(check);
219
+ if (check === 'Boolean' ||
220
+ (goog.isArray(check) && check.indexOf('Boolean') !== -1)) {
221
+ var workspace = this.sourceBlock_.workspace;
222
+ if (!workspace.isMutator && !this.sourceBlock_.isInsertionMarker() &&
223
+ this.sourceBlock_.type !== 'procedures_definition' &&
224
+ !this.connection.getShadowDom()) {
225
+ var shadow = goog.dom.createDom('shadow');
226
+ shadow.setAttribute('type', 'operator_boolean');
227
+ var field = goog.dom.createDom('field', null, 'FALSE');
228
+ field.setAttribute('name', 'VALUE');
229
+ shadow.appendChild(field);
230
+ this.connection.setShadowDom(shadow);
231
+ }
232
+ }
218
233
  return this;
219
234
  };
220
235