Home / Function/ setOffsets() — react Function Reference

setOffsets() — react Function Reference

Architecture documentation for the setOffsets() function in ReactDOMSelection.js from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  51f6074d_96a6_e994_0a5d_3d79a9aab945["setOffsets()"]
  5672f9bd_6a0a_e8f0_9857_0fb959fc7759["ReactDOMSelection.js"]
  51f6074d_96a6_e994_0a5d_3d79a9aab945 -->|defined in| 5672f9bd_6a0a_e8f0_9857_0fb959fc7759
  8ff85b49_fa19_b78a_6c6a_8dda56ae4f95["setSelection()"]
  8ff85b49_fa19_b78a_6c6a_8dda56ae4f95 -->|calls| 51f6074d_96a6_e994_0a5d_3d79a9aab945
  b7dd9a23_f94a_0723_886f_7e1028522525["getNodeForCharacterOffset()"]
  51f6074d_96a6_e994_0a5d_3d79a9aab945 -->|calls| b7dd9a23_f94a_0723_886f_7e1028522525
  style 51f6074d_96a6_e994_0a5d_3d79a9aab945 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/react-dom-bindings/src/client/ReactDOMSelection.js lines 153–202

export function setOffsets(node, offsets) {
  const doc = node.ownerDocument || document;
  const win = (doc && doc.defaultView) || window;

  // Edge fails with "Object expected" in some scenarios.
  // (For instance: TinyMCE editor used in a list component that supports pasting to add more,
  // fails when pasting 100+ items)
  if (!win.getSelection) {
    return;
  }

  const selection = win.getSelection();
  const length = node.textContent.length;
  let start = Math.min(offsets.start, length);
  let end = offsets.end === undefined ? start : Math.min(offsets.end, length);

  // IE 11 uses modern selection, but doesn't support the extend method.
  // Flip backward selections, so we can set with a single range.
  if (!selection.extend && start > end) {
    const temp = end;
    end = start;
    start = temp;
  }

  const startMarker = getNodeForCharacterOffset(node, start);
  const endMarker = getNodeForCharacterOffset(node, end);

  if (startMarker && endMarker) {
    if (
      selection.rangeCount === 1 &&
      selection.anchorNode === startMarker.node &&
      selection.anchorOffset === startMarker.offset &&
      selection.focusNode === endMarker.node &&
      selection.focusOffset === endMarker.offset
    ) {
      return;
    }
    const range = doc.createRange();
    range.setStart(startMarker.node, startMarker.offset);
    selection.removeAllRanges();

    if (start > end) {
      selection.addRange(range);
      selection.extend(endMarker.node, endMarker.offset);
    } else {
      range.setEnd(endMarker.node, endMarker.offset);
      selection.addRange(range);
    }
  }
}

Domain

Subdomains

Called By

Frequently Asked Questions

What does setOffsets() do?
setOffsets() is a function in the react codebase, defined in packages/react-dom-bindings/src/client/ReactDOMSelection.js.
Where is setOffsets() defined?
setOffsets() is defined in packages/react-dom-bindings/src/client/ReactDOMSelection.js at line 153.
What does setOffsets() call?
setOffsets() calls 1 function(s): getNodeForCharacterOffset.
What calls setOffsets()?
setOffsets() is called by 1 function(s): setSelection.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free