Bartosz Dziewoński has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/257668

Change subject: mediawiki.api.user: New module, factored out of mediawiki.user
......................................................................

mediawiki.api.user: New module, factored out of mediawiki.user

The convenient getUserInfo() function can now be used with mw.ForeignApi.

Bug: T117868
Change-Id: Ic0b5fe3812723bf51a5cf6600437c480dc5abb8f
---
M resources/Resources.php
A resources/src/mediawiki/api/user.js
M resources/src/mediawiki/mediawiki.user.js
3 files changed, 55 insertions(+), 28 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/68/257668/1

diff --git a/resources/Resources.php b/resources/Resources.php
index aba5ce8..bd1d404 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -906,6 +906,12 @@
                        'json',
                ),
        ),
+       'mediawiki.api.user' => array(
+               'scripts' => 'resources/src/mediawiki/api/user.js',
+               'dependencies' => array(
+                       'mediawiki.api',
+               ),
+       ),
        'mediawiki.api.watch' => array(
                'scripts' => 'resources/src/mediawiki/api/watch.js',
                'dependencies' => array(
@@ -1288,6 +1294,7 @@
                'dependencies' => array(
                        'mediawiki.cookie',
                        'mediawiki.api',
+                       'mediawiki.api.user',
                        'user.options',
                        'user.tokens',
                ),
diff --git a/resources/src/mediawiki/api/user.js 
b/resources/src/mediawiki/api/user.js
new file mode 100644
index 0000000..e7b4b6d
--- /dev/null
+++ b/resources/src/mediawiki/api/user.js
@@ -0,0 +1,37 @@
+/**
+ * @class mw.Api.plugin.user
+ * @since 1.27
+ */
+( function ( mw, $ ) {
+
+       $.extend( mw.Api.prototype, {
+
+               /**
+                * Get the current user's groups and rights.
+                *
+                * @return {jQuery.Promise}
+                * @return {Function} return.done
+                * @return {Object} return.done.userInfo
+                * @return {string[]} return.done.userInfo.groups User groups 
that the current user belongs to
+                * @return {string[]} return.done.userInfo.rights Current 
user's rights
+                */
+               getUserInfo: function () {
+                       return this.get( {
+                               action: 'query',
+                               meta: 'userinfo',
+                               uiprop: [ 'groups', 'rights' ]
+                       } ).then( function ( data ) {
+                               if ( data.query && data.query.userinfo ) {
+                                       return data.query.userinfo;
+                               }
+                               return $.Deferred().reject().promise();
+                       } );
+               }
+       } );
+
+       /**
+        * @class mw.Api
+        * @mixins mw.Api.plugin.user
+        */
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.user.js 
b/resources/src/mediawiki/mediawiki.user.js
index b4baa66..644fc33 100644
--- a/resources/src/mediawiki/mediawiki.user.js
+++ b/resources/src/mediawiki/mediawiki.user.js
@@ -4,41 +4,20 @@
  */
 ( function ( mw, $ ) {
        var i,
-               deferreds = {},
+               userInfoPromise,
                byteToHex = [];
 
        /**
         * Get the current user's groups or rights
         *
         * @private
-        * @param {string} info One of 'groups' or 'rights'
         * @return {jQuery.Promise}
         */
-       function getUserInfo( info ) {
-               var api;
-               if ( !deferreds[ info ] ) {
-
-                       deferreds.rights = $.Deferred();
-                       deferreds.groups = $.Deferred();
-
-                       api = new mw.Api();
-                       api.get( {
-                               action: 'query',
-                               meta: 'userinfo',
-                               uiprop: 'rights|groups'
-                       } ).always( function ( data ) {
-                               var rights, groups;
-                               if ( data.query && data.query.userinfo ) {
-                                       rights = data.query.userinfo.rights;
-                                       groups = data.query.userinfo.groups;
-                               }
-                               deferreds.rights.resolve( rights || [] );
-                               deferreds.groups.resolve( groups || [] );
-                       } );
-
+       function getUserInfo() {
+               if ( !userInfoPromise ) {
+                       userInfoPromise = new mw.Api().getUserInfo();
                }
-
-               return deferreds[ info ].promise();
+               return userInfoPromise;
        }
 
        // Map from numbers 0-255 to a hex string (with padding)
@@ -262,7 +241,9 @@
                 * @return {jQuery.Promise}
                 */
                getGroups: function ( callback ) {
-                       return getUserInfo( 'groups' ).done( callback );
+                       return getUserInfo().then( function ( userInfo ) {
+                               return userInfo.groups;
+                       } ).done( callback );
                },
 
                /**
@@ -272,7 +253,9 @@
                 * @return {jQuery.Promise}
                 */
                getRights: function ( callback ) {
-                       return getUserInfo( 'rights' ).done( callback );
+                       return getUserInfo().then( function ( userInfo ) {
+                               return userInfo.rights;
+                       } ).done( callback );
                }
        } );
 

-- 
To view, visit https://gerrit.wikimedia.org/r/257668
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic0b5fe3812723bf51a5cf6600437c480dc5abb8f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to