|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /**
- * 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
- */
- 'use strict';
-
- var DraftModifier = require("./DraftModifier");
-
- var gkx = require("./gkx");
-
- var experimentalTreeDataSupport = gkx('draft_tree_data_support');
- /**
- * For a collapsed selection state, remove text based on the specified strategy.
- * If the selection state is not collapsed, remove the entire selected range.
- */
-
- function removeTextWithStrategy(editorState, strategy, direction) {
- var selection = editorState.getSelection();
- var content = editorState.getCurrentContent();
- var target = selection;
- var anchorKey = selection.getAnchorKey();
- var focusKey = selection.getFocusKey();
- var anchorBlock = content.getBlockForKey(anchorKey);
-
- if (experimentalTreeDataSupport) {
- if (direction === 'forward') {
- if (anchorKey !== focusKey) {
- // For now we ignore forward delete across blocks,
- // if there is demand for this we will implement it.
- return content;
- }
- }
- }
-
- if (selection.isCollapsed()) {
- if (direction === 'forward') {
- if (editorState.isSelectionAtEndOfContent()) {
- return content;
- }
-
- if (experimentalTreeDataSupport) {
- var isAtEndOfBlock = selection.getAnchorOffset() === content.getBlockForKey(anchorKey).getLength();
-
- if (isAtEndOfBlock) {
- var anchorBlockSibling = content.getBlockForKey(anchorBlock.nextSibling);
-
- if (!anchorBlockSibling || anchorBlockSibling.getLength() === 0) {
- // For now we ignore forward delete at the end of a block,
- // if there is demand for this we will implement it.
- return content;
- }
- }
- }
- } else if (editorState.isSelectionAtStartOfContent()) {
- return content;
- }
-
- target = strategy(editorState);
-
- if (target === selection) {
- return content;
- }
- }
-
- return DraftModifier.removeRange(content, target, direction);
- }
-
- module.exports = removeTextWithStrategy;
|