@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.
- package/blockly_compressed_horizontal.js +11 -6
- package/blockly_compressed_vertical.js +15 -10
- package/blockly_uncompressed_horizontal.js +4 -2
- package/blockly_uncompressed_vertical.js +4 -2
- package/blocks_common/boolean.js +31 -0
- package/blocks_compressed.js +1 -1
- package/blocks_compressed_vertical.js +3 -3
- package/blocks_vertical/procedures.js +13 -6
- package/core/block_render_svg_vertical.js +14 -0
- package/core/block_svg.js +10 -0
- package/core/blockly.js +1 -0
- package/core/field_boolean_toggle.js +81 -0
- package/core/input.js +15 -0
- package/dist/horizontal.js +2 -2
- package/dist/vertical.js +3 -3
- package/dist/web/horizontal.js +2 -2
- package/dist/web/vertical.js +3 -3
- package/package.json +2 -2
|
@@ -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};
|
|
1131
|
-
Blockly.Input.prototype.
|
|
1132
|
-
Blockly.Input.prototype.
|
|
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();
|
|
1460
|
-
this.
|
|
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.
|
|
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};
|
|
1131
|
-
Blockly.Input.prototype.
|
|
1132
|
-
Blockly.Input.prototype.
|
|
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();
|
|
1460
|
-
this.
|
|
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=
|
|
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;
|
|
1516
|
-
this.
|
|
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.
|
|
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
|
+
};
|
package/blocks_compressed.js
CHANGED
|
@@ -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("
|
|
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),
|
|
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 == '
|
|
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 == '
|
|
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 == '
|
|
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 (
|
|
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
|
|