jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/344267 )
Change subject: Allow extensions to add jQueryMsg magic words ...................................................................... Allow extensions to add jQueryMsg magic words Change-Id: Ie82a147ff32ccda3f757108474f5cbab71d45ace (cherry picked from commit 7e65b6b3a766c1be3f7dee8fe4f11367a7820829) --- M docs/hooks.txt M includes/resourceloader/ResourceLoaderJqueryMsgModule.php M resources/src/mediawiki/mediawiki.jqueryMsg.js M tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js 4 files changed, 71 insertions(+), 7 deletions(-) Approvals: Catrope: Looks good to me, approved jenkins-bot: Verified diff --git a/docs/hooks.txt b/docs/hooks.txt index f307f45..cf4e3ab 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -2702,6 +2702,13 @@ context-based variables. &$lessVars: array of variables already added +'ResourceLoaderJqueryMsgModuleMagicWords': Called in +ResourceLoaderJqueryMsgModule to allow adding magic words for jQueryMsg. +The value should be a string, and they can depend only on the +ResourceLoaderContext. +$context: ResourceLoaderContext +&$magicWords: Associative array mapping all-caps magic word to a string value + 'ResourceLoaderRegisterModules': Right before modules information is required, such as when responding to a resource loader request or generating HTML output. diff --git a/includes/resourceloader/ResourceLoaderJqueryMsgModule.php b/includes/resourceloader/ResourceLoaderJqueryMsgModule.php index a3b059b..1704481 100644 --- a/includes/resourceloader/ResourceLoaderJqueryMsgModule.php +++ b/includes/resourceloader/ResourceLoaderJqueryMsgModule.php @@ -43,9 +43,26 @@ ) ); - $dataScript = Xml::encodeJsCall( 'mw.jqueryMsg.setParserDefaults', [ $parserDefaults ] ); + $mainDataScript = Xml::encodeJsCall( 'mw.jqueryMsg.setParserDefaults', [ $parserDefaults ] ); - return $fileScript . $dataScript; + // Associative array mapping magic words (e.g. SITENAME) + // to their values. + $magicWords = [ + 'SITENAME' => $this->getConfig()->get( 'Sitename' ), + ]; + + Hooks::run( 'ResourceLoaderJqueryMsgModuleMagicWords', [ $context, &$magicWords ] ); + + $magicWordExtendData = [ + 'magic' => $magicWords, + ]; + + $magicWordDataScript = Xml::encodeJsCall( 'mw.jqueryMsg.setParserDefaults', [ + $magicWordExtendData, + /* deep= */ true + ] ); + + return $fileScript . $mainDataScript . $magicWordDataScript; } /** diff --git a/resources/src/mediawiki/mediawiki.jqueryMsg.js b/resources/src/mediawiki/mediawiki.jqueryMsg.js index c82b9cb..282a2ee 100644 --- a/resources/src/mediawiki/mediawiki.jqueryMsg.js +++ b/resources/src/mediawiki/mediawiki.jqueryMsg.js @@ -16,8 +16,7 @@ parserDefaults = { magic: { PAGENAME: mw.config.get( 'wgPageName' ), - PAGENAMEE: mw.util.wikiUrlencode( mw.config.get( 'wgPageName' ) ), - SITENAME: mw.config.get( 'wgSiteName' ) + PAGENAMEE: mw.util.wikiUrlencode( mw.config.get( 'wgPageName' ) ) }, // Whitelist for allowed HTML elements in wikitext. // Self-closing tags are not currently supported. @@ -164,10 +163,15 @@ * parsers, pass the relevant options to mw.jqueryMsg.parser. * * @private - * @param {Object} data + * @param {Object} data New data to extend parser defaults with + * @param {boolean} [deep=false] Whether the extend is done recursively (deep) */ - mw.jqueryMsg.setParserDefaults = function ( data ) { - $.extend( parserDefaults, data ); + mw.jqueryMsg.setParserDefaults = function ( data, deep ) { + if ( deep ) { + $.extend( true, parserDefaults, data ); + } else { + $.extend( parserDefaults, data ); + } }; /** diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js index 3b549bd..3c77a00 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -1196,4 +1196,40 @@ ); } ); + QUnit.test( 'setParserDefaults', function ( assert ) { + mw.jqueryMsg.setParserDefaults( { + magic: { + FOO: 'foo', + BAR: 'bar' + } + } ); + + assert.deepEqual( + mw.jqueryMsg.getParserDefaults().magic, + { + FOO: 'foo', + BAR: 'bar' + }, + 'setParserDefaults is shallow by default' + ); + + mw.jqueryMsg.setParserDefaults( + { + magic: { + BAZ: 'baz' + } + }, + true + ); + + assert.deepEqual( + mw.jqueryMsg.getParserDefaults().magic, + { + FOO: 'foo', + BAR: 'bar', + BAZ: 'baz' + }, + 'setParserDefaults is deep if requested' + ); + } ); }( mediaWiki, jQuery ) ); -- To view, visit https://gerrit.wikimedia.org/r/344267 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ie82a147ff32ccda3f757108474f5cbab71d45ace Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: wmf/1.29.0-wmf.17 Gerrit-Owner: Mattflaschen <mflasc...@wikimedia.org> Gerrit-Reviewer: Catrope <r...@wikimedia.org> Gerrit-Reviewer: Jack Phoenix <j...@countervandalism.net> Gerrit-Reviewer: Krinkle <krinklem...@gmail.com> Gerrit-Reviewer: Legoktm <lego...@member.fsf.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits