mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Deleted a specific code for ie8 - document.selection (#9298)
This commit is contained in:
committed by
Brandon Dail
parent
76c5c6deb5
commit
5ad1c76386
@@ -11,8 +11,6 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
|
||||
|
||||
var getNodeForCharacterOffset = require('getNodeForCharacterOffset');
|
||||
var getTextContentAccessor = require('getTextContentAccessor');
|
||||
|
||||
@@ -25,39 +23,6 @@ function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
|
||||
return anchorNode === focusNode && anchorOffset === focusOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the appropriate anchor and focus node/offset pairs for IE.
|
||||
*
|
||||
* The catch here is that IE's selection API doesn't provide information
|
||||
* about whether the selection is forward or backward, so we have to
|
||||
* behave as though it's always forward.
|
||||
*
|
||||
* IE text differs from modern selection in that it behaves as though
|
||||
* block elements end with a new line. This means character offsets will
|
||||
* differ between the two APIs.
|
||||
*
|
||||
* @param {DOMElement} node
|
||||
* @return {object}
|
||||
*/
|
||||
function getIEOffsets(node) {
|
||||
var selection = document.selection;
|
||||
var selectedRange = selection.createRange();
|
||||
var selectedLength = selectedRange.text.length;
|
||||
|
||||
// Duplicate selection so we can move range without breaking user selection.
|
||||
var fromStart = selectedRange.duplicate();
|
||||
fromStart.moveToElementText(node);
|
||||
fromStart.setEndPoint('EndToStart', selectedRange);
|
||||
|
||||
var startOffset = fromStart.text.length;
|
||||
var endOffset = startOffset + selectedLength;
|
||||
|
||||
return {
|
||||
start: startOffset,
|
||||
end: endOffset,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DOMElement} node
|
||||
* @return {?object}
|
||||
@@ -130,32 +95,6 @@ function getModernOffsets(node) {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DOMElement|DOMTextNode} node
|
||||
* @param {object} offsets
|
||||
*/
|
||||
function setIEOffsets(node, offsets) {
|
||||
var range = document.selection.createRange().duplicate();
|
||||
var start, end;
|
||||
|
||||
if (offsets.end === undefined) {
|
||||
start = offsets.start;
|
||||
end = start;
|
||||
} else if (offsets.start > offsets.end) {
|
||||
start = offsets.end;
|
||||
end = offsets.start;
|
||||
} else {
|
||||
start = offsets.start;
|
||||
end = offsets.end;
|
||||
}
|
||||
|
||||
range.moveToElementText(node);
|
||||
range.moveStart('character', start);
|
||||
range.setEndPoint('EndToStart', range);
|
||||
range.moveEnd('character', end - start);
|
||||
range.select();
|
||||
}
|
||||
|
||||
/**
|
||||
* In modern non-IE browsers, we can support both forward and backward
|
||||
* selections.
|
||||
@@ -204,21 +143,17 @@ function setModernOffsets(node, offsets) {
|
||||
}
|
||||
}
|
||||
|
||||
var useIEOffsets = ExecutionEnvironment.canUseDOM &&
|
||||
'selection' in document &&
|
||||
!('getSelection' in window);
|
||||
|
||||
var ReactDOMSelection = {
|
||||
/**
|
||||
* @param {DOMElement} node
|
||||
*/
|
||||
getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,
|
||||
getOffsets: getModernOffsets,
|
||||
|
||||
/**
|
||||
* @param {DOMElement|DOMTextNode} node
|
||||
* @param {object} offsets
|
||||
*/
|
||||
setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets,
|
||||
setOffsets: setModernOffsets,
|
||||
};
|
||||
|
||||
module.exports = ReactDOMSelection;
|
||||
|
||||
@@ -98,20 +98,6 @@ var ReactInputSelection = {
|
||||
start: input.selectionStart,
|
||||
end: input.selectionEnd,
|
||||
};
|
||||
} else if (
|
||||
document.selection &&
|
||||
(input.nodeName && input.nodeName.toLowerCase() === 'input')
|
||||
) {
|
||||
// IE8 input.
|
||||
var range = document.selection.createRange();
|
||||
// There can only be one selection per document in IE, so it must
|
||||
// be in our element.
|
||||
if (range.parentElement() === input) {
|
||||
selection = {
|
||||
start: -range.moveStart('character', -input.value.length),
|
||||
end: -range.moveEnd('character', -input.value.length),
|
||||
};
|
||||
}
|
||||
} else {
|
||||
// Content editable or old IE textarea.
|
||||
selection = ReactDOMSelection.getOffsets(input);
|
||||
@@ -136,15 +122,6 @@ var ReactInputSelection = {
|
||||
if ('selectionStart' in input) {
|
||||
input.selectionStart = start;
|
||||
input.selectionEnd = Math.min(end, input.value.length);
|
||||
} else if (
|
||||
document.selection &&
|
||||
(input.nodeName && input.nodeName.toLowerCase() === 'input')
|
||||
) {
|
||||
var range = input.createTextRange();
|
||||
range.collapse(true);
|
||||
range.moveStart('character', start);
|
||||
range.moveEnd('character', end - start);
|
||||
range.select();
|
||||
} else {
|
||||
ReactDOMSelection.setOffsets(input, offsets);
|
||||
}
|
||||
|
||||
@@ -80,14 +80,6 @@ function getSelection(node) {
|
||||
focusNode: selection.focusNode,
|
||||
focusOffset: selection.focusOffset,
|
||||
};
|
||||
} else if (document.selection) {
|
||||
var range = document.selection.createRange();
|
||||
return {
|
||||
parentElement: range.parentElement(),
|
||||
text: range.text,
|
||||
top: range.boundingTop,
|
||||
left: range.boundingLeft,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user