From 57868e7e83d260c913d21b2fb4632c375c2ab0dd Mon Sep 17 00:00:00 2001 From: Sam El-Husseini <16690124+samelhusseini@users.noreply.github.com> Date: Tue, 30 Jul 2019 11:22:08 -0700 Subject: [PATCH] Remove all calls to goog.math (#2739) * Replace calls to goog.math.Size and goog.math.Coordinate with Blockly equivelants --- blockly_compressed.js | 33 ++++++------ blockly_uncompressed.js | 20 ++++---- core/field.js | 10 ++-- core/field_checkbox.js | 5 +- core/field_colour.js | 9 ++-- core/field_dropdown.js | 5 +- core/field_image.js | 9 ++-- core/field_label.js | 9 ++-- core/field_textinput.js | 5 +- core/field_variable.js | 4 +- core/gesture.js | 2 +- core/icon.js | 5 +- core/ui_menu_utils.js | 4 +- core/utils.js | 2 +- core/utils/size.js | 72 +++++++++++++++++++++++++++ core/widgetdiv.js | 6 +-- demos/custom-fields/field_turtle.js | 3 +- tests/jsunit/event_test.js | 10 ++-- tests/mocha/astnode_test.js | 10 ++-- tests/mocha/event_test.js | 6 +-- tests/mocha/navigation_modify_test.js | 8 +-- 21 files changed, 156 insertions(+), 81 deletions(-) create mode 100644 core/utils/size.js diff --git a/blockly_compressed.js b/blockly_compressed.js index 8d800bc26..7de1f9df2 100644 --- a/blockly_compressed.js +++ b/blockly_compressed.js @@ -1042,13 +1042,13 @@ Blockly.Bubble.prototype.renderArrow_=function(){var a=[],b=this.width_/2,c=this n*d;e=c+n*e;n=b+h*l;var m=c+h*k;b-=h*l;c-=h*k;k=g+this.arrow_radians_;k>2*Math.PI&&(k-=2*Math.PI);g=Math.sin(k)*f/Blockly.Bubble.ARROW_BEND;f=Math.cos(k)*f/Blockly.Bubble.ARROW_BEND;a.push("M"+n+","+m);a.push("C"+(n+f)+","+(m+g)+" "+d+","+e+" "+d+","+e);a.push("C"+d+","+e+" "+(b+f)+","+(c+g)+" "+b+","+c)}a.push("z");this.bubbleArrow_.setAttribute("d",a.join(" "))};Blockly.Bubble.prototype.setColour=function(a){this.bubbleBack_.setAttribute("fill",a);this.bubbleArrow_.setAttribute("fill",a)}; Blockly.Bubble.prototype.dispose=function(){Blockly.Bubble.unbindDragEvents_();Blockly.utils.dom.removeNode(this.bubbleGroup_);this.shape_=this.content_=this.workspace_=this.resizeGroup_=this.bubbleBack_=this.bubbleArrow_=this.bubbleGroup_=null};Blockly.Bubble.prototype.moveDuringDrag=function(a,b){a?a.translateSurface(b.x,b.y):this.moveTo(b.x,b.y);this.relativeLeft_=this.workspace_.RTL?this.anchorXY_.x-b.x-this.width_:b.x-this.anchorXY_.x;this.relativeTop_=b.y-this.anchorXY_.y;this.renderArrow_()}; Blockly.Bubble.prototype.getRelativeToSurfaceXY=function(){return new Blockly.utils.Coordinate(this.anchorXY_.x+this.relativeLeft_,this.anchorXY_.y+this.relativeTop_)};Blockly.Bubble.prototype.setAutoLayout=function(a){this.autoLayout_=a};Blockly.Events.Ui=function(a,b,c,d){Blockly.Events.Ui.superClass_.constructor.call(this);this.blockId=a?a.id:null;this.workspaceId=a?a.workspace.id:null;this.element=b;this.oldValue=c;this.newValue=d;this.recordUndo=!1};goog.inherits(Blockly.Events.Ui,Blockly.Events.Abstract);Blockly.Events.Ui.prototype.type=Blockly.Events.UI; -Blockly.Events.Ui.prototype.toJson=function(){var a=Blockly.Events.Ui.superClass_.toJson.call(this);a.element=this.element;void 0!==this.newValue&&(a.newValue=this.newValue);this.blockId&&(a.blockId=this.blockId);return a};Blockly.Events.Ui.prototype.fromJson=function(a){Blockly.Events.Ui.superClass_.fromJson.call(this,a);this.element=a.element;this.newValue=a.newValue;this.blockId=a.blockId};Blockly.Icon=function(a){this.block_=a};Blockly.Icon.prototype.collapseHidden=!0;Blockly.Icon.prototype.SIZE=17;Blockly.Icon.prototype.bubble_=null;Blockly.Icon.prototype.iconXY_=null; +Blockly.Events.Ui.prototype.toJson=function(){var a=Blockly.Events.Ui.superClass_.toJson.call(this);a.element=this.element;void 0!==this.newValue&&(a.newValue=this.newValue);this.blockId&&(a.blockId=this.blockId);return a};Blockly.Events.Ui.prototype.fromJson=function(a){Blockly.Events.Ui.superClass_.fromJson.call(this,a);this.element=a.element;this.newValue=a.newValue;this.blockId=a.blockId};Blockly.utils.Size=function(a,b){this.width=a;this.height=b};Blockly.utils.Size.equals=function(a,b){return a==b?!0:a&&b?a.width==b.width&&a.height==b.height:!1};Blockly.Icon=function(a){this.block_=a};Blockly.Icon.prototype.collapseHidden=!0;Blockly.Icon.prototype.SIZE=17;Blockly.Icon.prototype.bubble_=null;Blockly.Icon.prototype.iconXY_=null; Blockly.Icon.prototype.createIcon=function(){this.iconGroup_||(this.iconGroup_=Blockly.utils.dom.createSvgElement("g",{"class":"blocklyIconGroup"},null),this.block_.isInFlyout&&Blockly.utils.dom.addClass(this.iconGroup_,"blocklyIconGroupReadonly"),this.drawIcon_(this.iconGroup_),this.block_.getSvgRoot().appendChild(this.iconGroup_),Blockly.bindEventWithChecks_(this.iconGroup_,"mouseup",this,this.iconClick_),this.updateEditable())}; Blockly.Icon.prototype.dispose=function(){Blockly.utils.dom.removeNode(this.iconGroup_);this.iconGroup_=null;this.setVisible(!1);this.block_=null};Blockly.Icon.prototype.updateEditable=function(){};Blockly.Icon.prototype.isVisible=function(){return!!this.bubble_};Blockly.Icon.prototype.iconClick_=function(a){this.block_.workspace.isDragging()||this.block_.isInFlyout||Blockly.utils.isRightButton(a)||this.setVisible(!this.isVisible())}; Blockly.Icon.prototype.updateColour=function(){this.isVisible()&&this.bubble_.setColour(this.block_.getColour())}; Blockly.Icon.prototype.renderIcon=function(a){if(this.collapseHidden&&this.block_.isCollapsed()||this.block_.isInsertionMarker())return this.iconGroup_.setAttribute("display","none"),a;this.iconGroup_.setAttribute("display","block");var b=this.SIZE;this.block_.RTL&&(a-=b);this.iconGroup_.setAttribute("transform","translate("+a+",5)");this.computeIconLocation();return a=this.block_.RTL?a-Blockly.BlockSvg.SEP_SPACE_X:a+(b+Blockly.BlockSvg.SEP_SPACE_X)}; Blockly.Icon.prototype.setIconLocation=function(a){this.iconXY_=a;this.isVisible()&&this.bubble_.setAnchorLocation(a)};Blockly.Icon.prototype.computeIconLocation=function(){var a=this.block_.getRelativeToSurfaceXY(),b=Blockly.utils.getRelativeXY(this.iconGroup_);a=new Blockly.utils.Coordinate(a.x+b.x+this.SIZE/2,a.y+b.y+this.SIZE/2);Blockly.utils.Coordinate.equals(this.getIconLocation(),a)||this.setIconLocation(a)};Blockly.Icon.prototype.getIconLocation=function(){return this.iconXY_}; -Blockly.Icon.prototype.getCorrectedSize=function(){return new goog.math.Size(Blockly.Icon.prototype.SIZE,Blockly.Icon.prototype.SIZE-2)}; +Blockly.Icon.prototype.getCorrectedSize=function(){return new Blockly.utils.Size(Blockly.Icon.prototype.SIZE,Blockly.Icon.prototype.SIZE-2)}; Blockly.Comment=function(a){Blockly.Comment.superClass_.constructor.call(this,a);this.createIcon()};goog.inherits(Blockly.Comment,Blockly.Icon);Blockly.Comment.prototype.text_="";Blockly.Comment.prototype.width_=160;Blockly.Comment.prototype.height_=80; Blockly.Comment.prototype.drawIcon_=function(a){Blockly.utils.dom.createSvgElement("circle",{"class":"blocklyIconShape",r:"8",cx:"8",cy:"8"},a);Blockly.utils.dom.createSvgElement("path",{"class":"blocklyIconSymbol",d:"m6.8,10h2c0.003,-0.617 0.271,-0.962 0.633,-1.266 2.875,-2.4050.607,-5.534 -3.765,-3.874v1.7c3.12,-1.657 3.698,0.118 2.336,1.25-1.201,0.998 -1.201,1.528 -1.204,2.19z"},a);Blockly.utils.dom.createSvgElement("rect",{"class":"blocklyIconSymbol",x:"6.8",y:"10.78",height:"2",width:"2"},a)}; Blockly.Comment.prototype.createEditor_=function(){this.foreignObject_=Blockly.utils.dom.createSvgElement("foreignObject",{x:Blockly.Bubble.BORDER_WIDTH,y:Blockly.Bubble.BORDER_WIDTH},null);var a=document.createElementNS(Blockly.utils.dom.HTML_NS,"body");a.setAttribute("xmlns",Blockly.utils.dom.HTML_NS);a.className="blocklyMinimalBody";var b=document.createElementNS(Blockly.utils.dom.HTML_NS,"textarea");b.className="blocklyCommentTextarea";b.setAttribute("dir",this.block_.RTL?"RTL":"LTR");a.appendChild(b); @@ -1208,7 +1208,7 @@ Blockly.Gesture.prototype.handleWsStart=function(a,b){if(this.hasStarted_)throw Blockly.Gesture.prototype.handleBlockStart=function(a,b){if(this.hasStarted_)throw Error("Tried to call gesture.handleBlockStart, but the gesture had already been started.");this.setStartBlock(b);this.mostRecentEvent_=a};Blockly.Gesture.prototype.handleBubbleStart=function(a,b){if(this.hasStarted_)throw Error("Tried to call gesture.handleBubbleStart, but the gesture had already been started.");this.setStartBubble(b);this.mostRecentEvent_=a}; Blockly.Gesture.prototype.doBubbleClick_=function(){this.startBubble_.setFocus&&this.startBubble_.setFocus();this.startBubble_.select&&this.startBubble_.select()};Blockly.Gesture.prototype.doFieldClick_=function(){this.startField_.showEditor_();this.bringBlockToFront_()}; Blockly.Gesture.prototype.doBlockClick_=function(){this.flyout_&&this.flyout_.autoClose?this.targetBlock_.isEnabled()&&(Blockly.Events.getGroup()||Blockly.Events.setGroup(!0),this.flyout_.createBlock(this.targetBlock_).scheduleSnapAndBump()):Blockly.Events.fire(new Blockly.Events.Ui(this.startBlock_,"click",void 0,void 0));this.bringBlockToFront_();Blockly.Events.setGroup(!1)}; -Blockly.Gesture.prototype.doWorkspaceClick_=function(a){Blockly.keyboardAccessibilityMode=!1;var b=this.creatorWorkspace_;b.cursor.hide();a.shiftKey?(a=new goog.math.Coordinate(a.clientX,a.clientY),a=Blockly.utils.screenToWsCoordinates(b,a),a=Blockly.ASTNode.createWorkspaceNode(b,a),b.cursor.setLocation(a),Blockly.keyboardAccessibilityMode=!0):Blockly.selected&&Blockly.selected.unselect()};Blockly.Gesture.prototype.bringBlockToFront_=function(){this.targetBlock_&&!this.flyout_&&this.targetBlock_.bringToFront()}; +Blockly.Gesture.prototype.doWorkspaceClick_=function(a){Blockly.keyboardAccessibilityMode=!1;var b=this.creatorWorkspace_;b.cursor.hide();a.shiftKey?(a=new Blockly.utils.Coordinate(a.clientX,a.clientY),a=Blockly.utils.screenToWsCoordinates(b,a),a=Blockly.ASTNode.createWorkspaceNode(b,a),b.cursor.setLocation(a),Blockly.keyboardAccessibilityMode=!0):Blockly.selected&&Blockly.selected.unselect()};Blockly.Gesture.prototype.bringBlockToFront_=function(){this.targetBlock_&&!this.flyout_&&this.targetBlock_.bringToFront()}; Blockly.Gesture.prototype.setStartField=function(a){if(this.hasStarted_)throw Error("Tried to call gesture.setStartField, but the gesture had already been started.");this.startField_||(this.startField_=a)};Blockly.Gesture.prototype.setStartBubble=function(a){this.startBubble_||(this.startBubble_=a)};Blockly.Gesture.prototype.setStartBlock=function(a){this.startBlock_||this.startBubble_||(this.startBlock_=a,a.isInFlyout&&a!=a.getRootBlock()?this.setTargetBlock_(a.getRootBlock()):this.setTargetBlock_(a))}; Blockly.Gesture.prototype.setTargetBlock_=function(a){a.isShadow()?this.setTargetBlock_(a.getParent()):this.targetBlock_=a};Blockly.Gesture.prototype.setStartWorkspace_=function(a){this.startWorkspace_||(this.startWorkspace_=a)};Blockly.Gesture.prototype.setStartFlyout_=function(a){this.flyout_||(this.flyout_=a)};Blockly.Gesture.prototype.isBubbleClick_=function(){return!!this.startBubble_&&!this.hasExceededDragRadius_}; Blockly.Gesture.prototype.isBlockClick_=function(){return!!this.startBlock_&&!this.hasExceededDragRadius_&&!this.isFieldClick_()};Blockly.Gesture.prototype.isFieldClick_=function(){return(this.startField_?this.startField_.isClickable():!1)&&!this.hasExceededDragRadius_&&(!this.flyout_||!this.flyout_.autoClose)};Blockly.Gesture.prototype.isWorkspaceClick_=function(){return!this.startBlock_&&!this.startBubble_&&!this.startField_&&!this.hasExceededDragRadius_}; @@ -1417,7 +1417,7 @@ Blockly.Extensions.getMutatorProperties_=function(a){var b=[];void 0!==a.domToMu Blockly.Extensions.buildTooltipForDropdown=function(a,b){var c=[];"object"==typeof document&&Blockly.utils.runAfterPageLoad(function(){for(var a in b)Blockly.utils.checkMessageReferences(b[a])});return function(){this.type&&-1===c.indexOf(this.type)&&(Blockly.Extensions.checkDropdownOptionsInTable_(this,a,b),c.push(this.type));this.setTooltip(function(){var d=this.getFieldValue(a),e=b[d];null==e?-1===c.indexOf(this.type)&&(d="No tooltip mapping for value "+d+" of field "+a,null!=this.type&&(d+=" of block type "+ this.type),console.warn(d+".")):e=Blockly.utils.replaceMessageReferences(e);return e}.bind(this))}};Blockly.Extensions.checkDropdownOptionsInTable_=function(a,b,c){var d=a.getField(b);if(!d.isOptionListDynamic()){d=d.getOptions();for(var e=0;ethis.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+"\u2026");a=a.replace(/\s/g,Blockly.Field.NBSP);this.sourceBlock_.RTL&&(a+="\u200f");return a};Blockly.Field.prototype.getText=function(){return this.text_};Blockly.Field.prototype.setText=function(a){null!==a&&(a=String(a),a!==this.text_&&(this.text_=a,this.forceRerender()))}; Blockly.Field.prototype.forceRerender=function(){this.isDirty_=!0;this.sourceBlock_&&this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_())}; Blockly.Field.prototype.setValue=function(a){if(null!==a){var b=this.doClassValidation_(a);a=this.processValidation_(a,b);if(!(a instanceof Error)){if(b=this.getValidator())if(b=b.call(this,a),a=this.processValidation_(a,b),a instanceof Error)return;b=this.getValue();b!==a&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,b,a)),this.doValueUpdate_(a),this.isDirty_&&this.forceRerender())}}}; Blockly.Field.prototype.processValidation_=function(a,b){if(null===b)return this.doValueInvalid_(a),this.isDirty_&&this.forceRerender(),Error();void 0!==b&&(a=b);return a};Blockly.Field.prototype.getValue=function(){return this.value_};Blockly.Field.prototype.doClassValidation_=function(a){return a=this.classValidator(a)};Blockly.Field.prototype.doValueUpdate_=function(a){this.value_=a;this.isDirty_=!0;this.text_=String(a)};Blockly.Field.prototype.doValueInvalid_=function(a){}; Blockly.Field.prototype.onMouseDown_=function(a){this.sourceBlock_&&this.sourceBlock_.workspace&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)};Blockly.Field.prototype.setTooltip=function(a){var b=this.getClickTarget_();b?b.tooltip=a||""===a?a:this.sourceBlock_:this.tooltip_=a};Blockly.Field.prototype.getClickTarget_=function(){return this.clickTarget_||this.getSvgRoot()};Blockly.Field.prototype.getAbsoluteXY_=function(){return goog.style.getPageOffset(this.borderRect_)}; -Blockly.Field.prototype.referencesVariables=function(){return!1};Blockly.Field.prototype.getParentInput=function(){for(var a=null,b=this.sourceBlock_,c=b.inputList,d=0;da||a>this.fieldRow.length)throw Error("index "+a+" out of bounds.");if(!b&&!c)return a;"string"==typeof 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_()); 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}throw Error('Field "%s" not found.',a);};Blockly.Input.prototype.isVisible=function(){return this.visible_}; 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 Error("This input does not have a connection.");this.connection.setCheck(a);return this}; @@ -1621,8 +1621,7 @@ Blockly.BlockSvg.prototype.getIcons=function(){var a=[];this.mutator&&a.push(thi Blockly.BlockSvg.prototype.setParent=function(a){var b=this.parentBlock_;if(a!=b){Blockly.Field.startCache();Blockly.BlockSvg.superClass_.setParent.call(this,a);Blockly.Field.stopCache();var c=this.getSvgRoot();if(!this.workspace.isClearing&&c){var d=this.getRelativeToSurfaceXY();a?(a.getSvgRoot().appendChild(c),a=this.getRelativeToSurfaceXY(),this.moveConnections_(a.x-d.x,a.y-d.y)):b&&(this.workspace.getCanvas().appendChild(c),this.translate(d.x,d.y))}}}; Blockly.BlockSvg.prototype.getRelativeToSurfaceXY=function(){var a=0,b=0,c=this.useDragSurface_?this.workspace.blockDragSurface_.getGroup():null,d=this.getSvgRoot();if(d){do{var e=Blockly.utils.getRelativeXY(d);a+=e.x;b+=e.y;this.useDragSurface_&&this.workspace.blockDragSurface_.getCurrentBlock()==d&&(e=this.workspace.blockDragSurface_.getSurfaceTranslation(),a+=e.x,b+=e.y);d=d.parentNode}while(d&&d!=this.workspace.getCanvas()&&d!=c)}return new Blockly.utils.Coordinate(a,b)}; Blockly.BlockSvg.prototype.moveBy=function(a,b){if(this.parentBlock_)throw Error("Block has parent.");var c=Blockly.Events.isEnabled();if(c)var d=new Blockly.Events.BlockMove(this);var e=this.getRelativeToSurfaceXY();this.translate(e.x+a,e.y+b);this.moveConnections_(a,b);c&&(d.recordNew(),Blockly.Events.fire(d));this.workspace.resizeContents()};Blockly.BlockSvg.prototype.translate=function(a,b){this.getSvgRoot().setAttribute("transform","translate("+a+","+b+")")}; -Blockly.BlockSvg.prototype.moveToDragSurface_=function(){if(this.useDragSurface_){var a=this.getRelativeToSurfaceXY();this.clearTransformAttributes_();this.workspace.blockDragSurface_.translateSurface(a.x,a.y);this.workspace.blockDragSurface_.setBlocksAndShow(this.getSvgRoot())}}; -Blockly.BlockSvg.prototype.moveTo=function(a){if(this.parentBlock_)throw Error("Block has parent.");var b=Blockly.Events.isEnabled();if(b)var c=new Blockly.Events.BlockMove(this);var d=this.getRelativeToSurfaceXY();this.translate(a.x,a.y);this.moveConnections_(a.x-d.x,a.y-d.y);b&&(c.recordNew(),Blockly.Events.fire(c));this.workspace.resizeContents()};Blockly.BlockSvg.prototype.moveOffDragSurface_=function(a){this.useDragSurface_&&(this.translate(a.x,a.y),this.workspace.blockDragSurface_.clearAndHide(this.workspace.getCanvas()))}; +Blockly.BlockSvg.prototype.moveToDragSurface_=function(){if(this.useDragSurface_){var a=this.getRelativeToSurfaceXY();this.clearTransformAttributes_();this.workspace.blockDragSurface_.translateSurface(a.x,a.y);this.workspace.blockDragSurface_.setBlocksAndShow(this.getSvgRoot())}};Blockly.BlockSvg.prototype.moveTo=function(a){var b=this.getRelativeToSurfaceXY();this.moveBy(a.x-b.x,a.y-b.y)};Blockly.BlockSvg.prototype.moveOffDragSurface_=function(a){this.useDragSurface_&&(this.translate(a.x,a.y),this.workspace.blockDragSurface_.clearAndHide(this.workspace.getCanvas()))}; Blockly.BlockSvg.prototype.moveDuringDrag=function(a){this.useDragSurface_?this.workspace.blockDragSurface_.translateSurface(a.x,a.y):(this.svgGroup_.translate_="translate("+a.x+","+a.y+")",this.svgGroup_.setAttribute("transform",this.svgGroup_.translate_+this.svgGroup_.skew_))};Blockly.BlockSvg.prototype.clearTransformAttributes_=function(){this.getSvgRoot().removeAttribute("transform")}; Blockly.BlockSvg.prototype.snapToGrid=function(){if(this.workspace&&!this.workspace.isDragging()&&!this.getParent()&&!this.isInFlyout){var a=this.workspace.getGrid();if(a&&a.shouldSnap()){var b=a.getSpacing(),c=b/2,d=this.getRelativeToSurfaceXY();a=Math.round((d.x-c)/b)*b+c-d.x;b=Math.round((d.y-c)/b)*b+c-d.y;a=Math.round(a);b=Math.round(b);0==a&&0==b||this.moveBy(a,b)}}}; Blockly.BlockSvg.prototype.getBoundingRectangle=function(){var a=this.getRelativeToSurfaceXY(this),b=this.outputConnection?Blockly.BlockSvg.TAB_WIDTH:0,c=this.getHeightWidth(),d=a.y,e=a.y+c.height;if(this.RTL){var f=a.x-(c.width-b);a=a.x+b}else f=a.x-b,a=a.x+c.width-b;return new Blockly.utils.Rect(d,e,f,a)}; @@ -1723,7 +1722,7 @@ Blockly.FieldTextInput.prototype.onHtmlInputKeyDown_=function(a){13==a.keyCode?B Blockly.FieldTextInput.prototype.onHtmlInputChange_=function(a){a=this.htmlInput_.value;a!==this.htmlInput_.oldValue_&&(this.htmlInput_.oldValue_=a,Blockly.Events.setGroup(!0),this.setValue(a),this.text_=this.htmlInput_.value,this.forceRerender(),Blockly.Events.setGroup(!1))}; Blockly.FieldTextInput.prototype.resizeEditor_=function(){var a=Blockly.WidgetDiv.DIV,b=this.getScaledBBox_();a.style.width=b.right-b.left+"px";a.style.height=b.bottom-b.top+"px";b=new Blockly.utils.Coordinate(this.sourceBlock_.RTL?b.right-a.offsetWidth:b.left,b.top);b.y+=1;Blockly.utils.userAgent.GECKO&&Blockly.WidgetDiv.DIV.style.top&&(--b.x,--b.y);Blockly.utils.userAgent.WEBKIT&&(b.y-=3);a.style.left=b.x+"px";a.style.top=b.y+"px"}; Blockly.FieldTextInput.numberValidator=function(a){console.warn("Blockly.FieldTextInput.numberValidator is deprecated. Use Blockly.FieldNumber instead.");if(null===a)return null;a=String(a);a=a.replace(/O/ig,"0");a=a.replace(/,/g,"");a=parseFloat(a||0);return isNaN(a)?null:String(a)};Blockly.FieldTextInput.nonnegativeIntegerValidator=function(a){(a=Blockly.FieldTextInput.numberValidator(a))&&(a=String(Math.max(0,Math.floor(a))));return a}; -Blockly.FieldTextInput.prototype.getCorrectedSize=function(){this.getSize();return new goog.math.Size(this.size_.width+Blockly.BlockSvg.SEP_SPACE_X,Blockly.Field.BORDER_RECT_DEFAULT_HEIGHT)};Blockly.Field.register("field_input",Blockly.FieldTextInput);Blockly.FieldAngle=function(a,b){a=this.doClassValidation_(a);null===a&&(a=0);Blockly.FieldAngle.superClass_.constructor.call(this,a,b)};goog.inherits(Blockly.FieldAngle,Blockly.FieldTextInput);Blockly.FieldAngle.fromJson=function(a){return new Blockly.FieldAngle(a.angle)};Blockly.FieldAngle.prototype.SERIALIZABLE=!0;Blockly.FieldAngle.ROUND=15;Blockly.FieldAngle.HALF=50;Blockly.FieldAngle.CLOCKWISE=!1;Blockly.FieldAngle.OFFSET=0;Blockly.FieldAngle.WRAP=360; +Blockly.FieldTextInput.prototype.getCorrectedSize=function(){this.getSize();return new Blockly.utils.Size(this.size_.width+Blockly.BlockSvg.SEP_SPACE_X,Blockly.Field.BORDER_RECT_DEFAULT_HEIGHT)};Blockly.Field.register("field_input",Blockly.FieldTextInput);Blockly.FieldAngle=function(a,b){a=this.doClassValidation_(a);null===a&&(a=0);Blockly.FieldAngle.superClass_.constructor.call(this,a,b)};goog.inherits(Blockly.FieldAngle,Blockly.FieldTextInput);Blockly.FieldAngle.fromJson=function(a){return new Blockly.FieldAngle(a.angle)};Blockly.FieldAngle.prototype.SERIALIZABLE=!0;Blockly.FieldAngle.ROUND=15;Blockly.FieldAngle.HALF=50;Blockly.FieldAngle.CLOCKWISE=!1;Blockly.FieldAngle.OFFSET=0;Blockly.FieldAngle.WRAP=360; Blockly.FieldAngle.RADIUS=Blockly.FieldAngle.HALF-1;Blockly.FieldAngle.prototype.initView=function(){Blockly.FieldAngle.superClass_.initView.call(this);this.symbol_=Blockly.utils.dom.createSvgElement("tspan",{},null);this.symbol_.appendChild(document.createTextNode("\u00b0"));this.textElement_.appendChild(this.symbol_)};Blockly.FieldAngle.prototype.render_=function(){Blockly.FieldAngle.superClass_.render_.call(this);this.updateGraph_()}; Blockly.FieldAngle.prototype.showEditor_=function(){Blockly.FieldAngle.superClass_.showEditor_.call(this,Blockly.utils.userAgent.MOBILE||Blockly.utils.userAgent.ANDROID||Blockly.utils.userAgent.IPAD);var a=this.dropdownCreate_();Blockly.DropDownDiv.getContentDiv().appendChild(a);a=this.sourceBlock_.getColourBorder();a=a.colourBorder||a.colourLight;Blockly.DropDownDiv.setColour(this.sourceBlock_.getColour(),a);Blockly.DropDownDiv.showPositionedByField(this,this.dropdownDispose_.bind(this));this.updateGraph_()}; Blockly.FieldAngle.prototype.dropdownCreate_=function(){var a=Blockly.utils.dom.createSvgElement("svg",{xmlns:Blockly.utils.dom.SVG_NS,"xmlns:html":Blockly.utils.dom.HTML_NS,"xmlns:xlink":Blockly.utils.dom.XLINK_NS,version:"1.1",height:2*Blockly.FieldAngle.HALF+"px",width:2*Blockly.FieldAngle.HALF+"px"},null),b=Blockly.utils.dom.createSvgElement("circle",{cx:Blockly.FieldAngle.HALF,cy:Blockly.FieldAngle.HALF,r:Blockly.FieldAngle.RADIUS,"class":"blocklyAngleCircle"},a);this.gauge_=Blockly.utils.dom.createSvgElement("path", @@ -1738,19 +1737,19 @@ Blockly.FieldAngle.prototype.doClassValidation_=function(a){if(isNaN(a))return n Blockly.FieldCheckbox.prototype.SERIALIZABLE=!0;Blockly.FieldCheckbox.prototype.CURSOR="default";Blockly.FieldCheckbox.prototype.isDirty_=!1; Blockly.FieldCheckbox.prototype.initView=function(){Blockly.FieldCheckbox.superClass_.initView.call(this);this.textElement_.setAttribute("x",Blockly.FieldCheckbox.CHECK_X_OFFSET);this.textElement_.setAttribute("y",Blockly.FieldCheckbox.CHECK_Y_OFFSET);Blockly.utils.dom.addClass(this.textElement_,"blocklyCheckbox");var a=document.createTextNode(Blockly.FieldCheckbox.CHECK_CHAR);this.textElement_.appendChild(a);this.textElement_.style.display=this.value_?"block":"none"}; Blockly.FieldCheckbox.prototype.showEditor_=function(){this.setValue(!this.value_)};Blockly.FieldCheckbox.prototype.doClassValidation_=function(a){return!0===a||"TRUE"===a?"TRUE":!1===a||"FALSE"===a?"FALSE":null};Blockly.FieldCheckbox.prototype.doValueUpdate_=function(a){this.value_=this.convertValueToBool_(a);this.textElement_&&(this.textElement_.style.display=this.value_?"block":"none")};Blockly.FieldCheckbox.prototype.getValue=function(){return this.value_?"TRUE":"FALSE"}; -Blockly.FieldCheckbox.prototype.getValueBoolean=function(){return this.value_};Blockly.FieldCheckbox.prototype.getText=function(){return String(this.convertValueToBool_(this.value_))};Blockly.FieldCheckbox.prototype.convertValueToBool_=function(a){return"string"==typeof a?"TRUE"==a:!!a};Blockly.FieldCheckbox.prototype.getCorrectedSize=function(){this.getSize();return new goog.math.Size(this.size_.width+Blockly.BlockSvg.SEP_SPACE_X,Blockly.Field.BORDER_RECT_DEFAULT_HEIGHT)}; +Blockly.FieldCheckbox.prototype.getValueBoolean=function(){return this.value_};Blockly.FieldCheckbox.prototype.getText=function(){return String(this.convertValueToBool_(this.value_))};Blockly.FieldCheckbox.prototype.convertValueToBool_=function(a){return"string"==typeof a?"TRUE"==a:!!a};Blockly.FieldCheckbox.prototype.getCorrectedSize=function(){this.getSize();return new Blockly.utils.Size(this.size_.width+Blockly.BlockSvg.SEP_SPACE_X,Blockly.Field.BORDER_RECT_DEFAULT_HEIGHT)}; Blockly.Field.register("field_checkbox",Blockly.FieldCheckbox);Blockly.utils.colour={};Blockly.utils.colour.parse=function(a){a=String(a).toLowerCase().trim();var b=Blockly.utils.colour.names[a];if(b)return b;b="#"==a[0]?a:"#"+a;if(/^#[0-9a-f]{6}$/.test(b))return b;if(/^#[0-9a-f]{3}$/.test(b))return["#",b[1],b[1],b[2],b[2],b[3],b[3]].join("");var c=a.match(/^(?:rgb)?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/);return c&&(a=Number(c[1]),b=Number(c[2]),c=Number(c[3]),0<=a&&256>a&&0<=b&&256>b&&0<=c&&256>c)?Blockly.utils.colour.rgbToHex(a,b,c):null}; Blockly.utils.colour.rgbToHex=function(a,b,c){b=a<<16|b<<8|c;return 16>a?"#"+(16777216|b).toString(16).substr(1):"#"+b.toString(16)};Blockly.utils.colour.hexToRgb=function(a){a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]}; Blockly.utils.colour.hsvToHex=function(a,b,c){var d=0,e=0,f=0;if(0==b)f=e=d=c;else{var g=Math.floor(a/60),h=a/60-g;a=c*(1-b);var k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return Blockly.utils.colour.rgbToHex(Math.floor(d),Math.floor(e),Math.floor(f))}; Blockly.utils.colour.blend=function(a,b,c){a=Blockly.utils.colour.hexToRgb(Blockly.utils.colour.parse(a));b=Blockly.utils.colour.hexToRgb(Blockly.utils.colour.parse(b));return Blockly.utils.colour.rgbToHex(Math.round(b[0]+c*(a[0]-b[0])),Math.round(b[1]+c*(a[1]-b[1])),Math.round(b[2]+c*(a[2]-b[2])))}; Blockly.utils.colour.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00"};Blockly.FieldColour=function(a,b){a=this.doClassValidation_(a);null===a&&(a=Blockly.FieldColour.COLOURS[0]);Blockly.FieldColour.superClass_.constructor.call(this,a,b)};goog.inherits(Blockly.FieldColour,Blockly.Field);Blockly.FieldColour.fromJson=function(a){var b=new Blockly.FieldColour(a.colour);a.colourOptions&&b.setColours(a.colourOptions,a.colourTitles);a.columns&&b.setColumns(a.columns);return b};Blockly.FieldColour.DEFAULT_WIDTH=16;Blockly.FieldColour.DEFAULT_HEIGHT=12; Blockly.FieldColour.prototype.SERIALIZABLE=!0;Blockly.FieldColour.prototype.CURSOR="default";Blockly.FieldColour.prototype.isDirty_=!1;Blockly.FieldColour.prototype.colours_=null;Blockly.FieldColour.prototype.titles_=null;Blockly.FieldColour.prototype.columns_=0;Blockly.FieldColour.prototype.DROPDOWN_BORDER_COLOUR="silver";Blockly.FieldColour.prototype.DROPDOWN_BACKGROUND_COLOUR="white"; -Blockly.FieldColour.prototype.initView=function(){this.size_=new goog.math.Size(Blockly.FieldColour.DEFAULT_WIDTH,Blockly.FieldColour.DEFAULT_HEIGHT);this.createBorderRect_();this.borderRect_.style.fillOpacity=1;this.borderRect_.style.fill=this.value_};Blockly.FieldColour.prototype.doClassValidation_=function(a){return"string"!=typeof a?null:Blockly.utils.colour.parse(a)};Blockly.FieldColour.prototype.doValueUpdate_=function(a){this.value_=a;this.borderRect_&&(this.borderRect_.style.fill=a)}; +Blockly.FieldColour.prototype.initView=function(){this.size_=new Blockly.utils.Size(Blockly.FieldColour.DEFAULT_WIDTH,Blockly.FieldColour.DEFAULT_HEIGHT);this.createBorderRect_();this.borderRect_.style.fillOpacity=1;this.borderRect_.style.fill=this.value_};Blockly.FieldColour.prototype.doClassValidation_=function(a){return"string"!=typeof a?null:Blockly.utils.colour.parse(a)};Blockly.FieldColour.prototype.doValueUpdate_=function(a){this.value_=a;this.borderRect_&&(this.borderRect_.style.fill=a)}; Blockly.FieldColour.prototype.getText=function(){var a=this.value_;/^#(.)\1(.)\2(.)\3$/.test(a)&&(a="#"+a[1]+a[3]+a[5]);return a};Blockly.FieldColour.COLOURS="#ffffff #cccccc #c0c0c0 #999999 #666666 #333333 #000000 #ffcccc #ff6666 #ff0000 #cc0000 #990000 #660000 #330000 #ffcc99 #ff9966 #ff9900 #ff6600 #cc6600 #993300 #663300 #ffff99 #ffff66 #ffcc66 #ffcc33 #cc9933 #996633 #663333 #ffffcc #ffff33 #ffff00 #ffcc00 #999900 #666600 #333300 #99ff99 #66ff99 #33ff33 #33cc00 #009900 #006600 #003300 #99ffff #33ffff #66cccc #00cccc #339999 #336666 #003333 #ccffff #66ffff #33ccff #3366ff #3333ff #000099 #000066 #ccccff #9999ff #6666cc #6633ff #6600cc #333399 #330099 #ffccff #ff99ff #cc66cc #cc33cc #993399 #663366 #330033".split(" "); Blockly.FieldColour.TITLES=[];Blockly.FieldColour.COLUMNS=7;Blockly.FieldColour.prototype.setColours=function(a,b){this.colours_=a;void 0!==b&&(this.titles_=b);return this};Blockly.FieldColour.prototype.setColumns=function(a){this.columns_=a;return this}; Blockly.FieldColour.prototype.showEditor_=function(){var a=this.dropdownCreate_();Blockly.DropDownDiv.getContentDiv().appendChild(a);Blockly.DropDownDiv.setColour(this.DROPDOWN_BACKGROUND_COLOUR,this.DROPDOWN_BORDER_COLOUR);Blockly.DropDownDiv.showPositionedByField(this,this.dropdownDispose_.bind(this))};Blockly.FieldColour.prototype.onClick_=function(a){(a=a.target)&&!a.label&&(a=a.parentNode);a=a&&a.label;null!==a&&(this.setValue(a),Blockly.DropDownDiv.hideIfOwner(this))}; Blockly.FieldColour.prototype.dropdownCreate_=function(){var a=this.columns_||Blockly.FieldColour.COLUMNS,b=this.colours_||Blockly.FieldColour.COLOURS,c=this.titles_||Blockly.FieldColour.TITLES,d=this.getValue(),e=document.createElement("table");e.className="blocklyColourTable";for(var f,g=0;g=this.height_||0>=this.width_)throw Error("Height and width values of an image field must be greater than 0.");this.size_=new goog.math.Size(this.width_,this.height_+2*Blockly.BlockSvg.INLINE_PADDING_Y);this.flipRtl_=f;this.text_= +d[0]+" in: ",d)):(b=!0,console.error("Invalid option["+c+"]: Each FieldDropdown option must be an array. Found: ",d))}if(b)throw TypeError("Found invalid FieldDropdown options.");};Blockly.FieldDropdown.prototype.getCorrectedSize=function(){this.getSize();return new Blockly.utils.Size(this.size_.width+Blockly.BlockSvg.SEP_SPACE_X,this.size_.height-9)};Blockly.Field.register("field_dropdown",Blockly.FieldDropdown);Blockly.FieldLabelSerializable=function(a,b){Blockly.FieldLabelSerializable.superClass_.constructor.call(this,a,b)};goog.inherits(Blockly.FieldLabelSerializable,Blockly.FieldLabel);Blockly.FieldLabelSerializable.fromJson=function(a){var b=Blockly.utils.replaceMessageReferences(a.text);return new Blockly.FieldLabelSerializable(b,a["class"])};Blockly.FieldLabelSerializable.prototype.EDITABLE=!1;Blockly.FieldLabelSerializable.prototype.SERIALIZABLE=!0; +Blockly.Field.register("field_label_serializable",Blockly.FieldLabelSerializable);Blockly.FieldImage=function(a,b,c,d,e,f){this.sourceBlock_=null;if(!a)throw Error("Src value of an image field is required");if(isNaN(c)||isNaN(b))throw Error("Height and width values of an image field must cast to numbers.");this.height_=Number(c);this.width_=Number(b);if(0>=this.height_||0>=this.width_)throw Error("Height and width values of an image field must be greater than 0.");this.size_=new Blockly.utils.Size(this.width_,this.height_+2*Blockly.BlockSvg.INLINE_PADDING_Y);this.flipRtl_=f;this.text_= d||"";this.setValue(a||"");"function"==typeof e&&(this.clickHandler_=e)};goog.inherits(Blockly.FieldImage,Blockly.Field);Blockly.FieldImage.fromJson=function(a){var b=Blockly.utils.replaceMessageReferences(a.src),c=Number(Blockly.utils.replaceMessageReferences(a.width)),d=Number(Blockly.utils.replaceMessageReferences(a.height)),e=Blockly.utils.replaceMessageReferences(a.alt);return new Blockly.FieldImage(b,c,d,e,null,!!a.flipRtl)};Blockly.FieldImage.prototype.EDITABLE=!1; Blockly.FieldImage.prototype.isDirty_=!1;Blockly.FieldImage.prototype.initView=function(){this.imageElement_=Blockly.utils.dom.createSvgElement("image",{height:this.height_+"px",width:this.width_+"px",alt:this.text_},this.fieldGroup_);this.imageElement_.setAttributeNS(Blockly.utils.dom.XLINK_NS,"xlink:href",this.value_)};Blockly.FieldImage.prototype.doClassValidation_=function(a){return"string"!=typeof a?null:a}; Blockly.FieldImage.prototype.doValueUpdate_=function(a){this.value_=a;this.imageElement_&&this.imageElement_.setAttributeNS(Blockly.utils.dom.XLINK_NS,"xlink:href",this.value_||"")};Blockly.FieldImage.prototype.getFlipRtl=function(){return this.flipRtl_};Blockly.FieldImage.prototype.setText=function(a){this.setAlt(a)};Blockly.FieldImage.prototype.setAlt=function(a){null!==a&&(this.text_=a,this.imageElement_&&this.imageElement_.setAttribute("alt",a||""))}; -Blockly.FieldImage.prototype.showEditor_=function(){this.clickHandler_&&this.clickHandler_(this)};Blockly.FieldImage.prototype.setOnClickHandler=function(a){this.clickHandler_=a};Blockly.FieldImage.prototype.getCorrectedSize=function(){this.getSize();return new goog.math.Size(this.size_.width,this.height_+1)};Blockly.Field.register("field_image",Blockly.FieldImage);Blockly.FieldNumber=function(a,b,c,d,e){this.setConstraints(b,c,d);a=this.doClassValidation_(a);null===a&&(a=0);Blockly.FieldNumber.superClass_.constructor.call(this,a,e)};goog.inherits(Blockly.FieldNumber,Blockly.FieldTextInput);Blockly.FieldNumber.fromJson=function(a){return new Blockly.FieldNumber(a.value,a.min,a.max,a.precision)};Blockly.FieldNumber.prototype.SERIALIZABLE=!0; +Blockly.FieldImage.prototype.showEditor_=function(){this.clickHandler_&&this.clickHandler_(this)};Blockly.FieldImage.prototype.setOnClickHandler=function(a){this.clickHandler_=a};Blockly.FieldImage.prototype.getCorrectedSize=function(){this.getSize();return new Blockly.utils.Size(this.size_.width,this.height_+1)};Blockly.Field.register("field_image",Blockly.FieldImage);Blockly.FieldNumber=function(a,b,c,d,e){this.setConstraints(b,c,d);a=this.doClassValidation_(a);null===a&&(a=0);Blockly.FieldNumber.superClass_.constructor.call(this,a,e)};goog.inherits(Blockly.FieldNumber,Blockly.FieldTextInput);Blockly.FieldNumber.fromJson=function(a){return new Blockly.FieldNumber(a.value,a.min,a.max,a.precision)};Blockly.FieldNumber.prototype.SERIALIZABLE=!0; Blockly.FieldNumber.prototype.setConstraints=function(a,b,c){c=parseFloat(c);this.precision_=isNaN(c)?0:c;c=this.precision_.toString();var d=c.indexOf(".");this.fractionalDigits_=-1==d?-1:c.length-(d+1);a=parseFloat(a);this.min_=isNaN(a)?-Infinity:a;b=parseFloat(b);this.max_=isNaN(b)?Infinity:b;this.setValue(this.getValue())}; -Blockly.FieldNumber.prototype.doClassValidation_=function(a){if(null===a||void 0===a)return null;a=String(a);a=a.replace(/O/ig,"0");a=a.replace(/,/g,"");a=parseFloat(a||0);if(isNaN(a))return null;a=Math.min(Math.max(a,this.min_),this.max_);this.precision_&&isFinite(a)&&(a=Math.round(a/this.precision_)*this.precision_);return a=-1==this.fractionalDigits_?a:Number(a.toFixed(this.fractionalDigits_))};Blockly.Field.register("field_number",Blockly.FieldNumber);Blockly.FieldVariable=function(a,b,c,d){this.menuGenerator_=Blockly.FieldVariable.dropdownCreate;this.size_=new goog.math.Size(0,Blockly.BlockSvg.MIN_BLOCK_Y);this.setValidator(b);this.defaultVariableName=a||"";this.setTypes_(c,d);this.value_=null};goog.inherits(Blockly.FieldVariable,Blockly.FieldDropdown);Blockly.FieldVariable.fromJson=function(a){var b=Blockly.utils.replaceMessageReferences(a.variable);return new Blockly.FieldVariable(b,null,a.variableTypes,a.defaultType)}; +Blockly.FieldNumber.prototype.doClassValidation_=function(a){if(null===a||void 0===a)return null;a=String(a);a=a.replace(/O/ig,"0");a=a.replace(/,/g,"");a=parseFloat(a||0);if(isNaN(a))return null;a=Math.min(Math.max(a,this.min_),this.max_);this.precision_&&isFinite(a)&&(a=Math.round(a/this.precision_)*this.precision_);return a=-1==this.fractionalDigits_?a:Number(a.toFixed(this.fractionalDigits_))};Blockly.Field.register("field_number",Blockly.FieldNumber);Blockly.FieldVariable=function(a,b,c,d){this.menuGenerator_=Blockly.FieldVariable.dropdownCreate;this.size_=new Blockly.utils.Size(0,Blockly.BlockSvg.MIN_BLOCK_Y);this.setValidator(b);this.defaultVariableName=a||"";this.setTypes_(c,d);this.value_=null};goog.inherits(Blockly.FieldVariable,Blockly.FieldDropdown);Blockly.FieldVariable.fromJson=function(a){var b=Blockly.utils.replaceMessageReferences(a.variable);return new Blockly.FieldVariable(b,null,a.variableTypes,a.defaultType)}; Blockly.FieldVariable.prototype.workspace_=null;Blockly.FieldVariable.prototype.SERIALIZABLE=!0;Blockly.FieldVariable.prototype.initModel=function(){if(!this.variable_){var a=Blockly.Variables.getOrCreateVariablePackage(this.workspace_,null,this.defaultVariableName,this.defaultType_);Blockly.Events.disable();this.setValue(a.getId());Blockly.Events.enable()}}; Blockly.FieldVariable.prototype.fromXml=function(a){var b=a.getAttribute("id"),c=a.textContent,d=a.getAttribute("variabletype")||a.getAttribute("variableType")||"";b=Blockly.Variables.getOrCreateVariablePackage(this.workspace_,b,c,d);if(null!=d&&d!==b.type)throw Error("Serialized variable type with id '"+b.getId()+"' had type "+b.type+", and does not match variable field that references it: "+Blockly.Xml.domToText(a)+".");this.setValue(b.getId())}; Blockly.FieldVariable.prototype.toXml=function(a){this.initModel();a.id=this.variable_.getId();a.textContent=this.variable_.name;this.variable_.type&&a.setAttribute("variabletype",this.variable_.type);return a};Blockly.FieldVariable.prototype.setSourceBlock=function(a){if(a.isShadow())throw Error("Variable fields are not allowed to exist on shadow blocks.");Blockly.FieldVariable.superClass_.setSourceBlock.call(this,a);this.workspace_=a.workspace}; diff --git a/blockly_uncompressed.js b/blockly_uncompressed.js index 85c038f8e..c0d6c345c 100644 --- a/blockly_uncompressed.js +++ b/blockly_uncompressed.js @@ -56,18 +56,18 @@ goog.addDependency("../../../" + dir + "/core/dropdowndiv.js", ['Blockly.DropDow goog.addDependency("../../../" + dir + "/core/events.js", ['Blockly.Events'], ['Blockly.utils']); goog.addDependency("../../../" + dir + "/core/events_abstract.js", ['Blockly.Events.Abstract'], ['Blockly.Events']); goog.addDependency("../../../" + dir + "/core/extensions.js", ['Blockly.Extensions'], ['Blockly.Mutator', 'Blockly.utils']); -goog.addDependency("../../../" + dir + "/core/field.js", ['Blockly.Field'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Gesture', 'Blockly.utils.dom', 'Blockly.utils.userAgent', 'goog.math.Size', 'goog.style']); +goog.addDependency("../../../" + dir + "/core/field.js", ['Blockly.Field'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Gesture', 'Blockly.utils.dom', 'Blockly.utils.Size', 'Blockly.utils.userAgent', 'goog.style']); goog.addDependency("../../../" + dir + "/core/field_angle.js", ['Blockly.FieldAngle'], ['Blockly.DropDownDiv', 'Blockly.FieldTextInput', 'Blockly.utils.dom', 'Blockly.utils.math', 'Blockly.utils.userAgent']); -goog.addDependency("../../../" + dir + "/core/field_checkbox.js", ['Blockly.FieldCheckbox'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.utils.dom']); -goog.addDependency("../../../" + dir + "/core/field_colour.js", ['Blockly.FieldColour'], ['Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.utils.colour', 'goog.math.Size']); +goog.addDependency("../../../" + dir + "/core/field_checkbox.js", ['Blockly.FieldCheckbox'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.utils.dom', 'Blockly.utils.Size']); +goog.addDependency("../../../" + dir + "/core/field_colour.js", ['Blockly.FieldColour'], ['Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.utils.colour', 'Blockly.utils.Size']); goog.addDependency("../../../" + dir + "/core/field_date.js", ['Blockly.FieldDate'], ['Blockly.Events', 'Blockly.Field', 'Blockly.utils.dom', 'Blockly.utils.string', 'goog.date', 'goog.date.DateTime', 'goog.events', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_he', 'goog.ui.DatePicker']); -goog.addDependency("../../../" + dir + "/core/field_dropdown.js", ['Blockly.FieldDropdown'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.utils', 'Blockly.utils.dom', 'Blockly.utils.string', 'Blockly.utils.uiMenu', 'Blockly.utils.userAgent', 'goog.events', 'goog.ui.Menu', 'goog.ui.MenuItem']); -goog.addDependency("../../../" + dir + "/core/field_image.js", ['Blockly.FieldImage'], ['Blockly.Field', 'Blockly.Tooltip', 'Blockly.utils', 'Blockly.utils.dom', 'goog.math.Size']); -goog.addDependency("../../../" + dir + "/core/field_label.js", ['Blockly.FieldLabel'], ['Blockly.Field', 'Blockly.Tooltip', 'Blockly.utils', 'Blockly.utils.dom', 'goog.math.Size']); +goog.addDependency("../../../" + dir + "/core/field_dropdown.js", ['Blockly.FieldDropdown'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.utils', 'Blockly.utils.dom', 'Blockly.utils.Size', 'Blockly.utils.string', 'Blockly.utils.uiMenu', 'Blockly.utils.userAgent', 'goog.events', 'goog.ui.Menu', 'goog.ui.MenuItem']); +goog.addDependency("../../../" + dir + "/core/field_image.js", ['Blockly.FieldImage'], ['Blockly.Field', 'Blockly.Tooltip', 'Blockly.utils', 'Blockly.utils.dom', 'Blockly.utils.Size']); +goog.addDependency("../../../" + dir + "/core/field_label.js", ['Blockly.FieldLabel'], ['Blockly.Field', 'Blockly.Tooltip', 'Blockly.utils', 'Blockly.utils.dom', 'Blockly.utils.Size']); goog.addDependency("../../../" + dir + "/core/field_label_serializable.js", ['Blockly.FieldLabelSerializable'], ['Blockly.FieldLabel', 'Blockly.utils']); goog.addDependency("../../../" + dir + "/core/field_number.js", ['Blockly.FieldNumber'], ['Blockly.FieldTextInput']); -goog.addDependency("../../../" + dir + "/core/field_textinput.js", ['Blockly.FieldTextInput'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.Msg', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.dom', 'Blockly.utils.userAgent']); -goog.addDependency("../../../" + dir + "/core/field_variable.js", ['Blockly.FieldVariable'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.FieldDropdown', 'Blockly.Msg', 'Blockly.utils', 'Blockly.VariableModel', 'Blockly.Variables', 'Blockly.Xml', 'goog.math.Size']); +goog.addDependency("../../../" + dir + "/core/field_textinput.js", ['Blockly.FieldTextInput'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.Field', 'Blockly.Msg', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.dom', 'Blockly.utils.Size', 'Blockly.utils.userAgent']); +goog.addDependency("../../../" + dir + "/core/field_variable.js", ['Blockly.FieldVariable'], ['Blockly.Events', 'Blockly.Events.BlockChange', 'Blockly.FieldDropdown', 'Blockly.Msg', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.VariableModel', 'Blockly.Variables', 'Blockly.Xml']); goog.addDependency("../../../" + dir + "/core/flyout_base.js", ['Blockly.Flyout'], ['Blockly.Block', 'Blockly.Events', 'Blockly.Events.BlockCreate', 'Blockly.Events.VarCreate', 'Blockly.FlyoutButton', 'Blockly.Gesture', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.dom', 'Blockly.WorkspaceSvg', 'Blockly.Xml']); goog.addDependency("../../../" + dir + "/core/flyout_button.js", ['Blockly.FlyoutButton'], ['Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.dom']); goog.addDependency("../../../" + dir + "/core/flyout_dragger.js", ['Blockly.FlyoutDragger'], ['Blockly.WorkspaceDragger']); @@ -76,7 +76,7 @@ goog.addDependency("../../../" + dir + "/core/flyout_vertical.js", ['Blockly.Ver goog.addDependency("../../../" + dir + "/core/generator.js", ['Blockly.Generator'], ['Blockly.Block']); goog.addDependency("../../../" + dir + "/core/gesture.js", ['Blockly.Gesture'], ['Blockly.blockAnimations', 'Blockly.BlockDragger', 'Blockly.BubbleDragger', 'Blockly.constants', 'Blockly.Events', 'Blockly.Events.Ui', 'Blockly.FlyoutDragger', 'Blockly.Tooltip', 'Blockly.Touch', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.WorkspaceDragger']); goog.addDependency("../../../" + dir + "/core/grid.js", ['Blockly.Grid'], ['Blockly.utils.dom', 'Blockly.utils.userAgent']); -goog.addDependency("../../../" + dir + "/core/icon.js", ['Blockly.Icon'], ['Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.dom']); +goog.addDependency("../../../" + dir + "/core/icon.js", ['Blockly.Icon'], ['Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.dom', 'Blockly.utils.Size']); goog.addDependency("../../../" + dir + "/core/inject.js", ['Blockly.inject'], ['Blockly.BlockDragSurfaceSvg', 'Blockly.Css', 'Blockly.DropDownDiv', 'Blockly.Events', 'Blockly.Grid', 'Blockly.Options', 'Blockly.Tooltip', 'Blockly.utils', 'Blockly.utils.dom', 'Blockly.utils.userAgent', 'Blockly.WorkspaceDragSurfaceSvg', 'Blockly.WorkspaceSvg', 'goog.ui.Component']); goog.addDependency("../../../" + dir + "/core/input.js", ['Blockly.Input'], ['Blockly.Connection', 'Blockly.FieldLabel']); goog.addDependency("../../../" + dir + "/core/insertion_marker_manager.js", ['Blockly.InsertionMarkerManager'], ['Blockly.blockAnimations', 'Blockly.Events', 'Blockly.RenderedConnection']); @@ -117,6 +117,7 @@ goog.addDependency("../../../" + dir + "/core/utils/coordinate.js", ['Blockly.ut goog.addDependency("../../../" + dir + "/core/utils/dom.js", ['Blockly.utils.dom'], []); goog.addDependency("../../../" + dir + "/core/utils/math.js", ['Blockly.utils.math'], []); goog.addDependency("../../../" + dir + "/core/utils/rect.js", ['Blockly.utils.Rect'], []); +goog.addDependency("../../../" + dir + "/core/utils/size.js", ['Blockly.utils.Size'], []); goog.addDependency("../../../" + dir + "/core/utils/string.js", ['Blockly.utils.string'], []); goog.addDependency("../../../" + dir + "/core/utils/svg_paths.js", ['Blockly.utils.svgPaths'], []); goog.addDependency("../../../" + dir + "/core/utils/useragent.js", ['Blockly.utils.userAgent'], ['Blockly.utils.base']); @@ -1879,6 +1880,7 @@ goog.require('Blockly.inject'); goog.require('Blockly.utils'); goog.require('Blockly.utils.Coordinate'); goog.require('Blockly.utils.Rect'); +goog.require('Blockly.utils.Size'); goog.require('Blockly.utils.base'); goog.require('Blockly.utils.colour'); goog.require('Blockly.utils.dom'); diff --git a/core/field.js b/core/field.js index f3205de49..c381f8d0a 100644 --- a/core/field.js +++ b/core/field.js @@ -32,9 +32,9 @@ goog.require('Blockly.Events'); goog.require('Blockly.Events.BlockChange'); goog.require('Blockly.Gesture'); goog.require('Blockly.utils.dom'); +goog.require('Blockly.utils.Size'); goog.require('Blockly.utils.userAgent'); -goog.require('goog.math.Size'); goog.require('goog.style'); @@ -47,7 +47,7 @@ goog.require('goog.style'); * @constructor */ Blockly.Field = function(value, opt_validator) { - this.size_ = new goog.math.Size(0, Blockly.BlockSvg.MIN_BLOCK_Y); + this.size_ = new Blockly.utils.Size(0, Blockly.BlockSvg.MIN_BLOCK_Y); this.setValue(value); this.setValidator(opt_validator); }; @@ -637,11 +637,11 @@ Blockly.Field.stopCache = function() { * Returns the height and width of the field. * * This should *in general* be the only place render_ gets called from. - * @return {!goog.math.Size} Height and width. + * @return {!Blockly.utils.Size} Height and width. */ Blockly.Field.prototype.getSize = function() { if (!this.isVisible()) { - return new goog.math.Size(0, 0); + return new Blockly.utils.Size(0, 0); } if (this.isDirty_) { @@ -659,7 +659,7 @@ Blockly.Field.prototype.getSize = function() { /** * Get the size of the visible field, as used in new rendering. - * @return {!goog.math.Size} The size of the visible field. + * @return {!Blockly.utils.Size} The size of the visible field. * @package */ Blockly.Field.prototype.getCorrectedSize = function() { diff --git a/core/field_checkbox.js b/core/field_checkbox.js index 070454bb7..d147794d5 100644 --- a/core/field_checkbox.js +++ b/core/field_checkbox.js @@ -30,6 +30,7 @@ goog.require('Blockly.Events'); goog.require('Blockly.Events.BlockChange'); goog.require('Blockly.Field'); goog.require('Blockly.utils.dom'); +goog.require('Blockly.utils.Size'); /** @@ -213,14 +214,14 @@ Blockly.FieldCheckbox.prototype.convertValueToBool_ = function(value) { * Get the size of the visible field, as used in new rendering. * The checkbox field fills the entire border rect, rather than just using the * text element. - * @return {!goog.math.Size} The size of the visible field. + * @return {!Blockly.utils.Size} The size of the visible field. * @package */ Blockly.FieldCheckbox.prototype.getCorrectedSize = function() { this.getSize(); // TODO (#2562): Remove getCorrectedSize. - return new goog.math.Size(this.size_.width + Blockly.BlockSvg.SEP_SPACE_X, + return new Blockly.utils.Size(this.size_.width + Blockly.BlockSvg.SEP_SPACE_X, Blockly.Field.BORDER_RECT_DEFAULT_HEIGHT); }; Blockly.Field.register('field_checkbox', Blockly.FieldCheckbox); diff --git a/core/field_colour.js b/core/field_colour.js index 26d0388ae..fb7ab823d 100644 --- a/core/field_colour.js +++ b/core/field_colour.js @@ -31,8 +31,7 @@ goog.require('Blockly.Events'); goog.require('Blockly.Events.BlockChange'); goog.require('Blockly.Field'); goog.require('Blockly.utils.colour'); - -goog.require('goog.math.Size'); +goog.require('Blockly.utils.Size'); /** @@ -154,7 +153,7 @@ Blockly.FieldColour.prototype.DROPDOWN_BACKGROUND_COLOUR = 'white'; * @package */ Blockly.FieldColour.prototype.initView = function() { - this.size_ = new goog.math.Size(Blockly.FieldColour.DEFAULT_WIDTH, + this.size_ = new Blockly.utils.Size(Blockly.FieldColour.DEFAULT_WIDTH, Blockly.FieldColour.DEFAULT_HEIGHT); this.createBorderRect_(); this.borderRect_.style['fillOpacity'] = 1; @@ -351,7 +350,7 @@ Blockly.FieldColour.prototype.dropdownDispose_ = function() { * Get the size of the visible field, as used in new rendering. * The colour field fills the bounding box with colour and takes up the full * space of the bounding box. - * @return {!goog.math.Size} The size of the visible field. + * @return {!Blockly.utils.Size} The size of the visible field. * @package */ Blockly.FieldColour.prototype.getCorrectedSize = function() { @@ -359,7 +358,7 @@ Blockly.FieldColour.prototype.getCorrectedSize = function() { // the logic to figure out whether to rerender, just call getSize. this.getSize(); // TODO (#2562): Remove getCorrectedSize. - return new goog.math.Size( + return new Blockly.utils.Size( this.size_.width + Blockly.BlockSvg.SEP_SPACE_X, Blockly.Field.BORDER_RECT_DEFAULT_HEIGHT - 1); }; diff --git a/core/field_dropdown.js b/core/field_dropdown.js index a9a5879bd..28ac0c870 100644 --- a/core/field_dropdown.js +++ b/core/field_dropdown.js @@ -33,6 +33,7 @@ goog.require('Blockly.Events.BlockChange'); goog.require('Blockly.Field'); goog.require('Blockly.utils'); goog.require('Blockly.utils.dom'); +goog.require('Blockly.utils.Size'); goog.require('Blockly.utils.string'); goog.require('Blockly.utils.uiMenu'); goog.require('Blockly.utils.userAgent'); @@ -549,7 +550,7 @@ Blockly.FieldDropdown.validateOptions_ = function(options) { /** * Get the size of the visible field, as used in new rendering. - * @return {!goog.math.Size} The size of the visible field. + * @return {!Blockly.utils.Size} The size of the visible field. * @package */ Blockly.FieldDropdown.prototype.getCorrectedSize = function() { @@ -559,7 +560,7 @@ Blockly.FieldDropdown.prototype.getCorrectedSize = function() { // This extra 9 was probably to add padding between rows. // It's also found in render_, renderSelectedImage_, and renderSelectedText_. // TODO (#2562): Remove getCorrectedSize. - return new goog.math.Size(this.size_.width + Blockly.BlockSvg.SEP_SPACE_X, + return new Blockly.utils.Size(this.size_.width + Blockly.BlockSvg.SEP_SPACE_X, this.size_.height - 9); }; diff --git a/core/field_image.js b/core/field_image.js index 0c64d1428..6af9aa774 100644 --- a/core/field_image.js +++ b/core/field_image.js @@ -30,8 +30,7 @@ goog.require('Blockly.Field'); goog.require('Blockly.Tooltip'); goog.require('Blockly.utils'); goog.require('Blockly.utils.dom'); - -goog.require('goog.math.Size'); +goog.require('Blockly.utils.Size'); /** @@ -66,7 +65,7 @@ Blockly.FieldImage = function(src, width, height, throw Error('Height and width values of an image field must be greater' + ' than 0.'); } - this.size_ = new goog.math.Size(this.width_, + this.size_ = new Blockly.utils.Size(this.width_, this.height_ + 2 * Blockly.BlockSvg.INLINE_PADDING_Y); this.flipRtl_ = opt_flipRtl; @@ -214,7 +213,7 @@ Blockly.FieldImage.prototype.setOnClickHandler = function(func) { }; /* * Get the size of the visible field, as used in new rendering. - * @return {!goog.math.Size} The size of the visible field. + * @return {!Blockly.utils.Size} The size of the visible field. * @package */ Blockly.FieldImage.prototype.getCorrectedSize = function() { @@ -225,7 +224,7 @@ Blockly.FieldImage.prototype.getCorrectedSize = function() { // height of the image in new rendering, rather than having the spacer below // know that there was an image in the previous row. // TODO (#2562): Remove getCorrectedSize. - return new goog.math.Size(this.size_.width, this.height_ + 1); + return new Blockly.utils.Size(this.size_.width, this.height_ + 1); }; Blockly.Field.register('field_image', Blockly.FieldImage); diff --git a/core/field_label.js b/core/field_label.js index c1392d3cf..a06c2720b 100644 --- a/core/field_label.js +++ b/core/field_label.js @@ -31,8 +31,7 @@ goog.require('Blockly.Field'); goog.require('Blockly.Tooltip'); goog.require('Blockly.utils'); goog.require('Blockly.utils.dom'); - -goog.require('goog.math.Size'); +goog.require('Blockly.utils.Size'); /** @@ -44,7 +43,7 @@ goog.require('goog.math.Size'); * @constructor */ Blockly.FieldLabel = function(opt_value, opt_class) { - this.size_ = new goog.math.Size(0, 17.5); + this.size_ = new Blockly.utils.Size(0, 17.5); this.class_ = opt_class; opt_value = this.doClassValidation_(opt_value); if (opt_value === null) { @@ -102,7 +101,7 @@ Blockly.FieldLabel.prototype.doClassValidation_ = function(newValue) { /** * Get the size of the visible field, as used in new rendering. - * @return {!goog.math.Size} The size of the visible field. + * @return {!Blockly.utils.Size} The size of the visible field. * @package */ Blockly.FieldLabel.prototype.getCorrectedSize = function() { @@ -112,7 +111,7 @@ Blockly.FieldLabel.prototype.getCorrectedSize = function() { // This extra 5 was probably to add padding between rows. // It's also found in the constructor and in initView. // TODO (#2562): Remove getCorrectedSize. - return new goog.math.Size(this.size_.width, this.size_.height - 5); + return new Blockly.utils.Size(this.size_.width, this.size_.height - 5); }; Blockly.Field.register('field_label', Blockly.FieldLabel); diff --git a/core/field_textinput.js b/core/field_textinput.js index 3c31a8c01..fb31271ef 100644 --- a/core/field_textinput.js +++ b/core/field_textinput.js @@ -33,6 +33,7 @@ goog.require('Blockly.Msg'); goog.require('Blockly.utils'); goog.require('Blockly.utils.Coordinate'); goog.require('Blockly.utils.dom'); +goog.require('Blockly.utils.Size'); goog.require('Blockly.utils.userAgent'); @@ -429,7 +430,7 @@ Blockly.FieldTextInput.nonnegativeIntegerValidator = function(text) { /** * Get the size of the visible field, as used in new rendering. - * @return {!goog.math.Size} The size of the visible field. + * @return {!Blockly.utils.Size} The size of the visible field. * @package */ Blockly.FieldTextInput.prototype.getCorrectedSize = function() { @@ -437,7 +438,7 @@ Blockly.FieldTextInput.prototype.getCorrectedSize = function() { // the logic to figure out whether to rerender, just call getSize. this.getSize(); // TODO (#2562): Remove getCorrectedSize. - return new goog.math.Size(this.size_.width + Blockly.BlockSvg.SEP_SPACE_X, + return new Blockly.utils.Size(this.size_.width + Blockly.BlockSvg.SEP_SPACE_X, Blockly.Field.BORDER_RECT_DEFAULT_HEIGHT); }; diff --git a/core/field_variable.js b/core/field_variable.js index 7f93b9244..e6f7e5f9e 100644 --- a/core/field_variable.js +++ b/core/field_variable.js @@ -31,11 +31,11 @@ goog.require('Blockly.Events.BlockChange'); goog.require('Blockly.FieldDropdown'); goog.require('Blockly.Msg'); goog.require('Blockly.utils'); +goog.require('Blockly.utils.Size'); goog.require('Blockly.VariableModel'); goog.require('Blockly.Variables'); goog.require('Blockly.Xml'); -goog.require('goog.math.Size'); /** @@ -57,7 +57,7 @@ Blockly.FieldVariable = function(varname, opt_validator, opt_variableTypes, // The FieldDropdown constructor would call setValue, which might create a // spurious variable. Just do the relevant parts of the constructor. this.menuGenerator_ = Blockly.FieldVariable.dropdownCreate; - this.size_ = new goog.math.Size(0, Blockly.BlockSvg.MIN_BLOCK_Y); + this.size_ = new Blockly.utils.Size(0, Blockly.BlockSvg.MIN_BLOCK_Y); this.setValidator(opt_validator); this.defaultVariableName = (varname || ''); diff --git a/core/gesture.js b/core/gesture.js index 36dd8d513..142da0ca5 100644 --- a/core/gesture.js +++ b/core/gesture.js @@ -764,7 +764,7 @@ Blockly.Gesture.prototype.doWorkspaceClick_ = function(e) { var ws = this.creatorWorkspace_; ws.cursor.hide(); if (e.shiftKey) { - var screenCoord = new goog.math.Coordinate(e.clientX, e.clientY); + var screenCoord = new Blockly.utils.Coordinate(e.clientX, e.clientY); var wsCoord = Blockly.utils.screenToWsCoordinates(ws, screenCoord); var wsNode = Blockly.ASTNode.createWorkspaceNode(ws, wsCoord); ws.cursor.setLocation(wsNode); diff --git a/core/icon.js b/core/icon.js index 39e6accc1..fb402049a 100644 --- a/core/icon.js +++ b/core/icon.js @@ -29,6 +29,7 @@ goog.provide('Blockly.Icon'); goog.require('Blockly.utils'); goog.require('Blockly.utils.Coordinate'); goog.require('Blockly.utils.dom'); +goog.require('Blockly.utils.Size'); /** @@ -211,9 +212,9 @@ Blockly.Icon.prototype.getIconLocation = function() { * This differs from the actual size of the icon, because it bulges slightly * out of its row rather than increasing the height of its row. * TODO (#2562): Remove getCorrectedSize. - * @return {!goog.math.Size} Height and width. + * @return {!Blockly.utils.Size} Height and width. */ Blockly.Icon.prototype.getCorrectedSize = function() { - return new goog.math.Size( + return new Blockly.utils.Size( Blockly.Icon.prototype.SIZE, Blockly.Icon.prototype.SIZE - 2); }; diff --git a/core/ui_menu_utils.js b/core/ui_menu_utils.js index 6e1dbaec2..e8e006756 100644 --- a/core/ui_menu_utils.js +++ b/core/ui_menu_utils.js @@ -37,7 +37,7 @@ goog.require('goog.style'); /** * Get the size of a rendered goog.ui.Menu. * @param {!goog.ui.Menu} menu The menu to measure. - * @return {!goog.math.Size} Object with width and height properties. + * @return {!Blockly.utils.Size} Object with width and height properties. * @package */ Blockly.utils.uiMenu.getSize = function(menu) { @@ -58,7 +58,7 @@ Blockly.utils.uiMenu.getSize = function(menu) { * in window coordinates. * @param {!Object} anchorBBox The bounding rectangle of the anchor, in window * coordinates. - * @param {!goog.math.Size} menuSize The size of the menu that is inside the + * @param {!Blockly.utils.Size} menuSize The size of the menu that is inside the * widget div, in window coordinates. * @package */ diff --git a/core/utils.js b/core/utils.js index e0997e932..7f184d507 100644 --- a/core/utils.js +++ b/core/utils.js @@ -592,7 +592,7 @@ Blockly.utils.getBlockTypeCounts = function(block, opt_stripFollowing) { * @param {Blockly.WorkspaceSvg} ws The workspace to find the coordinates on. * @param {Blockly.utils.Coordinate} screenCoordinates The screen coordinates to be * converted to workspace coordintaes - * @return {goog.math.Coordinate} The workspace coordinates. + * @return {Blockly.utils.Coordinate} The workspace coordinates. * @package */ Blockly.utils.screenToWsCoordinates = function(ws, screenCoordinates) { diff --git a/core/utils/size.js b/core/utils/size.js new file mode 100644 index 000000000..fd9243e65 --- /dev/null +++ b/core/utils/size.js @@ -0,0 +1,72 @@ +/** + * @license + * Visual Blocks Editor + * + * Copyright 2019 Google Inc. + * https://developers.google.com/blockly/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Utility methods for size calculation. + * These methods are not specific to Blockly, and could be factored out into + * a JavaScript framework such as Closure. + * @author samelh@google.com (Sam El-Husseini) + */ +'use strict'; + +/** + * @name Blockly.utils.Size + * @namespace + */ +goog.provide('Blockly.utils.Size'); + + +/** + * Class for representing sizes consisting of a width and height. + * @param {number} width Width. + * @param {number} height Height. + * @struct + * @constructor + */ +Blockly.utils.Size = function(width, height) { + /** + * Width + * @type {number} + */ + this.width = width; + + /** + * Height + * @type {number} + */ + this.height = height; +}; + +/** + * Compares sizes for equality. + * @param {Blockly.utils.Size} a A Size. + * @param {Blockly.utils.Size} b A Size. + * @return {boolean} True iff the sizes have equal widths and equal + * heights, or if both are null. + */ +Blockly.utils.Size.equals = function(a, b) { + if (a == b) { + return true; + } + if (!a || !b) { + return false; + } + return a.width == b.width && a.height == b.height; +}; diff --git a/core/widgetdiv.js b/core/widgetdiv.js index 4690b66ad..f6a53177b 100644 --- a/core/widgetdiv.js +++ b/core/widgetdiv.js @@ -146,7 +146,7 @@ Blockly.WidgetDiv.positionInternal_ = function(x, y, height) { * in window coordinates. * @param {!Object} anchorBBox The bounding rectangle of the anchor, in window * coordinates. - * @param {!goog.math.Size} widgetSize The size of the widget that is inside the + * @param {!Blockly.utils.Size} widgetSize The size of the widget that is inside the * widget div, in window coordinates. * @param {boolean} rtl Whether the workspace is in RTL mode. This determines * horizontal alignment. @@ -172,7 +172,7 @@ Blockly.WidgetDiv.positionWithAnchor = function(viewportBBox, anchorBBox, * in window coordinates. * @param {!Object} anchorBBox The bounding rectangle of the anchor, in window * coordinates. - * @param {goog.math.Size} widgetSize The dimensions of the widget inside the + * @param {Blockly.utils.Size} widgetSize The dimensions of the widget inside the * widget div. * @param {boolean} rtl Whether the Blockly workspace is in RTL mode. * @return {number} A valid x-coordinate for the top left corner of the widget @@ -204,7 +204,7 @@ Blockly.WidgetDiv.calculateX_ = function(viewportBBox, anchorBBox, widgetSize, * in window coordinates. * @param {!Object} anchorBBox The bounding rectangle of the anchor, in window * coordinates. - * @param {goog.math.Size} widgetSize The dimensions of the widget inside the + * @param {Blockly.utils.Size} widgetSize The dimensions of the widget inside the * widget div. * @return {number} A valid y-coordinate for the top left corner of the widget * div, in window coordinates. diff --git a/demos/custom-fields/field_turtle.js b/demos/custom-fields/field_turtle.js index adaa8954f..da49d9a1a 100644 --- a/demos/custom-fields/field_turtle.js +++ b/demos/custom-fields/field_turtle.js @@ -31,6 +31,7 @@ goog.provide('CustomFields.FieldTurtle'); goog.require('Blockly.Field'); goog.require('Blockly.utils'); goog.require('Blockly.utils.dom'); +goog.require('Blockly.utils.Size'); // Generally field's values should be optional, and have logical defaults. @@ -62,7 +63,7 @@ CustomFields.FieldTurtle = function( // that helps keep the code organized and DRY. CustomFields.FieldTurtle.superClass_.constructor.call( this, value, opt_validator); - this.size_ = new goog.math.Size(72, 40); + this.size_ = new Blockly.utils.Size(72, 40); }; goog.inherits(CustomFields.FieldTurtle, Blockly.Field); diff --git a/tests/jsunit/event_test.js b/tests/jsunit/event_test.js index d49757550..c6cdc2fea 100644 --- a/tests/jsunit/event_test.js +++ b/tests/jsunit/event_test.js @@ -238,7 +238,7 @@ function test_move_constructorCoordinate() { setUpMockMethod(mockControl_, Blockly.utils, 'genUid', null, ['1', '2']); try { var block1 = createSimpleTestBlock(workspace); - var coordinate = new goog.math.Coordinate(3,4); + var coordinate = new Blockly.utils.Coordinate(3, 4); block1.xy_ = coordinate; var event = new Blockly.Events.Move(block1); @@ -257,7 +257,7 @@ function test_move_constructoroldParentId() { var block1 = createSimpleTestBlock(workspace); var block2 = createSimpleTestBlock(workspace); block1.parentBlock_ = block2; - block1.xy_ = new goog.math.Coordinate(3,4); + block1.xy_ = new Blockly.utils.Coordinate(3, 4); var event = new Blockly.Events.Move(block1); checkExactEventValues(event, {'oldCoordinate': undefined, @@ -274,7 +274,7 @@ function test_blockMove_constructorCoordinate() { setUpMockMethod(mockControl_, Blockly.utils, 'genUid', null, ['1', '2']); try { var block1 = createSimpleTestBlock(workspace); - var coordinate = new goog.math.Coordinate(3,4); + var coordinate = new Blockly.utils.Coordinate(3, 4); block1.xy_ = coordinate; var event = new Blockly.Events.BlockMove(block1); @@ -293,7 +293,7 @@ function test_blockMove_constructoroldParentId() { var block1 = createSimpleTestBlock(workspace); var block2 = createSimpleTestBlock(workspace); block1.parentBlock_ = block2; - block1.xy_ = new goog.math.Coordinate(3,4); + block1.xy_ = new Blockly.utils.Coordinate(3, 4); var event = new Blockly.Events.BlockMove(block1); checkExactEventValues(event, {'oldCoordinate': undefined, @@ -701,7 +701,7 @@ function test_events_filteraftermerge() { */ function helper_addMoveEvent(events, block, newX, newY) { events.push(new Blockly.Events.BlockMove(block)); - block.xy_ = new goog.math.Coordinate(newX, newY); + block.xy_ = new Blockly.utils.Coordinate(newX, newY); events[events.length-1].recordNew(); } diff --git a/tests/mocha/astnode_test.js b/tests/mocha/astnode_test.js index 1ec41f633..d1492f2c7 100644 --- a/tests/mocha/astnode_test.js +++ b/tests/mocha/astnode_test.js @@ -389,7 +389,7 @@ suite('ASTNode', function() { assertEquals(nextNode, null); }); test('moveCursorToRight', function() { - var coordinate = new goog.math.Coordinate(100,100); + var coordinate = new Blockly.utils.Coordinate(100, 100); var node = Blockly.ASTNode.createWorkspaceNode(this.workspace, coordinate); var nextNode = node.next(); assertEquals(nextNode.wsCoordinate_.x, 110); @@ -576,7 +576,7 @@ suite('ASTNode', function() { assertEquals(prevNode.getType(), Blockly.ASTNode.types.STACK); }); test('moveCursorToLeft', function() { - var coordinate = new goog.math.Coordinate(100,100); + var coordinate = new Blockly.utils.Coordinate(100, 100); var node = Blockly.ASTNode.createWorkspaceNode(this.workspace, coordinate); var nextNode = node.prev(); assertEquals(nextNode.wsCoordinate_.x, 90); @@ -692,14 +692,14 @@ suite('ASTNode', function() { assertEquals(inNode, null); }); test('fromWorkspaceToStack', function() { - var coordinate = new goog.math.Coordinate(100,100); + var coordinate = new Blockly.utils.Coordinate(100, 100); var node = Blockly.ASTNode.createWorkspaceNode(this.workspace, coordinate); var inNode = node.in(); assertEquals(inNode.getLocation(), this.workspace.getTopBlocks()[0]); assertEquals(inNode.getType(), Blockly.ASTNode.types.STACK); }); test('fromWorkspaceToNull', function() { - var coordinate = new goog.math.Coordinate(100,100); + var coordinate = new Blockly.utils.Coordinate(100, 100); var node = Blockly.ASTNode.createWorkspaceNode( this.emptyWorkspace, coordinate); var inNode = node.in(); @@ -914,7 +914,7 @@ suite('ASTNode', function() { assertTrue(node.isConnection()); }); test('createWorkspaceNode', function() { - var coordinate = new goog.math.Coordinate(100,100); + var coordinate = new Blockly.utils.Coordinate(100, 100); var node = Blockly.ASTNode .createWorkspaceNode(this.workspace, coordinate); assertEquals(node.getLocation(), this.workspace); diff --git a/tests/mocha/event_test.js b/tests/mocha/event_test.js index e68ecd038..ef7267871 100644 --- a/tests/mocha/event_test.js +++ b/tests/mocha/event_test.js @@ -144,7 +144,7 @@ suite('Events', function() { suite('Move', function() { test('Move by coordinate', function() { - var coordinate = new goog.math.Coordinate(3, 4); + var coordinate = new Blockly.utils.Coordinate(3, 4); this.block.xy_ = coordinate; var event = new Blockly.Events.Move(this.block); @@ -153,7 +153,7 @@ suite('Events', function() { }); test('Block move by coordinate', function() { - var coordinate = new goog.math.Coordinate(3, 4); + var coordinate = new Blockly.utils.Coordinate(3, 4); this.block.xy_ = coordinate; var event = new Blockly.Events.BlockMove(this.block); @@ -170,7 +170,7 @@ suite('Events', function() { sinon.restore(); this.block.parentBlock_ = this.parentBlock; - this.block.xy_ = new goog.math.Coordinate(3, 4); + this.block.xy_ = new Blockly.utils.Coordinate(3, 4); }); teardown(function() { diff --git a/tests/mocha/navigation_modify_test.js b/tests/mocha/navigation_modify_test.js index 28ee7a41e..cd9a58cc6 100644 --- a/tests/mocha/navigation_modify_test.js +++ b/tests/mocha/navigation_modify_test.js @@ -41,7 +41,7 @@ suite('Insert/Modify', function() { test('Cursor on workspace', function() { Blockly.Navigation.cursor_.setLocation( Blockly.ASTNode.createWorkspaceNode(this.workspace, - new goog.math.Coordinate(0, 0))); + new Blockly.utils.Coordinate(0, 0))); chai.assert.isFalse(Blockly.Navigation.modify()); }); test('Cursor on compatible connection', function() { @@ -195,7 +195,7 @@ suite('Insert/Modify', function() { setup(function() { Blockly.Navigation.marker_.setLocation( Blockly.ASTNode.createWorkspaceNode( - this.workspace, new goog.math.Coordinate(100, 200))); + this.workspace, new Blockly.utils.Coordinate(100, 200))); }); test('Cursor on row block', function() { Blockly.Navigation.cursor_.setLocation( @@ -274,7 +274,7 @@ suite('Insert/Modify', function() { test('Cursor on workspace', function() { Blockly.Navigation.cursor_.setLocation( Blockly.ASTNode.createWorkspaceNode( - this.workspace, new goog.math.Coordinate(100, 100))); + this.workspace, new Blockly.utils.Coordinate(100, 100))); chai.assert.isFalse(Blockly.Navigation.modify()); }); }); @@ -293,7 +293,7 @@ suite('Insert/Modify', function() { test('Cursor on workspace', function() { Blockly.Navigation.cursor_.setLocation( Blockly.ASTNode.createWorkspaceNode( - this.workspace, new goog.math.Coordinate(100, 100))); + this.workspace, new Blockly.utils.Coordinate(100, 100))); chai.assert.isFalse(Blockly.Navigation.modify()); });