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