C. Scott Ananian has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/386010 )

Change subject: Only use our hacked Node#normalize if domino is old
......................................................................

Only use our hacked Node#normalize if domino is old

We used a hacky reimplementation of Node#normalize to work around
a slow array-based DOM implementation in domino; if domino is
new enough, this will break (because Node#childNodes isn't writable).
Use the built-in Node#normalize in that case instead.

Change-Id: Ifdf176e6876bb9f8d861d21feedeea913d36841c
---
M lib/wt2html/pp/processors/normalize.js
1 file changed, 19 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/10/386010/1

diff --git a/lib/wt2html/pp/processors/normalize.js 
b/lib/wt2html/pp/processors/normalize.js
index 22b12ac..73a03ef 100644
--- a/lib/wt2html/pp/processors/normalize.js
+++ b/lib/wt2html/pp/processors/normalize.js
@@ -1,6 +1,18 @@
 'use strict';
 
 var domino = require('domino');
+
+// Test for domino > 1.0.29, where childNodes was made a proper read-only
+// property. Not coincidentally, the workaround below for a slow implementation
+// of Node#normalize in domino became unnecessary after 1.0.29.
+var DOMINO_AFTER_1_0_29 = false;
+try {
+       domino.createDocument('test').body.childNodes = new 
domino.impl.NodeList();
+} catch (e) {
+       DOMINO_AFTER_1_0_29 = true;
+}
+
+
 var DU = require('../../../utils/DOMUtils').DOMUtils;
 
 // Like Node.normalize() but it clones the childNodes arrays in order to avoid
@@ -56,12 +68,18 @@
                        newChunks.push(kids.slice(chunkStart));
                }
                // Clone childNodes by concatenating the chunks
+               // XXX: childNodes isn't really writable in DOM; this only works
+               // for domino <= 1.0.29
                parent.childNodes = new 
domino.impl.NodeList([].concat.apply([], newChunks));
        }
 }
 
 function normalize(body, env) {
-       normalizeNode(body);
+       if (DOMINO_AFTER_1_0_29) {
+               body.normalize();
+       } else {
+               normalizeNode(body);
+       }
 }
 
 if (typeof module === "object") {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifdf176e6876bb9f8d861d21feedeea913d36841c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: C. Scott Ananian <canan...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to