'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',
--- /dev/null
+/**
+ * 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 ) );
'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',
'jquery.textSelection',
'mediawiki.api',
'mediawiki.api.category',
+ 'mediawiki.api.messages',
'mediawiki.api.options',
'mediawiki.api.parse',
'mediawiki.api.upload',
--- /dev/null
+( 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 ) );