From e241da3af0d153d6b20b8de2d85c66f306419ffa Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 14 May 2020 15:35:38 +0100 Subject: [PATCH] Fix diff wrong route offsets because of skipping a node insert Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/utils/MessageDiffUtils.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/utils/MessageDiffUtils.js b/src/utils/MessageDiffUtils.js index de0d8fdc89..7398173fdd 100644 --- a/src/utils/MessageDiffUtils.js +++ b/src/utils/MessageDiffUtils.js @@ -77,8 +77,6 @@ function findRefNodes(root, route, isAddition) { const end = isAddition ? route.length - 1 : route.length; for (let i = 0; i < end; ++i) { refParentNode = refNode; - // Lists don't have appropriate child nodes we can use. - if (!refNode.childNodes[route[i]]) continue; refNode = refNode.childNodes[route[i]]; } return {refNode, refParentNode}; @@ -190,10 +188,11 @@ function renderDifferenceInDOM(originalRootNode, diff, diffMathPatch) { break; } case "addTextElement": { - if (diff.value !== "\n") { - const insNode = wrapInsertion(stringAsTextNode(diff.value)); - insertBefore(refParentNode, refNode, insNode); - } + // XXX: sometimes diffDOM says insert a newline when there shouldn't be one + // but we must insert the node anyway so that we don't break the route child IDs. + // See https://github.com/fiduswriter/diffDOM/issues/100 + const insNode = wrapInsertion(stringAsTextNode(diff.value !== "\n" ? diff.value : "")); + insertBefore(refParentNode, refNode, insNode); break; } // e.g. when changing a the href of a link,