From 681157dac411f8c062996132d74a16ca52e904ed Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 8 Apr 2022 09:33:55 +0200 Subject: [PATCH] Improve handling of split wrapped contentDOM nodes on Android FIX: Fix an issue where enter on Chrome Android could, in textblock nodes rendered with an inner content element, delete the text after the cursor. Closes https://github.com/ProseMirror/prosemirror/issues/1252 --- src/domchange.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/domchange.js b/src/domchange.js index 2735269d..67663bfa 100644 --- a/src/domchange.js +++ b/src/domchange.js @@ -115,15 +115,17 @@ export function readDOMChange(view, from, to, typeOver, addedNodes) { view.lastKeyCode = null let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide) + if ((browser.ios && view.lastIOSEnter > Date.now() - 225 || browser.android) && + addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P") && + (!change || change.endA >= change.endB) && + view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) { + view.lastIOSEnter = 0 + return + } if (!change) { if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) && !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) { change = {start: sel.from, endA: sel.to, endB: sel.to} - } else if ((browser.ios && view.lastIOSEnter > Date.now() - 225 || browser.android) && - addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P") && - view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) { - view.lastIOSEnter = 0 - return } else { if (parse.sel) { let sel = resolveSelection(view, view.state.doc, parse.sel)