Marker manager (#3497)

* Adds a marker manager
This commit is contained in:
alschmiedt
2019-12-10 10:53:34 -08:00
committed by GitHub
parent 8cbec2eaee
commit 481fe63302
10 changed files with 341 additions and 186 deletions

View File

@@ -62,8 +62,7 @@ suite('Cursor', function() {
"helpUrl": ""
}
]);
this.workspace = new Blockly.Workspace();
this.workspace.setCursor(new Blockly.Cursor());
this.workspace = Blockly.inject('blocklyDiv', {});
this.cursor = this.workspace.getCursor();
var blockA = this.workspace.newBlock('input_statement');
var blockB = this.workspace.newBlock('input_statement');
@@ -74,7 +73,7 @@ suite('Cursor', function() {
blockA.nextConnection.connect(blockB.previousConnection);
blockA.inputList[0].connection.connect(blockE.outputConnection);
blockB.inputList[1].connection.connect(blockC.previousConnection);
this.cursor.drawer_ = null;
this.blocks = {
A: blockA,
B: blockB,

View File

@@ -54,7 +54,7 @@ suite('Insert/Modify', function() {
// TODO: Marked connection or cursor connection is already connected.
suite('Marker on next', function() {
setup(function() {
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createConnectionNode(
this.stack_block_1.nextConnection));
});
@@ -98,7 +98,7 @@ suite('Insert/Modify', function() {
suite('Marker on previous', function() {
setup(function() {
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createConnectionNode(
this.stack_block_1.previousConnection));
});
@@ -141,7 +141,7 @@ suite('Insert/Modify', function() {
suite('Marker on value input', function() {
setup(function() {
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createConnectionNode(
this.row_block_1.inputList[0].connection));
});
@@ -182,7 +182,7 @@ suite('Insert/Modify', function() {
this.statement_block_1.inputList[0].connection.connect(
this.stack_block_1.previousConnection);
this.stack_block_1.nextConnection.connect(this.stack_block_2.previousConnection);
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createInputNode(
this.statement_block_1.inputList[0]));
});
@@ -213,7 +213,7 @@ suite('Insert/Modify', function() {
suite('Marker on output', function() {
setup(function() {
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createConnectionNode(
this.row_block_1.outputConnection));
});
@@ -249,7 +249,8 @@ suite('Insert/Modify', function() {
suite('Marked Workspace', function() {
setup(function() {
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).drawer_ = null;
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createWorkspaceNode(
this.workspace, new Blockly.utils.Coordinate(100, 200)));
});
@@ -344,7 +345,7 @@ suite('Insert/Modify', function() {
// These tests are using a stack block, but do not depend on the type of
// the block.
setup(function() {
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createBlockNode(
this.stack_block_1));
});
@@ -358,7 +359,7 @@ suite('Insert/Modify', function() {
});
suite('Marked stack block', function() {
setup(function() {
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createBlockNode(
this.stack_block_1));
});
@@ -389,7 +390,7 @@ suite('Insert/Modify', function() {
});
suite('Marked row block', function() {
setup(function() {
this.workspace.getMarker().setCurNode(
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(
Blockly.ASTNode.createBlockNode(
this.row_block_1));
});

View File

@@ -166,6 +166,7 @@ suite('Navigation', function() {
]
}]);
this.workspace = createNavigationWorkspace(true);
Blockly.mainWorkspace = this.workspace;
Blockly.navigation.focusToolbox_();
Blockly.navigation.focusFlyout_();
this.mockEvent = {
@@ -329,7 +330,7 @@ suite('Navigation', function() {
Blockly.ASTNode.createConnectionNode(this.basicBlock.previousConnection));
this.mockEvent.keyCode = Blockly.utils.KeyCodes.ENTER;
chai.assert.isTrue(Blockly.navigation.onKeyPress(this.mockEvent));
var markedNode = this.workspace.getMarker().getCurNode();
var markedNode = this.workspace.getMarker(Blockly.navigation.MARKER_NAME).getCurNode();
chai.assert.equal(markedNode.getLocation(), this.basicBlock.previousConnection);
chai.assert.equal(Blockly.navigation.currentState_,
Blockly.navigation.STATE_WS);
@@ -346,7 +347,26 @@ suite('Navigation', function() {
suite('Test key press', function() {
setup(function() {
this.workspace = new Blockly.Workspace({readOnly: false});
Blockly.defineBlocksWithJsonArray([{
"type": "basic_block",
"message0": "%1",
"args0": [
{
"type": "field_dropdown",
"name": "OP",
"options": [
["%{BKY_MATH_ADDITION_SYMBOL}", "ADD"],
["%{BKY_MATH_SUBTRACTION_SYMBOL}", "MINUS"],
["%{BKY_MATH_MULTIPLICATION_SYMBOL}", "MULTIPLY"],
["%{BKY_MATH_DIVISION_SYMBOL}", "DIVIDE"],
["%{BKY_MATH_POWER_SYMBOL}", "POWER"]
]
}
]
}]);
this.workspace = createNavigationWorkspace(true);
this.workspace.getCursor().drawer_ = null;
this.basicBlock = this.workspace.newBlock('basic_block');
Blockly.user.keyMap.setKeyMap(Blockly.user.keyMap.createDefaultKeyMap());
Blockly.mainWorkspace = this.workspace;
Blockly.getMainWorkspace().keyboardAccessibilityMode = true;
@@ -359,12 +379,10 @@ suite('Navigation', function() {
};
});
test('Action does not exist', function() {
var block = new Blockly.Block(this.workspace);
var field = new Blockly.FieldDropdown([['a','b'], ['c','d']]);
field.setSourceBlock(block);
var block = this.workspace.getTopBlocks()[0];
var field = block.inputList[0].fieldRow[0];
sinon.spy(field, 'onBlocklyAction');
this.workspace.getCursor().setCurNode(Blockly.ASTNode.createFieldNode(field));
this.mockEvent.keyCode = Blockly.utils.KeyCodes.N;
var isHandled = Blockly.navigation.onKeyPress(this.mockEvent);
chai.assert.isFalse(isHandled);
@@ -374,9 +392,9 @@ suite('Navigation', function() {
});
test('Action exists - field handles action', function() {
var block = new Blockly.Block(this.workspace);
var field = new Blockly.FieldDropdown([['a','b'], ['c','d']]);
field.setSourceBlock(block);
var block = this.workspace.getTopBlocks()[0];
var field = block.inputList[0].fieldRow[0];
sinon.stub(field, 'onBlocklyAction').callsFake(function(){
return true;
});
@@ -390,9 +408,8 @@ suite('Navigation', function() {
});
test('Action exists - field does not handle action', function() {
var block = new Blockly.Block(this.workspace);
var field = new Blockly.FieldDropdown([['a','b'], ['c','d']]);
field.setSourceBlock(block);
var block = this.workspace.getTopBlocks()[0];
var field = block.inputList[0].fieldRow[0];
sinon.spy(field, 'onBlocklyAction');
this.workspace.getCursor().setCurNode(Blockly.ASTNode.createFieldNode(field));
@@ -456,9 +473,10 @@ suite('Navigation', function() {
"tooltip": "",
"helpUrl": ""
}]);
this.workspace = new Blockly.Workspace({readOnly: true});
this.workspace.setCursor(new Blockly.Cursor());
this.workspace = Blockly.inject('blocklyDiv', {readOnly: true});
Blockly.mainWorkspace = this.workspace;
this.workspace.getCursor().drawer_ = null;
Blockly.getMainWorkspace().keyboardAccessibilityMode = true;
Blockly.navigation.currentState_ = Blockly.navigation.STATE_WS;
@@ -525,7 +543,7 @@ suite('Navigation', function() {
test('Insert from flyout with a valid connection marked', function() {
var previousConnection = this.basicBlock.previousConnection;
var prevNode = Blockly.ASTNode.createConnectionNode(previousConnection);
this.workspace.getMarker().setCurNode(prevNode);
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(prevNode);
Blockly.navigation.focusToolbox_();
Blockly.navigation.focusFlyout_();
@@ -557,7 +575,7 @@ suite('Navigation', function() {
test('Connect two blocks that are on the workspace', function() {
var targetNode = Blockly.ASTNode.createConnectionNode(this.basicBlock.previousConnection);
this.workspace.getMarker().setCurNode(targetNode);
this.workspace.getMarker(Blockly.navigation.MARKER_NAME).setCurNode(targetNode);
var sourceNode = Blockly.ASTNode.createConnectionNode(this.basicBlock2.nextConnection);
this.workspace.getCursor().setCurNode(sourceNode);