|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /**
- * 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
- * @emails oncall+draft_js
- */
- 'use strict';
-
- import type { FakeClientRect } from "./getRangeBoundingClientRect";
-
- const getRangeBoundingClientRect = require("./getRangeBoundingClientRect");
- /**
- * Return the bounding ClientRect for the visible DOM selection, if any.
- * In cases where there are no selected ranges or the bounding rect is
- * temporarily invalid, return null.
- *
- * When using from an iframe, you should pass the iframe window object
- */
-
-
- function getVisibleSelectionRect(global: any): ?FakeClientRect {
- const selection = global.getSelection();
-
- if (!selection.rangeCount) {
- return null;
- }
-
- const range = selection.getRangeAt(0);
- const boundingRect = getRangeBoundingClientRect(range);
- const {
- top,
- right,
- bottom,
- left
- } = boundingRect; // When a re-render leads to a node being removed, the DOM selection will
- // temporarily be placed on an ancestor node, which leads to an invalid
- // bounding rect. Discard this state.
-
- if (top === 0 && right === 0 && bottom === 0 && left === 0) {
- return null;
- }
-
- return boundingRect;
- }
-
- module.exports = getVisibleSelectionRect;
|