From 89c55dc655ae38e77f54c53fe58d621e2c1d1cb0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Tue, 8 Dec 2015 16:23:13 +0100 Subject: [PATCH] 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 --- resources/Resources.php | 8 +++++ resources/src/mediawiki/api/user.js | 37 ++++++++++++++++++++ resources/src/mediawiki/mediawiki.user.js | 41 +++++++---------------- 3 files changed, 58 insertions(+), 28 deletions(-) create mode 100644 resources/src/mediawiki/api/user.js diff --git a/resources/Resources.php b/resources/Resources.php index 3955651b42..fce4383504 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -906,6 +906,13 @@ return array( 'json', ), ), + 'mediawiki.api.user' => array( + 'scripts' => 'resources/src/mediawiki/api/user.js', + 'dependencies' => array( + 'mediawiki.api', + ), + 'targets' => array( 'desktop', 'mobile' ), + ), 'mediawiki.api.watch' => array( 'scripts' => 'resources/src/mediawiki/api/watch.js', 'dependencies' => array( @@ -1313,6 +1320,7 @@ return array( '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 0000000000..e7b4b6d54f --- /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 b4baa66caa..d2f2abd60a 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,10 @@ * @return {jQuery.Promise} */ getGroups: function ( callback ) { - return getUserInfo( 'groups' ).done( callback ); + return getUserInfo().then( + function ( userInfo ) { return userInfo.groups; }, + function () { return []; } + ).done( callback ); }, /** @@ -272,7 +254,10 @@ * @return {jQuery.Promise} */ getRights: function ( callback ) { - return getUserInfo( 'rights' ).done( callback ); + return getUserInfo().then( + function ( userInfo ) { return userInfo.rights; }, + function () { return []; } + ).done( callback ); } } ); -- 2.20.1