( function ( mw, $ ) { /** * Attempt to execute a thank operation for a given edit * * @param {string} name The username of the user who made the edit * @param {string} revision The revision the user created * @param {string} recipientGender The gender of the user who made the edit * @return {Promise} The thank operation's status. */ function thankUser( name, revision, recipientGender ) { var d = $.Deferred(); ( new mw.Api() ).postWithToken( 'csrf', { action: 'thank', rev: revision, source: 'mobilediff' } ).done( function () { mw.notify( mw.msg( 'thanks-thanked-notice', name, recipientGender, mw.user ) ); d.resolve(); } ) .fail( function ( errorCode ) { // FIXME: What is "popup" and where is it defined? /* eslint-disable no-undef */ switch ( errorCode ) { case 'invalidrevision': popup.show( mw.msg( 'thanks-error-invalidrevision' ) ); break; case 'ratelimited': popup.show( mw.msg( 'thanks-error-ratelimited', recipientGender ) ); break; default: popup.show( mw.msg( 'thanks-error-undefined', errorCode ) ); } /* eslint-enable no-undef */ d.reject(); } ); return d; } /** * Create a thank button for a given edit * * @param {string} name The username of the user who made the edit * @param {string} rev The revision the user created * @param {string} gender The gender of the user who made the edit * @return {html} The HTML of the button. */ function createThankLink( name, rev, gender ) { var thankImg = mw.config.get( 'wgExtensionAssetsPath' ) + '/Thanks/WhiteSmiley.png', thankImgTag = '', $thankBtn; // Don't make thank button for self if ( name !== mw.config.get( 'wgUserName' ) ) { // See if user has already been thanked for this edit if ( mw.config.get( 'wgThanksAlreadySent' ) ) { $thankBtn = $( '