From e961ca0b7346d4494884b7dcf85d495cddb1b91a Mon Sep 17 00:00:00 2001 From: "helder.wiki" Date: Wed, 1 Aug 2012 12:21:36 -0300 Subject: [PATCH] mediawiki.user: Reduce repetition of code Created a local utility function getUserInfo(), which is called by both mw.user.getGroups and mw.user.getRights. This function uses the same API request to get both pieces of information. Also reduces the number of jQuery.Callbacks instances by using it directly instead of jQuery.Deffered with '.always()'. Change-Id: I590175dba1c9761da19a84efe69a5305220d8eb7 --- resources/mediawiki/mediawiki.user.js | 84 ++++++++++++--------------- 1 file changed, 37 insertions(+), 47 deletions(-) diff --git a/resources/mediawiki/mediawiki.user.js b/resources/mediawiki/mediawiki.user.js index 8c6e90c5bc..48f30df7f0 100644 --- a/resources/mediawiki/mediawiki.user.js +++ b/resources/mediawiki/mediawiki.user.js @@ -2,7 +2,7 @@ * Implementation for mediaWiki.user */ -(function( $ ) { +( function ( $ ) { /** * User object @@ -12,9 +12,37 @@ /* Private Members */ var that = this; - var api = new mw.Api(); - var groupsDeferred; - var rightsDeferred; + var callbacks = {}; + + /** + * Gets the current user's groups or rights. + * @param {String} info: One of 'groups' or 'rights'. + * @param {Function} callback + */ + function getUserInfo( info, callback ) { + var api; + if ( callbacks[info] ) { + callbacks[info].add( callback ); + return; + } + 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 || [] ); + } ); + } /* Public Members */ @@ -84,7 +112,7 @@ */ this.sessionId = function () { var sessionId = $.cookie( 'mediaWiki.user.sessionId' ); - if ( typeof sessionId == 'undefined' || sessionId === null ) { + if ( typeof sessionId === 'undefined' || sessionId === null ) { sessionId = generateId(); $.cookie( 'mediaWiki.user.sessionId', sessionId, { 'expires': null, 'path': '/' } ); } @@ -106,7 +134,7 @@ return name; } var id = $.cookie( 'mediaWiki.user.id' ); - if ( typeof id == 'undefined' || id === null ) { + if ( typeof id === 'undefined' || id === null ) { id = generateId(); } // Set cookie if not set, or renew it if already set @@ -196,52 +224,14 @@ * Gets the current user's groups. */ this.getGroups = function ( callback ) { - if ( groupsDeferred ) { - groupsDeferred.always( callback ); - return; - } - - groupsDeferred = $.Deferred(); - groupsDeferred.always( callback ); - api.get( { - action: 'query', - meta: 'userinfo', - uiprop: 'groups' - } ).done( function ( data ) { - if ( data.query && data.query.userinfo && data.query.userinfo.groups ) { - groupsDeferred.resolve( data.query.userinfo.groups ); - } else { - groupsDeferred.reject( [] ); - } - } ).fail( function ( data ) { - groupsDeferred.reject( [] ); - } ); + getUserInfo( 'groups', callback ); }; /** * Gets the current user's rights. */ this.getRights = function ( callback ) { - if ( rightsDeferred ) { - rightsDeferred.always( callback ); - return; - } - - rightsDeferred = $.Deferred(); - rightsDeferred.always( callback ); - api.get( { - action: 'query', - meta: 'userinfo', - uiprop: 'rights' - } ).done( function ( data ) { - if ( data.query && data.query.userinfo && data.query.userinfo.rights ) { - rightsDeferred.resolve( data.query.userinfo.rights ); - } else { - rightsDeferred.reject( [] ); - } - } ).fail( function ( data ) { - rightsDeferred.reject( [] ); - } ); + getUserInfo( 'rights', callback ); }; } @@ -249,4 +239,4 @@ // This is kind of ugly but we're stuck with this for b/c reasons mw.user = new User( mw.user.options, mw.user.tokens ); -})(jQuery); +}( jQuery ) ); -- 2.20.1