Skip to content

Commit c5e3925

Browse files
committed
Adapt getSelection to use node’s window object
1 parent e1d4110 commit c5e3925

File tree

3 files changed

+29
-15
lines changed

3 files changed

+29
-15
lines changed

packages/react-dom/src/client/ReactDOMSelection.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ var {TEXT_NODE} = require('../shared/HTMLNodeType');
1616
* @return {?object}
1717
*/
1818
function getModernOffsets(outerNode) {
19-
var selection = window.getSelection && window.getSelection();
19+
var win = window;
20+
if (outerNode.ownerDocument && outerNode.ownerDocument.defaultView) {
21+
win = outerNode.ownerDocument.defaultView;
22+
}
23+
var selection = win.getSelection && win.getSelection();
2024

2125
if (!selection || selection.rangeCount === 0) {
2226
return null;
@@ -153,11 +157,13 @@ function getModernOffsetsFromPoints(
153157
* @param {object} offsets
154158
*/
155159
function setModernOffsets(node, offsets) {
156-
if (!window.getSelection) {
160+
var doc = node.ownerDocument || document;
161+
162+
if (!doc.defaultView.getSelection) {
157163
return;
158164
}
159165

160-
var selection = window.getSelection();
166+
var selection = doc.defaultView.getSelection();
161167
var length = node[getTextContentAccessor()].length;
162168
var start = Math.min(offsets.start, length);
163169
var end = offsets.end === undefined ? start : Math.min(offsets.end, length);
@@ -183,7 +189,7 @@ function setModernOffsets(node, offsets) {
183189
) {
184190
return;
185191
}
186-
var range = document.createRange();
192+
var range = doc.createRange();
187193
range.setStart(startMarker.node, startMarker.offset);
188194
selection.removeAllRanges();
189195

packages/react-dom/src/events/SelectEventPlugin.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,20 @@ function getSelection(node) {
7171
start: node.selectionStart,
7272
end: node.selectionEnd,
7373
};
74-
} else if (window.getSelection) {
75-
var selection = window.getSelection();
76-
return {
77-
anchorNode: selection.anchorNode,
78-
anchorOffset: selection.anchorOffset,
79-
focusNode: selection.focusNode,
80-
focusOffset: selection.focusOffset,
81-
};
74+
} else {
75+
var win = window;
76+
if (node.ownerDocument && node.ownerDocument.defaultView) {
77+
win = node.ownerDocument.defaultView;
78+
}
79+
if (win.getSelection) {
80+
var selection = win.getSelection();
81+
return {
82+
anchorNode: selection.anchorNode,
83+
anchorOffset: selection.anchorOffset,
84+
focusNode: selection.focusNode,
85+
focusOffset: selection.focusOffset,
86+
};
87+
}
8288
}
8389
}
8490

packages/react-dom/src/events/SyntheticClipboardEvent.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ var SyntheticEvent = require('events/SyntheticEvent');
1515
*/
1616
var ClipboardEventInterface = {
1717
clipboardData: function(event) {
18-
return 'clipboardData' in event
19-
? event.clipboardData
20-
: window.clipboardData;
18+
if ('clipboardData' in event) {
19+
return event.clipboardData;
20+
}
21+
var doc = (event.target && event.target.ownerDocument) || document;
22+
return doc.defaultView.clipboardData;
2123
},
2224
};
2325

0 commit comments

Comments
 (0)