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

Function setOffsets

code/one-direction-data-flow/public/app.js:6329–6366  ·  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

6327 * @param {object} offsets
6328 */
6329function setOffsets(node, offsets) {
6330 if (!window.getSelection) {
6331 return;
6332 }
6333
6334 var selection = window.getSelection();
6335 var length = node[getTextContentAccessor()].length;
6336 var start = Math.min(offsets.start, length);
6337 var end = offsets.end === undefined ? start : Math.min(offsets.end, length);
6338
6339 // IE 11 uses modern selection, but doesn't support the extend method.
6340 // Flip backward selections, so we can set with a single range.
6341 if (!selection.extend && start > end) {
6342 var temp = end;
6343 end = start;
6344 start = temp;
6345 }
6346
6347 var startMarker = getNodeForCharacterOffset(node, start);
6348 var endMarker = getNodeForCharacterOffset(node, end);
6349
6350 if (startMarker && endMarker) {
6351 if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {
6352 return;
6353 }
6354 var range = document.createRange();
6355 range.setStart(startMarker.node, startMarker.offset);
6356 selection.removeAllRanges();
6357
6358 if (start > end) {
6359 selection.addRange(range);
6360 selection.extend(endMarker.node, endMarker.offset);
6361 } else {
6362 range.setEnd(endMarker.node, endMarker.offset);
6363 selection.addRange(range);
6364 }
6365 }
6366}
6367
6368function isInDocument(node) {
6369 return containsNode(document.documentElement, node);

Callers 1

setSelectionFunction · 0.70

Calls 2

getTextContentAccessorFunction · 0.70

Tested by

no test coverage detected