jenkins-bot has submitted this change and it was merged.
Change subject: mediawiki.user: Return a promise from getRights/getGroups
......................................................................
mediawiki.user: Return a promise from getRights/getGroups
Makes it easier to work with when trying to execute multiple
asychronous tasks in parralel with $.when, otherwise one would
have to wrap it in a custom Deferred again to be able to
aggregate it as a promise.
Change-Id: I69a132a2e6f2ddb236bc1a0dbd8f7ab311f7f873
---
M resources/mediawiki/mediawiki.user.js
M tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
2 files changed, 40 insertions(+), 27 deletions(-)
Approvals:
Ori.livneh: Looks good to me, approved
Bartosz Dziewoński: Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/resources/mediawiki/mediawiki.user.js
b/resources/mediawiki/mediawiki.user.js
index 3e375fb..78febd2 100644
--- a/resources/mediawiki/mediawiki.user.js
+++ b/resources/mediawiki/mediawiki.user.js
@@ -4,7 +4,7 @@
*/
( function ( mw, $ ) {
var user,
- callbacks = {},
+ deferreds = {},
// Extend the skeleton mw.user from mediawiki.js
// This is kind of ugly but we're stuck with this for b/c
reasons
options = mw.user.options || new mw.Map(),
@@ -15,31 +15,34 @@
*
* @private
* @param {string} info One of 'groups' or 'rights'
- * @param {Function} callback
+ * @param {Function} [callback]
+ * @return {jQuery.Promise}
*/
function getUserInfo( info, callback ) {
var api;
- if ( callbacks[info] ) {
- callbacks[info].add( callback );
- return;
+ 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 || [] );
+ } );
+
}
- callbacks.rights = $.Callbacks('once memory');
- callbacks.groups = $.Callbacks('once memory');
- callbacks[info].add( callback );
- 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;
- }
- callbacks.rights.fire( rights || [] );
- callbacks.groups.fire( groups || [] );
- } );
+
+ return deferreds[info].done( callback ).promise();
}
mw.user = user = {
@@ -236,19 +239,21 @@
/**
* Get the current user's groups
*
- * @param {Function} callback
+ * @param {Function} [callback]
+ * @return {jQuery.Promise}
*/
getGroups: function ( callback ) {
- getUserInfo( 'groups', callback );
+ return getUserInfo( 'groups', callback );
},
/**
* Get the current user's rights
*
- * @param {Function} callback
+ * @param {Function} [callback]
+ * @return {jQuery.Promise}
*/
getRights: function ( callback ) {
- getUserInfo( 'rights', callback );
+ return getUserInfo( 'rights', callback );
}
};
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
b/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
index 96be3d1..f422bc1 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
@@ -48,10 +48,18 @@
} );
} );
- QUnit.asyncTest( 'getRights', 1, function ( assert ) {
+ QUnit.test( 'getRights', 2, function ( assert ) {
+ QUnit.stop();
+ QUnit.stop();
+
mw.user.getRights( function ( rights ) {
assert.equal( $.type( rights ), 'array', 'Callback gets
an array' );
QUnit.start();
} );
+
+ mw.user.getRights().done( function ( rights ) {
+ assert.equal( $.type( rights ), 'array', 'Using promise
interface instead of callback' );
+ QUnit.start();
+ } );
} );
}( mediaWiki, jQuery ) );
--
To view, visit https://gerrit.wikimedia.org/r/91617
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I69a132a2e6f2ddb236bc1a0dbd8f7ab311f7f873
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Krinkle <[email protected]>
Gerrit-Reviewer: Anomie <[email protected]>
Gerrit-Reviewer: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Daniel Friesen <[email protected]>
Gerrit-Reviewer: JGonera <[email protected]>
Gerrit-Reviewer: Jdlrobson <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: Mattflaschen <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: Ori.livneh <[email protected]>
Gerrit-Reviewer: Spage <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits