diff --git a/blockly_compressed.js b/blockly_compressed.js index c49448266..6edbf1df2 100644 --- a/blockly_compressed.js +++ b/blockly_compressed.js @@ -908,8 +908,8 @@ Blockly.NEXT_STATEMENT){if(!e.previousConnection)throw"Orphan block does not hav e.previousConnection&&e.previousConnection.bumpAwayFrom_(b),Blockly.Events.setGroup(!1))},Blockly.BUMP_DELAY)}b.setShadowDom(f)}var k;Blockly.Events.isEnabled()&&(k=new Blockly.Events.Move(d));Blockly.Connection.connectReciprocally_(b,a);d.setParent(c);k&&(k.recordNew(),Blockly.Events.fire(k))}; Blockly.Connection.prototype.dispose=function(){if(this.isConnected())throw"Disconnect connection before disposing of it.";this.inDB_&&this.db_.removeConnection_(this);Blockly.highlightedConnection_==this&&(Blockly.highlightedConnection_=null);Blockly.localConnection_==this&&(Blockly.localConnection_=null);this.dbOpposite_=this.db_=null};Blockly.Connection.prototype.getSourceBlock=function(){return this.sourceBlock_}; Blockly.Connection.prototype.isSuperior=function(){return this.type==Blockly.INPUT_VALUE||this.type==Blockly.NEXT_STATEMENT};Blockly.Connection.prototype.isConnected=function(){return!!this.targetConnection}; -Blockly.Connection.prototype.canConnectWithReason_=function(a){if(this.isSuperior())var b=this.sourceBlock_,c=a.getSourceBlock();else c=this.sourceBlock_,b=a.getSourceBlock();if(a){if(b&&b==c)return Blockly.Connection.REASON_SELF_CONNECTION;if(a.type!=Blockly.OPPOSITE_TYPE[this.type])return Blockly.Connection.REASON_WRONG_TYPE;if(b&&c&&b.workspace!==c.workspace)return Blockly.Connection.REASON_DIFFERENT_WORKSPACES;if(!this.checkType_(a))return Blockly.Connection.REASON_CHECKS_FAILED;if(b.isShadow()&& -!c.isShadow())return Blockly.Connection.REASON_SHADOW_PARENT}else return Blockly.Connection.REASON_TARGET_NULL;return Blockly.Connection.CAN_CONNECT}; +Blockly.Connection.prototype.canConnectWithReason_=function(a){if(!a)return Blockly.Connection.REASON_TARGET_NULL;if(this.isSuperior())var b=this.sourceBlock_,c=a.getSourceBlock();else c=this.sourceBlock_,b=a.getSourceBlock();return b&&b==c?Blockly.Connection.REASON_SELF_CONNECTION:a.type!=Blockly.OPPOSITE_TYPE[this.type]?Blockly.Connection.REASON_WRONG_TYPE:b&&c&&b.workspace!==c.workspace?Blockly.Connection.REASON_DIFFERENT_WORKSPACES:this.checkType_(a)?b.isShadow()&&!c.isShadow()?Blockly.Connection.REASON_SHADOW_PARENT: +Blockly.Connection.CAN_CONNECT:Blockly.Connection.REASON_CHECKS_FAILED}; Blockly.Connection.prototype.checkConnection_=function(a){switch(this.canConnectWithReason_(a)){case Blockly.Connection.CAN_CONNECT:break;case Blockly.Connection.REASON_SELF_CONNECTION:throw"Attempted to connect a block to itself.";case Blockly.Connection.REASON_DIFFERENT_WORKSPACES:throw"Blocks not on same workspace.";case Blockly.Connection.REASON_WRONG_TYPE:throw"Attempt to connect incompatible types.";case Blockly.Connection.REASON_TARGET_NULL:throw"Target connection is null.";case Blockly.Connection.REASON_CHECKS_FAILED:throw"Connection checks failed."; case Blockly.Connection.REASON_SHADOW_PARENT:throw"Connecting non-shadow to shadow block.";default:throw"Unknown connection failure: this should never happen!";}}; Blockly.Connection.prototype.isConnectionAllowed=function(a){var b=this.canConnectWithReason_(a);if(b!=Blockly.Connection.CAN_CONNECT&&b!=Blockly.Connection.REASON_MUST_DISCONNECT)return!1;if(a.type==Blockly.OUTPUT_VALUE||a.type==Blockly.PREVIOUS_STATEMENT)if(a.isConnected()||this.isConnected())return!1;return a.type==Blockly.INPUT_VALUE&&a.isConnected()&&!a.targetBlock().isMovable()&&!a.targetBlock().isShadow()||this.type==Blockly.PREVIOUS_STATEMENT&&a.isConnected()&&!this.sourceBlock_.nextConnection|| diff --git a/core/connection.js b/core/connection.js index 77da88b43..91b060d48 100644 --- a/core/connection.js +++ b/core/connection.js @@ -284,6 +284,9 @@ Blockly.Connection.prototype.isConnected = function() { * @private */ Blockly.Connection.prototype.canConnectWithReason_ = function(target) { + if (!target) { + return Blockly.Connection.REASON_TARGET_NULL; + } if (this.isSuperior()) { var blockA = this.sourceBlock_; var blockB = target.getSourceBlock(); @@ -291,9 +294,7 @@ Blockly.Connection.prototype.canConnectWithReason_ = function(target) { var blockB = this.sourceBlock_; var blockA = target.getSourceBlock(); } - if (!target) { - return Blockly.Connection.REASON_TARGET_NULL; - } else if (blockA && blockA == blockB) { + if (blockA && blockA == blockB) { return Blockly.Connection.REASON_SELF_CONNECTION; } else if (target.type != Blockly.OPPOSITE_TYPE[this.type]) { return Blockly.Connection.REASON_WRONG_TYPE; diff --git a/tests/jsunit/connection_test.js b/tests/jsunit/connection_test.js index d0a11662a..bb0729599 100644 --- a/tests/jsunit/connection_test.js +++ b/tests/jsunit/connection_test.js @@ -33,13 +33,19 @@ var dummyWorkspace; function connectionTest_setUp() { dummyWorkspace = {}; - input = new Blockly.Connection({workspace: dummyWorkspace}, + function createDummyBlock() { + return { + workspace: dummyWorkspace, + isShadow: function() {return false;} + }; + } + input = new Blockly.Connection(createDummyBlock(), Blockly.INPUT_VALUE); - output = new Blockly.Connection({workspace: dummyWorkspace}, + output = new Blockly.Connection(createDummyBlock(), Blockly.OUTPUT_VALUE); - previous = new Blockly.Connection({workspace: dummyWorkspace}, + previous = new Blockly.Connection(createDummyBlock(), Blockly.PREVIOUS_STATEMENT); - next = new Blockly.Connection({workspace: dummyWorkspace}, + next = new Blockly.Connection(createDummyBlock(), Blockly.NEXT_STATEMENT); }