Rsmith has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/68719


Change subject: (WIP) Fix spurious <li> nodes using wikitext list syntax.
......................................................................

(WIP) Fix spurious <li> nodes using wikitext list syntax.

Change-Id: Id1821038d3ad930f42630e60d793835a8316631e
---
M js/lib/mediawiki.DOMPostProcessor.js
1 file changed, 59 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid 
refs/changes/19/68719/1

diff --git a/js/lib/mediawiki.DOMPostProcessor.js 
b/js/lib/mediawiki.DOMPostProcessor.js
index 882904c..818aa47 100644
--- a/js/lib/mediawiki.DOMPostProcessor.js
+++ b/js/lib/mediawiki.DOMPostProcessor.js
@@ -2417,6 +2417,64 @@
        }
 }
 
+/*
+ * For the following wikitext (called the "LI hack"):
+ *
+ *     * <li class="..."> foo
+ *
+ * the parser generates something like
+ *
+ *     <li></li><li class="...">foo</li>
+ *
+ * This visitor deletes such spurious <li>'s.
+ */
+function cleanUpLIHack(node) {
+       var nextNode = node.nextSibling;
+
+       /* Is `str` composed of non-newline whitespace? */
+       function whitespace(str) {
+               for (var i = 0; i < str.length; i++) {
+                       if (!(str[i] === ' ' || str[i] === '\t')) {
+                               console.log(">>> whitespace => false");
+                               return false;
+                       }
+               }
+               console.log(">>> whitespace => true");
+               return true;
+       }
+
+       /* Does `node` contain nothing or just non-newline whitespace? */
+       function nodeEssentiallyEmpty(node) {
+               var contents = node.childNodes;
+               if (0 === contents.length) {
+                       return true;
+               } else if (contents.length > 1) {
+                       return false;
+               } else {
+                       var child = contents[0];
+                       if (child.nodeName === "#text" &&
+                           whitespace(child.nodeValue)) {
+                               return true;
+                       } else {
+                               return false;
+                       }
+               }
+       }
+
+       if (nodeEssentiallyEmpty(node) &&
+           null !== nextNode &&
+           "html" === nextNode.data.parsoid["stx"]) {
+               // at this point, we've found the pattern we are
+               // looking for
+               console.log(">>> Deleting node: ", node);
+               deleteNode(node);
+       } else {
+               // do nothing
+               console.log(">>> Doing nothing...");
+               return true;
+       }
+}
+
 /**
  * DOMTraverser handler that unpacks DOM fragments which were injected in the
  * token pipeline.
@@ -2792,6 +2850,7 @@
 
        var dataParsoidSaver = new DOMTraverser();
        dataParsoidSaver.addHandler( 'meta', stripMarkerMetas );
+       dataParsoidSaver.addHandler( 'li', cleanUpLIHack );
        dataParsoidSaver.addHandler( null, saveDataParsoid );
        this.processors.push(dataParsoidSaver.traverse.bind(dataParsoidSaver));
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/68719
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id1821038d3ad930f42630e60d793835a8316631e
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Rsmith <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to