jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/330043 )
Change subject: Fix disappearing language names on Category: and File: pages
......................................................................
Fix disappearing language names on Category: and File: pages
When $wgBabelMainCategory or one of the $wgBabelCategoryNames booleans is
false, the language name is hackishly made into a self-link (since the
localised message requires a link target). On category and file pages,
a self-link like [[Category:XYZ|English]] was being used, which has an
obvious problem.
Bug: T36507
Change-Id: I51c5d561312e255c686d7d18960f30ebd0fa7845
---
M BabelBox/LanguageBabelBox.php
M tests/phpunit/BabelTest.php
2 files changed, 65 insertions(+), 13 deletions(-)
Approvals:
jenkins-bot: Verified
Nikerabbit: Looks good to me, but someone else must approve
Thiemo Mättig (WMDE): Looks good to me, approved
diff --git a/BabelBox/LanguageBabelBox.php b/BabelBox/LanguageBabelBox.php
index 9cd474f..d49e957 100644
--- a/BabelBox/LanguageBabelBox.php
+++ b/BabelBox/LanguageBabelBox.php
@@ -124,14 +124,14 @@
global $wgBabelMainCategory, $wgBabelCategoryNames;
if ( $wgBabelCategoryNames[$level] === false ) {
- $categoryLevel = $title->getFullText();
+ $categoryLevel = ':' . $title->getFullText();
} else {
$categoryLevel = ':Category:' .
self::getCategoryName(
$wgBabelCategoryNames[$level], $language );
}
if ( $wgBabelMainCategory === false ) {
- $categoryMain = $title->getFullText();
+ $categoryMain = ':' . $title->getFullText();
} else {
$categoryMain = ':Category:' .
self::getCategoryName( $wgBabelMainCategory,
$language );
diff --git a/tests/phpunit/BabelTest.php b/tests/phpunit/BabelTest.php
index 3a463da..ade6b03 100644
--- a/tests/phpunit/BabelTest.php
+++ b/tests/phpunit/BabelTest.php
@@ -39,6 +39,8 @@
$user->addToDatabase();
$title = $user->getUserPage();
$this->insertPage( $title->getPrefixedText(),
'{{#babel:en-1|es-2|de}}' );
+ // Test on a category page too (
+ $this->insertPage( Title::newFromText( 'Category:X1',
'{{#babel:en-1|es-2|de}}' ) );
$page = WikiPage::factory( $title );
// Force a run of LinksUpdate
$updates = $page->getContent()->getSecondaryDataUpdates( $title
);
@@ -48,9 +50,10 @@
}
/**
+ * @param Title $title
* @return Parser
*/
- private function getParser() {
+ private function getParser( Title $title ) {
$options = new ParserOptions();
$options->setIsPreview( true );
@@ -64,7 +67,7 @@
$parser->expects( $this->any() )
->method( 'getTitle' )
- ->will( $this->returnValue( Title::newFromText(
'User:User-1' ) ) );
+ ->will( $this->returnValue( $title ) );
$parser->expects( $this->any() )
->method( 'getOutput' )
@@ -106,21 +109,36 @@
}
public function testRenderEmptyBox() {
- $wikiText = Babel::Render( $this->getParser(), '' );
+ $title = Title::newFromText( 'User:User-1' );
+ $parser = $this->getParser( $title );
+ $wikiText = Babel::Render( $parser, '' );
$this->assertSame(
'{|style=" padding: (babel-box-cellpadding);
border-spacing: (babel-box-cellspacing);"'
. ' class="mw-babel-wrapper"'
. "\n"
. '! class="mw-babel-header" | [[(babel-url)|(babel:
User-1)]]'
. "\n|-\n| \n|-\n"
- . '! class="mw-babel-footer" |
[[(babel-footer-url)|(babel-footer: User-1)]]'
+ . '! class="mw-babel-footer" |
[[(babel-footer-url)|(babel-footer: User-1)]]'
. "\n|}",
$wikiText
);
}
- public function testRenderDefaultLevel() {
- $parser = $this->getParser();
+ /**
+ * Provides different page names, such as pages in the Category
namespace.
+ */
+ public static function providePageNames() {
+ return [
+ [ 'User:User-1' ],
+ [ 'Category:X1' ],
+ ];
+ }
+
+ /**
+ * @dataProvider providePageNames
+ */
+ public function testRenderDefaultLevel( $pageName ) {
+ $parser = $this->getParser( Title::newFromText( $pageName ) );
$wikiText = Babel::Render( $parser, 'en' );
$this->assertBabelBoxCount( 1, $wikiText );
$this->assertContains(
@@ -136,12 +154,40 @@
. '</div>',
$wikiText
);
+
$this->assertHasCategory( $parser, 'en', 'N' );
$this->assertHasCategory( $parser, 'en-N', '' );
}
+ /**
+ * @dataProvider providePageNames
+ */
+ public function testRenderDefaultLevelNoCategory( $pageName ) {
+ $this->setMwGlobals( [ 'wgBabelMainCategory' => false ] );
+
+ $parser = $this->getParser( Title::newFromText( $pageName ) );
+ $wikiText = Babel::Render( $parser, 'en' );
+ $this->assertBabelBoxCount( 1, $wikiText );
+ $this->assertContains(
+ '<div class="mw-babel-box mw-babel-box-N" dir="ltr">'
+ . "\n"
+ . '{|style=" padding: (babel-cellpadding);
border-spacing: (babel-cellspacing);"'
+ . "\n"
+ . '! dir="ltr" | [[(babel-portal: en)|en]]<span
class="mw-babel-box-level-N">-N</span>'
+ . "\n"
+ . '| dir="ltr" lang="en" | This user has a
[[:Category:en-N|native]] understanding of '
+ . "[[:$pageName|English]]."
+ . "\n|}\n"
+ . '</div>',
+ $wikiText
+ );
+
+ $this->assertNotHasCategory( $parser, 'en' );
+ $this->assertHasCategory( $parser, 'en-N', '' );
+ }
+
public function testRenderCustomLevel() {
- $parser = $this->getParser();
+ $parser = $this->getParser( Title::newFromText( 'User:User-1' )
);
$wikiText = Babel::Render( $parser, 'EN-1', 'zh-Hant' );
$this->assertBabelBoxCount( 2, $wikiText );
$this->assertContains(
@@ -157,8 +203,10 @@
. '</div>',
$wikiText
);
+
$this->assertHasCategory( $parser, 'en', '1' );
$this->assertHasCategory( $parser, 'en-1', '' );
+
$this->assertContains(
'<div class="mw-babel-box mw-babel-box-N" dir="ltr">'
. "\n"
@@ -173,12 +221,13 @@
. '</div>',
$wikiText
);
+
$this->assertHasCategory( $parser, 'zh-Hant', 'N' );
$this->assertHasCategory( $parser, 'zh-Hant-N', '' );
}
public function testRenderPlain() {
- $parser = $this->getParser();
+ $parser = $this->getParser( Title::newFromText( 'User:User-1' )
);
$wikiText = Babel::Render( $parser, 'plain=1', 'en' );
$this->assertSame(
'<div class="mw-babel-box mw-babel-box-N" dir="ltr">'
@@ -193,12 +242,14 @@
. '</div>',
$wikiText
);
+
$this->assertHasCategory( $parser, 'en', 'N' );
$this->assertHasCategory( $parser, 'en-N', '' );
}
public function testRenderRedLink() {
- $wikiText = Babel::Render( $this->getParser(), 'redLink' );
+ $parser = $this->getParser( Title::newFromText( 'User:User-1' )
);
+ $wikiText = Babel::Render( $parser, 'redLink' );
$this->assertBabelBoxCount( 0, $wikiText );
$this->assertContains(
'<div class="mw-babel-notabox"
dir="ltr">[[(babel-template: redLink)]]</div>',
@@ -207,7 +258,8 @@
}
public function testRenderInvalidTitle() {
- $wikiText = Babel::Render( $this->getParser(), '<invalidTitle>'
);
+ $parser = $this->getParser( Title::newFromText( 'User:User-1' )
);
+ $wikiText = Babel::Render( $parser, '<invalidTitle>' );
$this->assertBabelBoxCount( 0, $wikiText );
$this->assertContains(
'<div class="mw-babel-notabox"
dir="ltr">(babel-template: <invalidTitle>)</div>',
@@ -216,7 +268,7 @@
}
public function testRenderNoSkillNoCategory() {
- $parser = $this->getParser();
+ $parser = $this->getParser( Title::newFromText( 'User:User-1' )
);
$wikiText = Babel::Render( $parser, 'en-0' );
$this->assertNotHasCategory( $parser, 'en' );
}
--
To view, visit https://gerrit.wikimedia.org/r/330043
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I51c5d561312e255c686d7d18960f30ebd0fa7845
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Babel
Gerrit-Branch: master
Gerrit-Owner: TTO <[email protected]>
Gerrit-Reviewer: Florianschmidtwelzow <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: TTO <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits