From 3cfcce3e2b47597382306b4d083bf361b35b1112 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Wed, 7 Oct 2015 20:16:30 +0200 Subject: [PATCH] mediawiki.jqueryMsg: Strip leading colon in wikilinks Strip leading ':', which is used to suppress special behavior in wikitext links, e.g. [[:Category:Foo]] or [[:File:Foo.jpg]]. Also added tests for empty wikilinks. Bug: T114130 Change-Id: Idc78310d6106c2badc0fde933f901d672556ab26 --- .../src/mediawiki/mediawiki.jqueryMsg.js | 5 +++++ .../mediawiki/mediawiki.jqueryMsg.test.js | 21 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/resources/src/mediawiki/mediawiki.jqueryMsg.js b/resources/src/mediawiki/mediawiki.jqueryMsg.js index 7dd9adee77..8957430c3f 100644 --- a/resources/src/mediawiki/mediawiki.jqueryMsg.js +++ b/resources/src/mediawiki/mediawiki.jqueryMsg.js @@ -1035,6 +1035,11 @@ var page, anchor, url, $el; page = textify( nodes[ 0 ] ); + // Strip leading ':', which is used to suppress special behavior in wikitext links, + // e.g. [[:Category:Foo]] or [[:File:Foo.jpg]] + if ( page.charAt( 0 ) === ':' ) { + page = page.slice( 1 ); + } url = mw.util.getUrl( page ); if ( nodes.length === 1 ) { diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js index 7e488eed62..1d44cc1e00 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -343,7 +343,7 @@ process( tasks, QUnit.start ); } ); - QUnit.test( 'Links', 11, function ( assert ) { + QUnit.test( 'Links', 14, function ( assert ) { var testCases, expectedDisambiguationsText, expectedMultipleBars, @@ -376,12 +376,24 @@ // Pipe trick is not supported currently, but should not parse as text either. mw.messages.set( 'pipe-trick', '[[Tampa, Florida|]]' ); + mw.messages.set( 'reverse-pipe-trick', '[[|Tampa, Florida]]' ); + mw.messages.set( 'empty-link', '[[]]' ); this.suppressWarnings(); assert.equal( formatParse( 'pipe-trick' ), '[[Tampa, Florida|]]', 'Pipe trick should not be parsed.' ); + assert.equal( + formatParse( 'reverse-pipe-trick' ), + '[[|Tampa, Florida]]', + 'Reverse pipe trick should not be parsed.' + ); + assert.equal( + formatParse( 'empty-link' ), + '[[]]', + 'Empty link should not be parsed.' + ); this.restoreWarnings(); expectedMultipleBars = 'Main|Page'; @@ -401,6 +413,13 @@ 'Special characters' ); + mw.messages.set( 'leading-colon', '[[:File:Foo.jpg]]' ); + assert.htmlEqual( + formatParse( 'leading-colon' ), + 'File:Foo.jpg', + 'Leading colon in links is stripped' + ); + assert.htmlEqual( formatParse( 'jquerymsg-test-statistics-users-sitename' ), expectedListUsersSitename, -- 2.20.1