From 11b032f682c3159094eef173b3f28b4cd23fa08e Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Mon, 9 Jul 2018 21:43:09 -0700 Subject: [PATCH] mediawiki.language: Combine with 'mediawiki.language.data' and 'mediawiki.language.init' The latter two modules are never used separately and have no references anywhere in Wikimedia Git outside MediaWiki core. Remove without deprecation as they were introduced only as internal work-around to be able to call setData after init.js and the rest of 'mediawiki.language'. Which is actually trivially done by concatenating one after the other, but for some reason I didn't think of that when reviewing 4c6c50f20661 in 2012. Also fix an annoying race condition in the unit tests that often caused tests to fail locally. Change-Id: Ic61f86b0dcbfac82da230770f66cb72e97bd9a03 --- .../ResourceLoaderLanguageDataModule.php | 15 ++++++++------- .../ResourceLoaderLanguageNamesModule.php | 4 ++-- resources/Resources.php | 12 ++---------- .../mediawiki.language/mediawiki.language.init.js | 4 ++-- .../mediawiki/mediawiki.jqueryMsg.test.js | 9 +++++---- 5 files changed, 19 insertions(+), 25 deletions(-) diff --git a/includes/resourceloader/ResourceLoaderLanguageDataModule.php b/includes/resourceloader/ResourceLoaderLanguageDataModule.php index f6716e7532..4b24081109 100644 --- a/includes/resourceloader/ResourceLoaderLanguageDataModule.php +++ b/includes/resourceloader/ResourceLoaderLanguageDataModule.php @@ -23,9 +23,9 @@ */ /** - * ResourceLoader module for populating language specific data. + * ResourceLoader module for populating language specific data, such as grammar forms. */ -class ResourceLoaderLanguageDataModule extends ResourceLoaderModule { +class ResourceLoaderLanguageDataModule extends ResourceLoaderFileModule { protected $targets = [ 'desktop', 'mobile' ]; @@ -54,7 +54,8 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule { * @return string JavaScript code */ public function getScript( ResourceLoaderContext $context ) { - return Xml::encodeJsCall( + $fileScript = parent::getScript( $context ); + $langDataScript = Xml::encodeJsCall( 'mw.language.setData', [ $context->getLanguage(), @@ -62,6 +63,7 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule { ], ResourceLoader::inDebugMode() ); + return $fileScript . $langDataScript; } /** @@ -72,10 +74,9 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule { } /** - * @param ResourceLoaderContext|null $context - * @return array + * @return bool */ - public function getDependencies( ResourceLoaderContext $context = null ) { - return [ 'mediawiki.language.init' ]; + public function supportsURLLoading() { + return false; } } diff --git a/includes/resourceloader/ResourceLoaderLanguageNamesModule.php b/includes/resourceloader/ResourceLoaderLanguageNamesModule.php index 72ccf66a7b..eb09664a87 100644 --- a/includes/resourceloader/ResourceLoaderLanguageNamesModule.php +++ b/includes/resourceloader/ResourceLoaderLanguageNamesModule.php @@ -28,7 +28,7 @@ /** * ResourceLoader module for populating language specific data. */ -class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule { +class ResourceLoaderLanguageNamesModule extends ResourceLoaderFileModule { protected $targets = [ 'desktop', 'mobile' ]; @@ -64,7 +64,7 @@ class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule { * @return array */ public function getDependencies( ResourceLoaderContext $context = null ) { - return [ 'mediawiki.language.init' ]; + return [ 'mediawiki.language' ]; } /** diff --git a/resources/Resources.php b/resources/Resources.php index c41fcd6a08..dc8fd0c127 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -58,9 +58,6 @@ return [ 'user.options' => [ 'class' => ResourceLoaderUserOptionsModule::class ], 'user.tokens' => [ 'class' => ResourceLoaderUserTokensModule::class ], - // Scripts for the dynamic language specific data, like grammar forms. - 'mediawiki.language.data' => [ 'class' => ResourceLoaderLanguageDataModule::class ], - /* MediaWiki base skinning modules */ /** @@ -1560,7 +1557,9 @@ return [ /* MediaWiki Language */ 'mediawiki.language' => [ + 'class' => ResourceLoaderLanguageDataModule::class, 'scripts' => [ + 'resources/src/mediawiki.language/mediawiki.language.init.js', 'resources/src/mediawiki.language/mediawiki.language.js', 'resources/src/mediawiki.language/mediawiki.language.numbers.js', 'resources/src/mediawiki.language/mediawiki.language.fallback.js', @@ -1578,10 +1577,8 @@ return [ 'sl' => 'resources/src/mediawiki.language/languages/sl.js', ], 'dependencies' => [ - 'mediawiki.language.data', 'mediawiki.cldr', ], - 'targets' => [ 'desktop', 'mobile' ], 'messages' => [ 'and', 'comma-separator', @@ -1605,11 +1602,6 @@ return [ 'targets' => [ 'desktop', 'mobile' ], ], - 'mediawiki.language.init' => [ - 'scripts' => 'resources/src/mediawiki.language/mediawiki.language.init.js', - 'targets' => [ 'desktop', 'mobile' ], - ], - 'mediawiki.jqueryMsg' => [ // Add data for mediawiki.jqueryMsg, such as allowed tags 'class' => ResourceLoaderJqueryMsgModule::class, diff --git a/resources/src/mediawiki.language/mediawiki.language.init.js b/resources/src/mediawiki.language/mediawiki.language.init.js index 077473ba01..34add28def 100644 --- a/resources/src/mediawiki.language/mediawiki.language.init.js +++ b/resources/src/mediawiki.language/mediawiki.language.init.js @@ -13,8 +13,8 @@ mw.language = { /** * Language-related data (keyed by language, contains instances of mw.Map). - * Loaded dynamically (see ResourceLoaderLanguageDataModule class in PHP, registered - * as mediawiki.language.data on the client). + * + * Exported dynamically by the ResourceLoaderLanguageDataModule class in PHP. * * To set data: * diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js index 7701170b96..50fd581b7f 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -105,10 +105,7 @@ skin: mw.config.get( 'skin' ), lang: langCode, debug: mw.config.get( 'debug' ), - modules: [ - 'mediawiki.language.data', - 'mediawiki.language' - ].join( '|' ), + modules: 'mediawiki.language', only: 'scripts' }, dataType: 'script', @@ -903,6 +900,10 @@ getMwLanguage( test.lang ) .then( function ( langClass ) { var parser; + // The unit tests perform hot-reloading of mw.language (in hacky way). + // For the languages/*.js script files to work, they need to statically + // access mw.language.getData() for the "current" language. + mw.language = langClass; mw.config.set( 'wgUserLanguage', test.lang ); parser = new mw.jqueryMsg.Parser( { language: langClass } ); assert.strictEqual( -- 2.20.1