draft-js
Version:
A React framework for building text editors.
46 lines (38 loc) • 1.29 kB
JavaScript
/**
* 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
*/
;
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;