Subramanya Sastry has uploaded a new change for review.

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

Change subject: WIP: (Bug 62341) WTS fix to use regular wikilinks if nowikis 
show up.
......................................................................

WIP: (Bug 62341) WTS fix to use regular wikilinks if nowikis show up.

* This doesn't fix 62341 exactly (nowikis still introduced in link
  content), but it atleast doesn't break the wikilink anymore.

* TO BE DONE:
  - add parser tests.
  - investigate the html2wt failure.
  - maybe do some code cleanup.

Change-Id: Ie661a586bb050171811db8d975c91e1a286b7aa3
---
M lib/wts.LinkHandler.js
M tests/parserTests-blacklist.js
2 files changed, 19 insertions(+), 9 deletions(-)


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

diff --git a/lib/wts.LinkHandler.js b/lib/wts.LinkHandler.js
index 505704d..bc7e036 100644
--- a/lib/wts.LinkHandler.js
+++ b/lib/wts.LinkHandler.js
@@ -112,7 +112,8 @@
        var res = state.serializer.escapeWikiText(state, contentString, { node: 
contentNode });
        state.inLink = false;
        state.wteHandlerStack.pop();
-       return res;
+
+       return { res: res, changed: res !== contentString };
 };
 
 /**
@@ -335,28 +336,35 @@
                        }
 
                        // The string value of the content, if it is plain text.
-                       var linkTarget;
+                       var linkTarget, escapedRes;
 
                        if ( linkData.isRedirect ) {
                                linkTarget = target.value;
                                if (target.modified || !target.fromsrc) {
                                        linkTarget = 
linkTarget.replace(/^(\.\.?\/)*/, '').replace(/_/g, ' ');
-                                       linkTarget = 
escapeWikiLinkContentString(linkTarget,
+                                       escapedRes = 
escapeWikiLinkContentString(linkTarget,
                                                state, linkData.contentNode);
+                                       linkTarget = escapedRes.res;
                                }
                                cb( linkData.prefix + '[[' + linkTarget + ']]', 
node );
                                return;
                        } else if ( isSimpleWikiLink(env, dp, target, linkData) 
) {
                                // Simple case
                                if (!target.modified && 
!linkData.contentModified) {
-                                       linkTarget = target.value;
+                                       cb( linkData.prefix + '[[' + 
target.value + ']]' + linkData.tail, node );
                                } else {
-                                       linkTarget = 
escapeWikiLinkContentString(linkData.content.string,
+                                       linkTarget = addColonEscape(this.env, 
linkData.content.string, linkData);
+                                       escapedRes = 
escapeWikiLinkContentString(linkData.content.string,
                                                        state, 
linkData.contentNode);
-                                       linkTarget = addColonEscape(this.env, 
linkTarget, linkData);
+                                       if (escapedRes.changed) {
+                                               // If the content string got 
nowiki escapes, we can no longer
+                                               // use the simple wikilink 
format for it.
+                                               cb( linkData.prefix + '[[' + 
linkTarget + '|' + escapedRes.res + ']]'
+                                                       + linkData.tail, node );
+                                       } else {
+                                               cb( linkData.prefix + '[[' + 
linkTarget + ']]' + linkData.tail, node );
+                                       }
                                }
-
-                               cb( linkData.prefix + '[[' + linkTarget + ']]' 
+ linkData.tail, node );
                                return;
                        } else {
                                var usePT = usePipeTrick(env, dp, target, 
linkData);
@@ -377,8 +385,9 @@
                                        if (linkData.content.fromsrc) {
                                                contentSrc = 
linkData.content.string;
                                        } else {
-                                               contentSrc = 
escapeWikiLinkContentString(linkData.content.string || '',
+                                               escapedRes = 
escapeWikiLinkContentString(linkData.content.string || '',
                                                                state, 
linkData.contentNode);
+                                               contentSrc = escapedRes.res;
                                        }
                                }
 
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 639f9c5..fd2d9de 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -1411,6 +1411,7 @@
 add("html2wt", "Interlanguage link, with prefix links", "Blah blah blah\n");
 add("html2wt", "Double interlanguage link, with prefix links (bug 8897)", 
"Blah blah blah\n");
 add("html2wt", "Parsoid-specific test: Wikilinks with   should RT 
properly", "<a href=\"/index.php?title=WW_II&action=edit&redlink=1\" 
class=\"new\" title=\"WW II (lonkásá  ezalí tɛ̂)\">WW II</a>\n");
+add("html2wt", "Parsoid bug 53221: Wikilinks should be properly 
entity-escaped", "He&amp;nbsp;llo [[Foo|He&amp;nbsp;llo]]\n\nHe&amp;nbsp;llo 
[[He&nbsp;llo]]\n");
 add("html2wt", "Parsoid: recognize interlanguage links without a target page", 
"\n[[http://ko.wikipedia.org/wiki/]]\n";);
 add("html2wt", "Parsoid: recognize interwiki links without a target page", 
"[[ko:]]\n");
 add("html2wt", "Redirect to image page (2)", "#REDIRECT [[File:Wiki.png]]");

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie661a586bb050171811db8d975c91e1a286b7aa3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>

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

Reply via email to