draft-js
Version:
A React framework for building text editors.
49 lines (37 loc) • 1.75 kB
JavaScript
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*
* @emails oncall+draft_js
*/
;
var EditorState = require("./EditorState");
var expandRangeToStartOfLine = require("./expandRangeToStartOfLine");
var getDraftEditorSelectionWithNodes = require("./getDraftEditorSelectionWithNodes");
var moveSelectionBackward = require("./moveSelectionBackward");
var removeTextWithStrategy = require("./removeTextWithStrategy");
function keyCommandBackspaceToStartOfLine(editorState, e) {
var afterRemoval = removeTextWithStrategy(editorState, function (strategyState) {
var selection = strategyState.getSelection();
if (selection.isCollapsed() && selection.getAnchorOffset() === 0) {
return moveSelectionBackward(strategyState, 1);
}
var ownerDocument = e.currentTarget.ownerDocument;
var domSelection = ownerDocument.defaultView.getSelection(); // getRangeAt can technically throw if there's no selection, but we know
// there is one here because text editor has focus (the cursor is a
// selection of length 0). Therefore, we don't need to wrap this in a
// try-catch block.
var range = domSelection.getRangeAt(0);
range = expandRangeToStartOfLine(range);
return getDraftEditorSelectionWithNodes(strategyState, null, range.endContainer, range.endOffset, range.startContainer, range.startOffset).selectionState;
}, 'backward');
if (afterRemoval === editorState.getCurrentContent()) {
return editorState;
}
return EditorState.push(editorState, afterRemoval, 'remove-range');
}
module.exports = keyCommandBackspaceToStartOfLine;