backspaceToUnIndentTask function
ExecutionInstruction
backspaceToUnIndentTask({
- required SuperEditorContext editContext,
- required KeyEvent keyEvent,
Implementation
ExecutionInstruction backspaceToUnIndentTask({
required SuperEditorContext editContext,
required KeyEvent keyEvent,
}) {
if (keyEvent is! KeyDownEvent && keyEvent is! KeyRepeatEvent) {
return ExecutionInstruction.continueExecution;
}
if (keyEvent.logicalKey != LogicalKeyboardKey.backspace) {
return ExecutionInstruction.continueExecution;
}
final selection = editContext.composer.selection;
if (selection == null) {
return ExecutionInstruction.continueExecution;
}
if (selection.base.nodeId != selection.extent.nodeId) {
// Selection spans nodes, so even if this selection includes a task,
// it includes other stuff, too. So we can't treat this as a task indentation.
return ExecutionInstruction.continueExecution;
}
final node = editContext.document.getNodeById(editContext.composer.selection!.extent.nodeId);
if (node is! TaskNode) {
return ExecutionInstruction.continueExecution;
}
if ((editContext.composer.selection!.extent.nodePosition as TextPosition).offset > 0) {
// Backspace should only un-indent if the caret is at the start of the text.
return ExecutionInstruction.continueExecution;
}
if (node.indent == 0) {
// Can't un-indent any further.
return ExecutionInstruction.continueExecution;
}
editContext.editor.execute([
UnIndentTaskRequest(node.id),
]);
return ExecutionInstruction.haltExecution;
}