Subramanya Sastry has uploaded a new change for review.

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

Change subject: Bug fix serializing nested refs
......................................................................

Bug fix serializing nested refs

* <ref> ids should be looked up in the edited DOM,
  not the original DOM.

Change-Id: I3745f30721993bf1d2389e8c6868fae1d1c91235
---
M lib/mediawiki.SelectiveSerializer.js
M lib/mediawiki.WikitextSerializer.js
M tests/parserTests.js
3 files changed, 14 insertions(+), 11 deletions(-)


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

diff --git a/lib/mediawiki.SelectiveSerializer.js 
b/lib/mediawiki.SelectiveSerializer.js
index 9ed0477..e33814f 100644
--- a/lib/mediawiki.SelectiveSerializer.js
+++ b/lib/mediawiki.SelectiveSerializer.js
@@ -83,9 +83,7 @@
 
                if ( !diff.isEmpty ) {
                        body = diff.dom;
-
-                       // Add the serializer info
-                       // new DiffToSelserConverter(this.env, body).convert();
+                       this.env.page.editedDoc = body.ownerDocument;
 
                        if ( this.trace || ( this.env.conf.parsoid.dumpFlags &&
                                this.env.conf.parsoid.dumpFlags.indexOf( 
'dom:post-dom-diff' ) !== -1) ) {
diff --git a/lib/mediawiki.WikitextSerializer.js 
b/lib/mediawiki.WikitextSerializer.js
index 778ed8d..26f1820 100644
--- a/lib/mediawiki.WikitextSerializer.js
+++ b/lib/mediawiki.WikitextSerializer.js
@@ -528,8 +528,8 @@
 };
 
 WSP._buildExtensionWT = function(state, node, dataMW) {
-       var extName = dataMW.name,
-               srcParts = ["<", extName];
+       var extName = dataMW.name;
+       var srcParts = ["<", extName];
 
        // Serialize extension attributes in normalized form as:
        // key='value'
@@ -575,11 +575,11 @@
                                // If the body isn't contained in 
data-mw.body.html, look if
                                // there's an element pointed to by body.id.
                                var bodyElt = 
node.ownerDocument.getElementById(dataMW.body.id);
-                               if (!bodyElt && state.env.page.dom) {
+                               if (!bodyElt && state.env.page.editedDoc) {
                                        // Try to get to it from the main page.
                                        // This can happen when the <ref> is 
inside another extension,
                                        // most commonly inside a <references>.
-                                       bodyElt = 
state.env.page.dom.ownerDocument.getElementById(dataMW.body.id);
+                                       bodyElt = 
state.env.page.editedDoc.getElementById(dataMW.body.id);
                                }
                                if (bodyElt) {
                                        htmlText = bodyElt.innerHTML;
@@ -593,7 +593,7 @@
                                                if (ref) {
                                                        extraDebug += ' [own 
doc: ' + ref.outerHTML + ']';
                                                }
-                                               ref = 
state.env.page.dom.ownerDocument.querySelector(href);
+                                               ref = 
state.env.page.editedDoc.querySelector(href);
                                                if (ref) {
                                                        extraDebug += ' [main 
doc: ' + ref.outerHTML + ']';
                                                }
@@ -1367,8 +1367,8 @@
        this.logType = selserMode ? "trace/selser" : "trace/wts";
        this.trace = this.env.log.bind(this.env, this.logType);
 
-       if (!this.env.page.dom) {
-               this.env.page.dom = body;
+       if (!this.env.page.editedDoc) {
+               this.env.page.editedDoc = body.ownerDocument;
        }
        var state = new SerializerState(this, this.options);
        try {
diff --git a/tests/parserTests.js b/tests/parserTests.js
index 400d068..ef05a0e 100755
--- a/tests/parserTests.js
+++ b/tests/parserTests.js
@@ -421,7 +421,12 @@
                        : new WikitextSerializer({ env: this.env });
 
        try {
-               this.env.page.dom = item.cachedBODY;
+               if (startsAtWikitext) {
+                       // FIXME: All tests share an env.
+                       // => we need to initialize this each time over here.
+                       this.env.page.dom = item.cachedBODY;
+                       this.env.page.editedDoc = item.cachedBODY.ownerDoc;
+               }
                if ( mode === 'selser' ) {
                        // console.warn("--> selsering: " + body.outerHTML);
                        this.env.setPageSrcInfo( item.wikitext );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3745f30721993bf1d2389e8c6868fae1d1c91235
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/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