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

Reply via email to