diff options
author | janekptacijarabaci <janekptacijarabaci@seznam.cz> | 2018-04-15 06:55:40 +0200 |
---|---|---|
committer | janekptacijarabaci <janekptacijarabaci@seznam.cz> | 2018-04-15 06:55:40 +0200 |
commit | 05bb04a6514d2e6557dc0697c34a56cfd2c399a4 (patch) | |
tree | 78cfddf03704b60d953aff8bf9787bc0bd6a223e /editor/libeditor/HTMLEditorDataTransfer.cpp | |
parent | 8a95c03dcd2a7f2c6d64b6ee917f6cb363e9ca60 (diff) | |
download | UXP-05bb04a6514d2e6557dc0697c34a56cfd2c399a4.tar UXP-05bb04a6514d2e6557dc0697c34a56cfd2c399a4.tar.gz UXP-05bb04a6514d2e6557dc0697c34a56cfd2c399a4.tar.lz UXP-05bb04a6514d2e6557dc0697c34a56cfd2c399a4.tar.xz UXP-05bb04a6514d2e6557dc0697c34a56cfd2c399a4.zip |
moebius#190: HTML - table - editor (contenteditable) - post process node array to remove all descendants of replacement node
https://github.com/MoonchildProductions/moebius/issues/190
Diffstat (limited to 'editor/libeditor/HTMLEditorDataTransfer.cpp')
-rw-r--r-- | editor/libeditor/HTMLEditorDataTransfer.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/editor/libeditor/HTMLEditorDataTransfer.cpp b/editor/libeditor/HTMLEditorDataTransfer.cpp index b9cd8adb9..ed350c0dd 100644 --- a/editor/libeditor/HTMLEditorDataTransfer.cpp +++ b/editor/libeditor/HTMLEditorDataTransfer.cpp @@ -2382,27 +2382,26 @@ HTMLEditor::ReplaceOrphanedStructure( } // If we found substructure, paste it instead of its descendants. - // Only replace with the substructure if all the nodes in the list are - // descendants. - bool shouldReplaceNodes = true; - for (uint32_t i = 0; i < aNodeArray.Length(); i++) { + // Postprocess list to remove any descendants of this node so that we don't + // insert them twice. + uint32_t removedCount = 0; + uint32_t originalLength = aNodeArray.Length(); + for (uint32_t i = 0; i < originalLength; i++) { uint32_t idx = aStartOrEnd == StartOrEnd::start ? - i : (aNodeArray.Length() - i - 1); + (i - removedCount) : (originalLength - i - 1); OwningNonNull<nsINode> endpoint = aNodeArray[idx]; - if (!EditorUtils::IsDescendantOf(endpoint, replaceNode)) { - shouldReplaceNodes = false; - break; + if (endpoint == replaceNode || + EditorUtils::IsDescendantOf(endpoint, replaceNode)) { + aNodeArray.RemoveElementAt(idx); + removedCount++; } } - if (shouldReplaceNodes) { - // Now replace the removed nodes with the structural parent - aNodeArray.Clear(); - if (aStartOrEnd == StartOrEnd::end) { - aNodeArray.AppendElement(*replaceNode); - } else { - aNodeArray.InsertElementAt(0, *replaceNode); - } + // Now replace the removed nodes with the structural parent + if (aStartOrEnd == StartOrEnd::end) { + aNodeArray.AppendElement(*replaceNode); + } else { + aNodeArray.InsertElementAt(0, *replaceNode); } } |