jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/386016 )

Change subject: Linter: Add tidy-font-bug category
......................................................................


Linter: Add tidy-font-bug category

* This identifies breakage identified in T25467.
  Clearly, Tidy does some strange things sometimes.

* Added a bunch of mocha tests to verify this
  expectation.

Bug: T25467
Bug: T176568

Change-Id: I7510ad39172b4025a79bc6f3f26eb265587c8d8c
---
M lib/wt2html/pp/handlers/linter.js
M tests/mocha/linter.js
2 files changed, 114 insertions(+), 1 deletion(-)

Approvals:
  jenkins-bot: Verified
  Arlolra: Looks good to me, approved



diff --git a/lib/wt2html/pp/handlers/linter.js 
b/lib/wt2html/pp/handlers/linter.js
index 87d1ba0..22712e7 100644
--- a/lib/wt2html/pp/handlers/linter.js
+++ b/lib/wt2html/pp/handlers/linter.js
@@ -443,8 +443,9 @@
                obsoleteTagsRE = new RegExp('^(' + elts.join('|') + ')$');
        }
 
+       var templateInfo;
        if (!(dp.autoInsertedStart && dp.autoInsertedEnd) && 
obsoleteTagsRE.test(c.nodeName)) {
-               var templateInfo = findEnclosingTemplateName(env, tplInfo);
+               templateInfo = findEnclosingTemplateName(env, tplInfo);
                var lintObj = {
                        dsr: findLintDSR(templateInfo, tplInfo, dp.dsr),
                        templateInfo: templateInfo,
@@ -452,6 +453,66 @@
                };
                env.log('lint/obsolete-tag', lintObj);
        }
+
+       if (c.nodeName === 'FONT' && c.getAttribute('color')) {
+               /* ----------------------------------------------------------
+                * Tidy migrates <font> into the link in these cases
+                *     <font>[[Foo]]</font>
+                *     <font>[[Foo]]l</font> (link-trail)
+                *     <font><!--boo-->[[Foo]]</font>
+                *     <font>__NOTOC__[[Foo]]</font>
+                *     <font>[[Category:Foo]][[Foo]]</font>
+                *     <font>{{1x|[[Foo]]}}</font>
+                *
+                * Tidy does not migrate <font> into the link in these cases
+                *     <font> [[Foo]]</font>
+                *     <font>[[Foo]] </font>
+                *     <font>[[Foo]]L</font> (not a link-trail)
+                *     <font>[[Foo]][[Bar]]</font>
+                *     <font>[[Foo]][[Bar]]</font>
+                *
+                * <font> is special.
+                * This behavior is not seen with other formatting tags.
+                *
+                * Remex/parsoid won't do any of this.
+                * This difference in behavior only matters when the font tag
+                * specifies a link colour because the link no longer renders
+                * as blue/red but in the font-specified colour.
+                * ---------------------------------------------------------- */
+               var tidyFontBug = true;
+               var haveLink = false;
+               for (var n = c.firstChild; n; n = n.nextSibling) {
+                       if (!DU.isComment(n) &&
+                               n.nodeName !== 'A' &&
+                               n.nodeName !== 'FIGURE' &&
+                               !(n.nodeName === 'SPAN' && 
/\bmw:Image\b/.test(n.getAttribute('typeof'))) &&
+                               !DU.isBehaviorSwitch(env, n) &&
+                               !DU.isSolTransparentLink(n) &&
+                               !(n.nodeName === 'META' && 
Util.TPL_META_TYPE_REGEXP.test(n.getAttribute('typeof')))
+                       ) {
+                               tidyFontBug = false;
+                               break;
+                       }
+
+                       if (n.nodeName === 'A' || n.nodeName === 'FIGURE') {
+                               if (!haveLink) {
+                                       haveLink = true;
+                               } else {
+                                       tidyFontBug = false;
+                                       break;
+                               }
+                       }
+               }
+
+               if (tidyFontBug) {
+                       templateInfo = findEnclosingTemplateName(env, tplInfo);
+                       env.log('lint/tidy-font-bug', {
+                               dsr: findLintDSR(templateInfo, tplInfo, dp.dsr),
+                               templateInfo: templateInfo,
+                               params: { name: 'font' },
+                       });
+               }
+       }
 }
 
 /*
diff --git a/tests/mocha/linter.js b/tests/mocha/linter.js
index 33d68df..d710ede 100644
--- a/tests/mocha/linter.js
+++ b/tests/mocha/linter.js
@@ -745,4 +745,56 @@
                        });
                });
        });
+       describe('TIDY FONT BUG', function() {
+               var wtLines = [
+                       "<font color='green'>[[Foo]]</font>",
+                       "<font color='green'>[[Category:Boo]][[Foo]]</font>",
+                       "<font color='green'>__NOTOC__[[Foo]]</font>",
+                       "<font color='green'><!--boo-->[[Foo]]</font>",
+                       "<font color='green'>[[Foo|bar]]</font>",
+                       "<font color='green'>[[Foo|''bar'']]</font>",
+                       "<font color='green'>[[Foo|''bar'' and boo]]</font>",
+                       "<font color='green'>[[File:Foo.jpg|some 
caption]]</font>",
+                       "<font color='green'>[[File:Foo.jpg|thumb|128px|some 
caption]]</font>",
+                       "<font color='green'>[[Foo]]l</font>",
+                       "<font color='green'>{{1x|[[Foo]]}}</font>",
+               ];
+               it('should flag Tidy font fixups accurately when color 
attribute is present', function() {
+                       return 
parseWT(wtLines.join('\n')).then(function(result) {
+                               var n = wtLines.length;
+                               result.should.have.length(2 * n);
+                               for (var i = 0; i < 2 * n; i += 2) {
+                                       
result[i].should.have.a.property("type", "obsolete-tag");
+                                       result[i + 
1].should.have.a.property("type", "tidy-font-bug");
+                               }
+                       });
+               });
+               it('should not flag Tidy font fixups when color attribute is 
absent', function() {
+                       return parseWT(wtLines.join('\n').replace(/ 
color='green'/g, '')).then(function(result) {
+                               var n = wtLines.length;
+                               result.should.have.length(n);
+                               for (var i = 0; i < n; i += 1) {
+                                       
result[i].should.have.a.property("type", "obsolete-tag");
+                               }
+                       });
+               });
+               var wtLines2 = [
+                       "<font color='green'>[[Foo]][[Bar]]</font>",
+                       "<font color='green'> [[Foo]]</font>",
+                       "<font color='green'>[[Foo]] </font>",
+                       "<font color='green'>[[Foo]]D</font>",
+                       "<font color='green'>''[[Foo|bar]]''</font>",
+                       "<font color='green'><span>[[Foo|bar]]</span></font>",
+                       "<font color='green'><div>[[Foo|bar]]</div></font>",
+               ];
+               it('should not flag Tidy font fixups when Tidy does not do the 
fixups', function() {
+                       return 
parseWT(wtLines2.join('\n')).then(function(result) {
+                               var n = wtLines2.length;
+                               result.should.have.length(n);
+                               for (var i = 0; i < n; i += 1) {
+                                       
result[i].should.have.a.property("type", "obsolete-tag");
+                               }
+                       });
+               });
+       });
 });

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I7510ad39172b4025a79bc6f3f26eb265587c8d8c
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org>
Gerrit-Reviewer: Arlolra <abrea...@wikimedia.org>
Gerrit-Reviewer: C. Scott Ananian <canan...@wikimedia.org>
Gerrit-Reviewer: Legoktm <lego...@member.fsf.org>
Gerrit-Reviewer: Sbailey <sbai...@wikimedia.org>
Gerrit-Reviewer: Subramanya Sastry <ssas...@wikimedia.org>
Gerrit-Reviewer: Tim Starling <tstarl...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to