Update insert to use new moveAndConnect method (#2940)

* Update insert to use new moveAndConnect method

* Changes jsdoc
This commit is contained in:
alschmiedt
2019-08-30 14:37:30 -07:00
committed by GitHub
parent 8c51172a40
commit 4b4b14dbbc

View File

@@ -520,13 +520,16 @@ Blockly.navigation.disconnectChild_ = function(movingConnection, destConnection)
/**
* If the two blocks are compatible move the moving connection to the target
* connection and connect them.
* @param {!Blockly.Connection} movingConnection The connection that is being
* @param {Blockly.Connection} movingConnection The connection that is being
* moved.
* @param {!Blockly.Connection} destConnection The connection to be moved to.
* @param {Blockly.Connection} destConnection The connection to be moved to.
* @return {boolean} True if the connections were connected, false otherwise.
* @private
*/
Blockly.navigation.moveAndConnect_ = function(movingConnection, destConnection) {
if (!movingConnection || ! destConnection) {
return false;
}
var movingBlock = movingConnection.getSourceBlock();
if (destConnection.canConnectWithReason_(movingConnection) ==
@@ -626,56 +629,41 @@ Blockly.navigation.connect = function(movingConnection, destConnection) {
};
/**
* Finds our best guess of what connection point on the given block the user is
* trying to connect to given a target connection.
* @param {Blockly.Block} block The block to be connected.
* @param {Blockly.Connection} connection The connection to connect to.
* @return {Blockly.Connection} blockConnection The best connection we can
* determine for the block, or null if the block doesn't have a matching
* connection for the given target connection.
*/
Blockly.navigation.findBestConnection = function(block, connection) {
if (!block || !connection) {
return null;
}
// TODO: Possibly check types and return null if the types don't match.
if (connection.type === Blockly.PREVIOUS_STATEMENT) {
return block.nextConnection;
} else if (connection.type === Blockly.NEXT_STATEMENT) {
return block.previousConnection;
} else if (connection.type === Blockly.INPUT_VALUE) {
return block.outputConnection;
} else if (connection.type === Blockly.OUTPUT_VALUE) {
// Select the first input that has a connection.
for (var i = 0; i < block.inputList.length; i++) {
var inputConnection = block.inputList[i].connection;
if (inputConnection.type === Blockly.INPUT_VALUE) {
return inputConnection;
}
}
}
return null;
};
/**
* Tries to connect the given block to the target connection, making an
* Tries to connect the given block to the destination connection, making an
* intelligent guess about which connection to use to on the moving block.
* @param {!Blockly.Block} block The block to move.
* @param {Blockly.Connection} targetConnection The connection to connect to.
* @param {Blockly.Connection} destConnection The connection to connect to.
* @return {boolean} Whether the connection was successful.
*/
Blockly.navigation.insertBlock = function(block, targetConnection) {
var bestConnection =
Blockly.navigation.findBestConnection(block, targetConnection);
if (bestConnection && bestConnection.isConnected() &&
!bestConnection.targetBlock().isShadow()) {
bestConnection.disconnect();
} else if (!bestConnection) {
Blockly.navigation.warn(
'This block can not be inserted at the marked location.');
Blockly.navigation.insertBlock = function(block, destConnection) {
switch (destConnection.type) {
case Blockly.PREVIOUS_STATEMENT:
if (Blockly.navigation.moveAndConnect_(block.nextConnection, destConnection)) {
return true;
}
break;
case Blockly.NEXT_STATEMENT:
if (Blockly.navigation.moveAndConnect_(block.previousConnection, destConnection)) {
return true;
}
break;
case Blockly.INPUT_VALUE:
if (Blockly.navigation.moveAndConnect_(block.outputConnection, destConnection)) {
return true;
}
break;
case Blockly.OUTPUT_VALUE:
for (var i = 0; i < block.inputList.length; i++) {
var inputConnection = block.inputList[i].connection;
if (inputConnection.type === Blockly.INPUT_VALUE &&
Blockly.navigation.moveAndConnect_(inputConnection, destConnection)) {
return true;
}
}
break;
}
return Blockly.navigation.connect(bestConnection, targetConnection);
Blockly.navigation.warn('This block can not be inserted at the marked location.');
return false;
};
/**