|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /**
- * 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 { BlockMap } from "./BlockMap";
- import type ContentState from "./ContentState";
- import type SelectionState from "./SelectionState";
-
- const randomizeBlockMapKeys = require("./randomizeBlockMapKeys");
-
- const removeEntitiesAtEdges = require("./removeEntitiesAtEdges");
-
- const getContentStateFragment = (contentState: ContentState, selectionState: SelectionState): BlockMap => {
- const startKey = selectionState.getStartKey();
- const startOffset = selectionState.getStartOffset();
- const endKey = selectionState.getEndKey();
- const endOffset = selectionState.getEndOffset(); // Edge entities should be stripped to ensure that we don't preserve
- // invalid partial entities when the fragment is reused. We do, however,
- // preserve entities that are entirely within the selection range.
-
- const contentWithoutEdgeEntities = removeEntitiesAtEdges(contentState, selectionState);
- const blockMap = contentWithoutEdgeEntities.getBlockMap();
- const blockKeys = blockMap.keySeq();
- const startIndex = blockKeys.indexOf(startKey);
- const endIndex = blockKeys.indexOf(endKey) + 1;
- return randomizeBlockMapKeys(blockMap.slice(startIndex, endIndex).map((block, blockKey) => {
- const text = block.getText();
- const chars = block.getCharacterList();
-
- if (startKey === endKey) {
- return block.merge({
- text: text.slice(startOffset, endOffset),
- characterList: chars.slice(startOffset, endOffset)
- });
- }
-
- if (blockKey === startKey) {
- return block.merge({
- text: text.slice(startOffset),
- characterList: chars.slice(startOffset)
- });
- }
-
- if (blockKey === endKey) {
- return block.merge({
- text: text.slice(0, endOffset),
- characterList: chars.slice(0, endOffset)
- });
- }
-
- return block;
- }));
- };
-
- module.exports = getContentStateFragment;
|