Subramanya Sastry has uploaded a new change for review. https://gerrit.wikimedia.org/r/89360
Change subject: DOM Fragment Unpacking: Bug fixes in hasBadNesting + DOM traversal ...................................................................... DOM Fragment Unpacking: Bug fixes in hasBadNesting + DOM traversal * hasBadNesting code had 2 bugs: - Wrong polarity on isNestableElement check. - Missing special case for 'A' (because 'A' is considered a formatting elt, but for our purposes cannot be nested) These two bugs cancelled out for what we wanted to handle (nested A-tags), but it triggered in some cases for <DIV> tags. * Fragment unpacking was not returning the right next-node to process when unacceptable tag nesting was fixed up after unpacking. * Together, this caused wt2wt error on this snippet: -------------------- <div><gallery> File:Foo.jpg </gallery></div> [[Fool]]s -------------------- This is a snippet extracted from en:Arch which had regressions in RT testing. The snippet now RTs and en:Arch now has its regressions fixed. * TODO: Find a way to convert this into a parser test. Change-Id: I523730f35082d0dd802ea2194ed71409ba1fe2c9 --- M js/lib/dom.t.unpackDOMFragments.js 1 file changed, 13 insertions(+), 3 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid refs/changes/60/89360/1 diff --git a/js/lib/dom.t.unpackDOMFragments.js b/js/lib/dom.t.unpackDOMFragments.js index ce275cb..03730fe 100644 --- a/js/lib/dom.t.unpackDOMFragments.js +++ b/js/lib/dom.t.unpackDOMFragments.js @@ -11,13 +11,19 @@ // looking for nesting of identical tags. But, HTML tree building // has lot more restrictions on nesting. It seems the simplest way // to get all the rules right is to (serialize + reparse). + function isNestableElement(nodeName) { - return nodeName === 'SPAN' || + // Special case for 'A' because it is considered a formatting elt + // but it cannot really be nested. In any case, we need a real + // solution to this problem rather than this hacky soln. that works + // for a subset of dom-fragment unpacking scenarios. + return nodeName !== 'A' && ( + nodeName === 'SPAN' || nodeName === 'DIV' || - Consts.HTML.FormattingTags.has(nodeName); + Consts.HTML.FormattingTags.has(nodeName)); } - return isNestableElement(targetNode.nodeName) && + return !isNestableElement(targetNode.nodeName) && DU.treeHasElement(fragmentNode, targetNode.nodeName); } @@ -224,6 +230,10 @@ var newDoc = DU.parseHTML(fragmentParent.outerHTML.replace(timestamp, dummyNode.innerHTML)); DU.migrateChildrenBetweenDocs(newDoc.body, fragmentParent.parentNode, fragmentParent); + // Set nextNode to the previous-sibling of former fragmentParent (which will get deleted) + // This will ensure that all nodes will get handled + nextNode = fragmentParent.previousSibling; + // fragmentParent itself is useless now DU.deleteNode(fragmentParent); } else { -- To view, visit https://gerrit.wikimedia.org/r/89360 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I523730f35082d0dd802ea2194ed71409ba1fe2c9 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Parsoid Gerrit-Branch: master Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits