From 267800c26f4ee662c03cd8f857ad397e244e1b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pereira?= Date: Mon, 13 Nov 2017 19:42:09 +0000 Subject: [PATCH] Add support to iframe (#1396) * pass window to util functions * remove unused getWindow function * fix findDOMNode in after plugin --- packages/slate-react/src/components/content.js | 2 +- packages/slate-react/src/plugins/after.js | 7 ++++--- packages/slate-react/src/utils/find-dom-node.js | 2 +- packages/slate-react/src/utils/find-dom-point.js | 7 ++----- packages/slate-react/src/utils/find-dom-range.js | 9 +++------ 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/packages/slate-react/src/components/content.js b/packages/slate-react/src/components/content.js index 03a6145c9..25fe74790 100644 --- a/packages/slate-react/src/components/content.js +++ b/packages/slate-react/src/components/content.js @@ -154,7 +154,7 @@ class Content extends React.Component { // Otherwise, figure out which DOM nodes should be selected... const current = !!rangeCount && native.getRangeAt(0) - const range = findDOMRange(selection) + const range = findDOMRange(selection, window) if (!range) { logger.error('Unable to find a native DOM range from the current selection.', { selection }) diff --git a/packages/slate-react/src/plugins/after.js b/packages/slate-react/src/plugins/after.js index 867b1089b..36a6c7770 100644 --- a/packages/slate-react/src/plugins/after.js +++ b/packages/slate-react/src/plugins/after.js @@ -172,7 +172,7 @@ function AfterPlugin() { if (isVoid) { const r = range.cloneRange() const n = isVoidBlock ? endBlock : endInline - const node = findDOMNode(n) + const node = findDOMNode(n, window) r.setEndAfter(node) contents = r.cloneContents() attach = contents.childNodes[contents.childNodes.length - 1].firstChild @@ -190,7 +190,7 @@ function AfterPlugin() { .size !== 0 if (hasMarks) { const r = range.cloneRange() - const node = findDOMNode(startText) + const node = findDOMNode(startText, window) r.setStartBefore(node) contents = r.cloneContents() attach = contents.childNodes[contents.childNodes.length - 1].firstChild @@ -329,6 +329,7 @@ function AfterPlugin() { const { value } = change const { document, selection } = value + const window = getWindow(event.target) let target = getEventRange(event, value) if (!target) return @@ -396,7 +397,7 @@ function AfterPlugin() { // Until this is fixed in React, we dispatch a mouseup event on that // DOM node, since that will make it go back to normal. const focusNode = document.getNode(target.focusKey) - const el = findDOMNode(focusNode) + const el = findDOMNode(focusNode, window) if (!el) return el.dispatchEvent(new MouseEvent('mouseup', { diff --git a/packages/slate-react/src/utils/find-dom-node.js b/packages/slate-react/src/utils/find-dom-node.js index 67fc470fb..48b7bd9bb 100644 --- a/packages/slate-react/src/utils/find-dom-node.js +++ b/packages/slate-react/src/utils/find-dom-node.js @@ -8,7 +8,7 @@ import { Node } from 'slate' * @return {Element} */ -function findDOMNode(key) { +function findDOMNode(key, window) { if (Node.isNode(key)) { key = key.key } diff --git a/packages/slate-react/src/utils/find-dom-point.js b/packages/slate-react/src/utils/find-dom-point.js index 5639f026a..2d5c69844 100644 --- a/packages/slate-react/src/utils/find-dom-point.js +++ b/packages/slate-react/src/utils/find-dom-point.js @@ -1,6 +1,4 @@ -import getWindow from 'get-window' - import findDOMNode from './find-dom-node' /** @@ -12,9 +10,8 @@ import findDOMNode from './find-dom-node' * @return {Object} */ -function findDOMPoint(key, offset) { - const el = findDOMNode(key) - const window = getWindow(el) +function findDOMPoint(key, offset, window) { + const el = findDOMNode(key, window) let start = 0 let n diff --git a/packages/slate-react/src/utils/find-dom-range.js b/packages/slate-react/src/utils/find-dom-range.js index fc3fd1f6b..0a0b9ac3b 100644 --- a/packages/slate-react/src/utils/find-dom-range.js +++ b/packages/slate-react/src/utils/find-dom-range.js @@ -1,6 +1,4 @@ -import getWindow from 'get-window' - import findDOMPoint from './find-dom-point' /** @@ -10,13 +8,12 @@ import findDOMPoint from './find-dom-point' * @return {Object|Null} */ -function findDOMRange(range) { +function findDOMRange(range, window) { const { anchorKey, anchorOffset, focusKey, focusOffset, isBackward, isCollapsed } = range - const anchor = findDOMPoint(anchorKey, anchorOffset) - const focus = isCollapsed ? anchor : findDOMPoint(focusKey, focusOffset) + const anchor = findDOMPoint(anchorKey, anchorOffset, window) + const focus = isCollapsed ? anchor : findDOMPoint(focusKey, focusOffset, window) if (!anchor || !focus) return null - const window = getWindow(anchor.node) const r = window.document.createRange() const start = isBackward ? focus : anchor const end = isBackward ? anchor : focus