MCPcopy Create free account
hub / github.com/krasimir/react-in-patterns / setOffsets

Function setOffsets

code/dependency-injection/public/app.js:6549–6586  ·  view source on GitHub ↗

* In modern non-IE browsers, we can support both forward and backward * selections. * * Note: IE10+ supports the Selection object, but it does not support * the `extend` method, which means that even in modern IE, it's not possible * to programmatically create a backward selection. Thus, for al

(node, offsets)

Source from the content-addressed store, hash-verified

6547 * @param {object} offsets
6548 */
6549function setOffsets(node, offsets) {
6550 if (!window.getSelection) {
6551 return;
6552 }
6553
6554 var selection = window.getSelection();
6555 var length = node[getTextContentAccessor()].length;
6556 var start = Math.min(offsets.start, length);
6557 var end = offsets.end === undefined ? start : Math.min(offsets.end, length);
6558
6559 // IE 11 uses modern selection, but doesn't support the extend method.
6560 // Flip backward selections, so we can set with a single range.
6561 if (!selection.extend && start > end) {
6562 var temp = end;
6563 end = start;
6564 start = temp;
6565 }
6566
6567 var startMarker = getNodeForCharacterOffset(node, start);
6568 var endMarker = getNodeForCharacterOffset(node, end);
6569
6570 if (startMarker && endMarker) {
6571 if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {
6572 return;
6573 }
6574 var range = document.createRange();
6575 range.setStart(startMarker.node, startMarker.offset);
6576 selection.removeAllRanges();
6577
6578 if (start > end) {
6579 selection.addRange(range);
6580 selection.extend(endMarker.node, endMarker.offset);
6581 } else {
6582 range.setEnd(endMarker.node, endMarker.offset);
6583 selection.addRange(range);
6584 }
6585 }
6586}
6587
6588function isInDocument(node) {
6589 return containsNode(document.documentElement, node);

Callers 1

setSelectionFunction · 0.70

Calls 2

getTextContentAccessorFunction · 0.70

Tested by

no test coverage detected