summaryrefslogtreecommitdiff
path: root/www/wiki/resources/src/mediawiki/api/messages.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/resources/src/mediawiki/api/messages.js')
-rw-r--r--www/wiki/resources/src/mediawiki/api/messages.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki/api/messages.js b/www/wiki/resources/src/mediawiki/api/messages.js
new file mode 100644
index 00000000..688f0b24
--- /dev/null
+++ b/www/wiki/resources/src/mediawiki/api/messages.js
@@ -0,0 +1,78 @@
+/**
+ * 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
+ * @param {Object} [options] Additional parameters for the API call
+ * @return {jQuery.Promise}
+ */
+ getMessages: function ( messages, options ) {
+ options = options || {};
+ return this.get( $.extend( {
+ action: 'query',
+ meta: 'allmessages',
+ ammessages: messages,
+ amlang: mw.config.get( 'wgUserLanguage' ),
+ formatversion: 2
+ }, options ) ).then( function ( data ) {
+ var result = {};
+
+ data.query.allmessages.forEach( function ( obj ) {
+ if ( !obj.missing ) {
+ result[ obj.name ] = obj.content;
+ }
+ } );
+
+ return result;
+ } );
+ },
+
+ /**
+ * Loads a set of messages and add them to mw.messages.
+ *
+ * @param {Array} messages Messages to retrieve
+ * @param {Object} [options] Additional parameters for the API call
+ * @return {jQuery.Promise}
+ */
+ loadMessages: function ( messages, options ) {
+ return this.getMessages( messages, options ).then( $.proxy( mw.messages, 'set' ) );
+ },
+
+ /**
+ * Loads a set of messages and add them to mw.messages. Only messages that are not already known
+ * are loaded. If all messages are known, the returned promise is resolved immediately.
+ *
+ * @param {Array} messages Messages to retrieve
+ * @param {Object} [options] Additional parameters for the API call
+ * @return {jQuery.Promise}
+ */
+ loadMessagesIfMissing: function ( messages, options ) {
+ var missing = messages.filter( function ( msg ) {
+ return !mw.message( msg ).exists();
+ } );
+
+ if ( missing.length === 0 ) {
+ return $.Deferred().resolve();
+ }
+
+ return this.getMessages( missing, options ).then( $.proxy( mw.messages, 'set' ) );
+ }
+ } );
+
+ /**
+ * @class mw.Api
+ * @mixins mw.Api.plugin.messages
+ */
+
+}( mediaWiki, jQuery ) );