2017-04-16 10:28:46 +00:00
|
|
|
( function ( mw, $ ) {
|
2015-01-15 00:14:12 +00:00
|
|
|
/**
|
2017-08-03 23:05:54 +00:00
|
|
|
* Attempt to execute a thank operation for a given edit
|
2015-01-15 00:14:12 +00:00
|
|
|
*
|
2016-04-22 19:47:08 +00:00
|
|
|
* @param {string} name The username of the user who made the edit
|
|
|
|
* @param {string} revision The revision the user created
|
2017-06-22 00:30:35 +00:00
|
|
|
* @param {string} recipientGender The gender of the user who made the edit
|
2017-08-03 23:05:54 +00:00
|
|
|
* @return {Promise} The thank operation's status.
|
2015-01-15 00:14:12 +00:00
|
|
|
*/
|
2017-06-22 00:30:35 +00:00
|
|
|
function thankUser( name, revision, recipientGender ) {
|
2013-09-26 01:16:56 +00:00
|
|
|
var d = $.Deferred();
|
2016-05-26 07:02:17 +00:00
|
|
|
( new mw.Api() ).postWithToken( 'csrf', {
|
2015-06-16 03:02:29 +00:00
|
|
|
action: 'thank',
|
|
|
|
rev: revision,
|
|
|
|
source: 'mobilediff'
|
|
|
|
} ).done( function () {
|
2017-06-22 00:30:35 +00:00
|
|
|
mw.notify( mw.msg( 'thanks-thanked-notice', name, recipientGender, mw.user ) );
|
2015-06-16 03:02:29 +00:00
|
|
|
d.resolve();
|
|
|
|
} )
|
2017-08-03 23:05:54 +00:00
|
|
|
.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();
|
|
|
|
} );
|
2013-09-26 01:16:56 +00:00
|
|
|
return d;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a thank button for a given edit
|
|
|
|
*
|
2016-04-22 19:47:08 +00:00
|
|
|
* @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
|
2017-08-03 23:05:54 +00:00
|
|
|
* @return {html} The HTML of the button.
|
2013-09-26 01:16:56 +00:00
|
|
|
*/
|
|
|
|
function createThankLink( name, rev, gender ) {
|
2014-01-15 20:07:17 +00:00
|
|
|
var thankImg = mw.config.get( 'wgExtensionAssetsPath' ) + '/Thanks/WhiteSmiley.png',
|
|
|
|
thankImgTag = '<img width="25" height="20" src="' + thankImg + '" class="mw-mf-action-button-icon"/>',
|
|
|
|
$thankBtn;
|
2017-08-03 23:05:54 +00:00
|
|
|
|
2013-09-26 01:16:56 +00:00
|
|
|
// Don't make thank button for self
|
|
|
|
if ( name !== mw.config.get( 'wgUserName' ) ) {
|
2014-01-15 20:07:17 +00:00
|
|
|
// See if user has already been thanked for this edit
|
|
|
|
if ( mw.config.get( 'wgThanksAlreadySent' ) ) {
|
2016-09-29 13:22:09 +00:00
|
|
|
$thankBtn = $( '<button class="mw-mf-action-button mw-ui-button mw-ui-progressive thanked">' )
|
2015-01-30 18:12:52 +00:00
|
|
|
.prop( 'disabled', true )
|
2014-01-15 20:07:17 +00:00
|
|
|
.html( thankImgTag + mw.message( 'thanks-button-thanked', mw.user ).escaped() );
|
|
|
|
} else {
|
2016-09-29 13:22:09 +00:00
|
|
|
$thankBtn = $( '<button class="mw-mf-action-button mw-ui-button mw-ui-progressive">' )
|
2015-04-22 23:21:27 +00:00
|
|
|
.html( thankImgTag + mw.message( 'thanks-button-thank', mw.user, gender ).escaped()
|
2014-01-15 20:07:17 +00:00
|
|
|
)
|
2015-05-04 19:13:43 +00:00
|
|
|
.on( 'click', function () {
|
2014-01-15 20:07:17 +00:00
|
|
|
var $this = $( this );
|
|
|
|
if ( !$this.hasClass( 'thanked' ) ) {
|
2017-04-16 10:46:40 +00:00
|
|
|
thankUser( name, rev, gender ).done( function () {
|
2015-01-30 18:12:52 +00:00
|
|
|
$this.addClass( 'thanked' ).prop( 'disabled', true )
|
2015-04-22 23:21:27 +00:00
|
|
|
.html( thankImgTag + mw.message( 'thanks-button-thanked', mw.user, gender ).escaped() );
|
2014-01-15 20:07:17 +00:00
|
|
|
} );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
return $thankBtn;
|
2013-09-26 01:16:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-01-15 00:14:12 +00:00
|
|
|
/**
|
|
|
|
* Initialise a thank button in the given container.
|
|
|
|
*
|
2016-04-22 19:47:47 +00:00
|
|
|
* @param {jQuery} $user existing element with data attributes associated describing a user.
|
|
|
|
* @param {jQuery} $container to render button in
|
2015-01-15 00:14:12 +00:00
|
|
|
*/
|
|
|
|
function init( $user, $container ) {
|
|
|
|
var username = $user.data( 'user-name' ),
|
2013-09-26 01:16:56 +00:00
|
|
|
rev = $user.data( 'revision-id' ),
|
|
|
|
gender = $user.data( 'user-gender' ),
|
|
|
|
$thankBtn;
|
|
|
|
|
2015-11-24 17:27:25 +00:00
|
|
|
$thankBtn = createThankLink( username, rev, gender );
|
|
|
|
if ( $thankBtn ) {
|
|
|
|
$thankBtn.prependTo( $container );
|
2013-09-26 01:16:56 +00:00
|
|
|
}
|
2015-11-24 17:27:25 +00:00
|
|
|
|
2015-01-15 00:14:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
$( function () {
|
|
|
|
init( $( '.mw-mf-user' ), $( '#mw-mf-userinfo' ) );
|
|
|
|
} );
|
|
|
|
|
|
|
|
// Expose for testing purposes
|
|
|
|
mw.thanks = $.extend( {}, mw.thanks || {}, {
|
|
|
|
_mobileDiffInit: init
|
2013-09-26 01:16:56 +00:00
|
|
|
} );
|
2017-08-03 23:05:54 +00:00
|
|
|
}( mediaWiki, jQuery ) );
|