From: Florian Date: Sat, 7 Nov 2015 22:56:06 +0000 (+0100) Subject: Add mediawiki.api.messages module to easily retrieve a set of messages X-Git-Tag: 1.31.0-rc.0~8865 X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=commitdiff_plain;h=ffdcafc45651453dded27173194da7a8cc6226e1;p=lhc%2Fweb%2Fwiklou.git Add mediawiki.api.messages module to easily retrieve a set of messages Bug: T40280 Change-Id: I6e3fc4beb56c3120702ca291adf6e1521a0bc21f --- diff --git a/resources/Resources.php b/resources/Resources.php index 66e373ab6a..0eb5118670 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -912,6 +912,12 @@ return array( 'mediawiki.api', ), ), + 'mediawiki.api.messages' => array( + 'scripts' => 'resources/src/mediawiki/api/messages.js', + 'dependencies' => array( + 'mediawiki.api', + ), + ), 'mediawiki.content.json' => array( 'position' => 'top', 'styles' => 'resources/src/mediawiki/mediawiki.content.json.css', diff --git a/resources/src/mediawiki/api/messages.js b/resources/src/mediawiki/api/messages.js new file mode 100644 index 0000000000..df21eb2812 --- /dev/null +++ b/resources/src/mediawiki/api/messages.js @@ -0,0 +1,55 @@ +/** + * Allows to retrieve a specific or a set of + * messages to be added to mw.messages and returned + * by the Api. + * + * @class mw.Api.plugin.messages + * @since 1.27 + */ +( function ( mw, $ ) { + 'use strict'; + + $.extend( mw.Api.prototype, { + /** + * Get a set of messages. + * + * @param {Array} messages Messages to retrieve + * @return {jQuery.Promise} + */ + getMessages: function ( messages ) { + return this.get( { + action: 'query', + meta: 'allmessages', + ammessages: messages, + amlang: mw.config.get( 'wgUserLanguage' ), + formatversion: 2 + } ).then( function ( data ) { + var result = {}; + + $.each( data.query.allmessages, function ( i, obj ) { + if ( !obj.missing ) { + result[ obj.name ] = obj.content; + } + } ); + + return result; + } ); + }, + + /** + * Loads a set of mesages and add them to mw.messages. + * + * @param {Array} messages Messages to retrieve + * @return {jQuery.Promise} + */ + loadMessages: function ( messages ) { + return this.getMessages( messages ).then( $.proxy( mw.messages, 'set' ) ); + } + } ); + + /** + * @class mw.Api + * @mixins mw.Api.plugin.messages + */ + +}( mediaWiki, jQuery ) ); diff --git a/tests/qunit/QUnitTestResources.php b/tests/qunit/QUnitTestResources.php index 1db0eebc42..545718a66e 100644 --- a/tests/qunit/QUnitTestResources.php +++ b/tests/qunit/QUnitTestResources.php @@ -81,6 +81,7 @@ return array( 'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js', 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js', 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js', + 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.messages.test.js', 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js', 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js', 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js', @@ -111,6 +112,7 @@ return array( 'jquery.textSelection', 'mediawiki.api', 'mediawiki.api.category', + 'mediawiki.api.messages', 'mediawiki.api.options', 'mediawiki.api.parse', 'mediawiki.api.upload', diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.messages.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.messages.test.js new file mode 100644 index 0000000000..5880962a74 --- /dev/null +++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.messages.test.js @@ -0,0 +1,31 @@ +( function ( mw ) { + QUnit.module( 'mediawiki.api.messages', QUnit.newMwEnvironment( { + setup: function () { + this.server = this.sandbox.useFakeServer(); + } + } ) ); + + QUnit.test( '.getMessages()', function ( assert ) { + QUnit.expect( 1 ); + + var api = new mw.Api(); + api.getMessages( [ 'foo', 'baz' ] ).then( function ( messages ) { + assert.deepEqual( + messages, + { + foo: 'Foo bar', + baz: 'Baz Quux' + } + ); + } ); + + this.server.respond( /ammessages=foo%7Cbaz/, [ + 200, + { 'Content-Type': 'application/json' }, + '{ "query": { "allmessages": [' + + '{ "name": "foo", "content": "Foo bar" },' + + '{ "name": "baz", "content": "Baz Quux" }' + + '] } }' + ] ); + } ); +}( mediaWiki ) );