|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /**
- * 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
- * @flow strict-local
- * @emails oncall+draft_js
- */
- 'use strict';
-
- import type EditorState from "./EditorState";
- import type SelectionState from "./SelectionState";
-
- const warning = require("fbjs/lib/warning");
- /**
- * Given a collapsed selection, move the focus `maxDistance` forward within
- * the selected block. If the selection will go beyond the end of the block,
- * move focus to the start of the next block, but no further.
- *
- * This function is not Unicode-aware, so surrogate pairs will be treated
- * as having length 2.
- */
-
-
- function moveSelectionForward(editorState: EditorState, maxDistance: number): SelectionState {
- const selection = editorState.getSelection(); // Should eventually make this an invariant
-
- warning(selection.isCollapsed(), 'moveSelectionForward should only be called with a collapsed SelectionState');
- const key = selection.getStartKey();
- const offset = selection.getStartOffset();
- const content = editorState.getCurrentContent();
- let focusKey = key;
- let focusOffset;
- const block = content.getBlockForKey(key);
-
- if (maxDistance > block.getText().length - offset) {
- focusKey = content.getKeyAfter(key);
- focusOffset = 0;
- } else {
- focusOffset = offset + maxDistance;
- }
-
- return selection.merge({
- focusKey,
- focusOffset
- });
- }
-
- module.exports = moveSelectionForward;
|