|
- /**
- * 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 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) {
- var selection = global.getSelection();
-
- if (!selection.rangeCount) {
- return null;
- }
-
- var range = selection.getRangeAt(0);
- var boundingRect = getRangeBoundingClientRect(range);
- var top = boundingRect.top,
- right = boundingRect.right,
- bottom = boundingRect.bottom,
- left = boundingRect.left; // 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;
|