Merge "mw.widgets.CategoryCapsuleItemWidget: Handle titles not normalized in JS code"
[lhc/web/wiklou.git] / resources / src / mediawiki / api / messages.js
1 /**
2 * Allows to retrieve a specific or a set of
3 * messages to be added to mw.messages and returned
4 * by the Api.
5 *
6 * @class mw.Api.plugin.messages
7 * @since 1.27
8 */
9 ( function ( mw, $ ) {
10 'use strict';
11
12 $.extend( mw.Api.prototype, {
13 /**
14 * Get a set of messages.
15 *
16 * @param {Array} messages Messages to retrieve
17 * @return {jQuery.Promise}
18 */
19 getMessages: function ( messages ) {
20 return this.get( {
21 action: 'query',
22 meta: 'allmessages',
23 ammessages: messages,
24 amlang: mw.config.get( 'wgUserLanguage' ),
25 formatversion: 2
26 } ).then( function ( data ) {
27 var result = {};
28
29 $.each( data.query.allmessages, function ( i, obj ) {
30 if ( !obj.missing ) {
31 result[ obj.name ] = obj.content;
32 }
33 } );
34
35 return result;
36 } );
37 },
38
39 /**
40 * Loads a set of messages and add them to mw.messages.
41 *
42 * @param {Array} messages Messages to retrieve
43 * @return {jQuery.Promise}
44 */
45 loadMessages: function ( messages ) {
46 return this.getMessages( messages ).then( $.proxy( mw.messages, 'set' ) );
47 },
48
49 /**
50 * Loads a set of messages and add them to mw.messages. Only messages that are not already known
51 * are loaded. If all messages are known, the returned promise is resolved immediately.
52 *
53 * @param {Array} messages Messages to retrieve
54 * @return {jQuery.Promise}
55 */
56 loadMessagesIfMissing: function ( messages ) {
57 var missing = messages.filter( function ( msg ) {
58 return !mw.message( msg ).exists();
59 } );
60
61 if ( missing.length === 0 ) {
62 return $.Deferred().resolve();
63 }
64
65 return this.getMessages( missing ).then( $.proxy( mw.messages, 'set' ) );
66 }
67 } );
68
69 /**
70 * @class mw.Api
71 * @mixins mw.Api.plugin.messages
72 */
73
74 }( mediaWiki, jQuery ) );