Merge "Remove not used private member variable mParserWarnings from OutputPage"
[mediawiki.git] / resources / src / mediawiki / api / options.js
blob9dd276d60acc30f52f899a844b2efed34aa7dc10
1 /**
2  * @class mw.Api.plugin.options
3  */
4 ( function ( mw, $ ) {
6         $.extend( mw.Api.prototype, {
8                 /**
9                  * Asynchronously save the value of a single user option using the API. See #saveOptions.
10                  *
11                  * @param {string} name
12                  * @param {string|null} value
13                  * @return {jQuery.Promise}
14                  */
15                 saveOption: function ( name, value ) {
16                         var param = {};
17                         param[ name ] = value;
18                         return this.saveOptions( param );
19                 },
21                 /**
22                  * Asynchronously save the values of user options using the API.
23                  *
24                  * If a value of `null` is provided, the given option will be reset to the default value.
25                  *
26                  * Any warnings returned by the API, including warnings about invalid option names or values,
27                  * are ignored. However, do not rely on this behavior.
28                  *
29                  * If necessary, the options will be saved using several parallel API requests. Only one promise
30                  * is always returned that will be resolved when all requests complete.
31                  *
32                  * @param {Object} options Options as a `{ name: value, … }` object
33                  * @return {jQuery.Promise}
34                  */
35                 saveOptions: function ( options ) {
36                         var name, value, bundleable,
37                                 grouped = [],
38                                 deferreds = [];
40                         for ( name in options ) {
41                                 value = options[ name ] === null ? null : String( options[ name ] );
43                                 // Can we bundle this option, or does it need a separate request?
44                                 bundleable =
45                                         ( value === null || value.indexOf( '|' ) === -1 ) &&
46                                         ( name.indexOf( '|' ) === -1 && name.indexOf( '=' ) === -1 );
48                                 if ( bundleable ) {
49                                         if ( value !== null ) {
50                                                 grouped.push( name + '=' + value );
51                                         } else {
52                                                 // Omitting value resets the option
53                                                 grouped.push( name );
54                                         }
55                                 } else {
56                                         if ( value !== null ) {
57                                                 deferreds.push( this.postWithToken( 'options', {
58                                                         action: 'options',
59                                                         optionname: name,
60                                                         optionvalue: value
61                                                 } ) );
62                                         } else {
63                                                 // Omitting value resets the option
64                                                 deferreds.push( this.postWithToken( 'options', {
65                                                         action: 'options',
66                                                         optionname: name
67                                                 } ) );
68                                         }
69                                 }
70                         }
72                         if ( grouped.length ) {
73                                 deferreds.push( this.postWithToken( 'options', {
74                                         action: 'options',
75                                         change: grouped
76                                 } ) );
77                         }
79                         return $.when.apply( $, deferreds );
80                 }
82         } );
84         /**
85          * @class mw.Api
86          * @mixins mw.Api.plugin.options
87          */
89 }( mediaWiki, jQuery ) );