MediaWiki:Gadget-GlobalRenameQueueCheckAntiSpoof.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/**
* Author : rxy (https://rxy.jp)
* Copyright (c) rxy 2018
* License: MIT
* License descrition: https://opensource.org/licenses/MIT
*/
( function ( mw, $ ) {
'use strict';
console.log( '[rxy_antispoof]: loaded 201908070601xx' );
if(
mw.config.get( 'wgCanonicalSpecialPageName' ) == 'GlobalRenameQueue' &&
$( '#mw-renamequeue-approve' ).length
){
mw.loader.using( [ 'mediawiki.api', 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows' ], function(){
var $approveButton = $( 'button[name="approve"]' )[0];
$( "#mw-renamequeue-approve" ).off("click");
$approveButton.disabled = true;
$( $approveButton ).parent().addClass( 'oo-ui-widget-disabled' ).removeClass( 'oo-ui-widget-enabled' );
var targetName = $( $( '#mw-globalrenamequeue-request label > ul > li' )[2] ).children( 'a:first' ).text();
// var encodedTargetName = mw.util.rawurlencode(getName);
var api = new mw.Api();
// https://meta.wikimedia.org/w/api.php?action=antispoof&format=json&username=Rxy
api.get(
{
action: 'antispoof',
username: targetName
}
).done( function( data ){
console.log( '[rxy_antispoof]: ', data.antispoof.result );
$.when( mw.loader.using( [ 'mediawiki.api', 'mediawiki.jqueryMsg' ] ), $.ready )
// Then: Load the messages that you need (if they are not yet loaded)
.then( function() {
return new mw.Api().loadMessagesIfMissing( [
'Gadget-GlobalRenameQueueCheckAntiSpoof-enableApproveButton',
'Gadget-GlobalRenameQueueCheckAntiSpoof-confirm'
] );
} )
// Then: Do stuff with them
.then( function(){
var enableButton = new OO.ui.ButtonWidget( {
id: 'EXT_rxy_antispoof_enableApproveButton',
label: mw.message( 'Gadget-GlobalRenameQueueCheckAntiSpoof-enableApproveButton' ).escaped(),
flags: [
'primary',
'progressive'
]
} );
var detailURI = new mw.Uri();
detailURI.path = '/w/api.php';
detailURI.extend( { action: 'antispoof', format: 'json', username: targetName } );
var $apiLink = $(
'<a>',
{
id: 'EXT_rxy_antispoof_detailLink',
href: detailURI.toString(),
text: '(API)',
target: '_blank'
}
);
$( 'body' ).on(
'click',
'#EXT_rxy_antispoof_enableApproveButton',
function (){
OO.ui.confirm(
mw.message( 'Gadget-GlobalRenameQueueCheckAntiSpoof-confirm' ).escaped(),
{ size: 'large' }
).done( function ( yes ) {
var leaveByDialogCancel = typeof Gadget_GlobalRenameQueueCheckAntiSpoof_leaveByDialogCancel !== 'undefined' ? Gadget_GlobalRenameQueueCheckAntiSpoof_leaveByDialogCancel : false;
console.log( '[rxy_antispoof]: leaveByDialogCancel: ' + leaveByDialogCancel );
if ( yes ) {
enableApproveButton( $( 'button[name="approve"]' )[0] );
$( '#EXT_rxy_antispoof_enableApproveButton' ).remove();
} else if ( leaveByDialogCancel ){
window.location = '/wiki/Special:GlobalRenameQueue/open';
}
});
}
);
if( typeof data.antispoof !== 'undefined' ){
if( data.antispoof.result == 'error' ){
$( '#mw-globalrenamequeue-request' ).prepend(
$(
'<div>',
{
id: 'EXT_rxy_antispoof_error',
class: 'mw-message-box mw-message-box-error',
text: '[AntiSpoof] ' + data.antispoof.error
}
).append( $apiLink ).append( enableButton.$element )
);
} else if ( data.antispoof.result == 'conflict' ){
var conflictDivClass = 'mw-message-box mw-message-box-error';
var conflictTextSuffix = '.';
var requesterUsername = $(
$( '#mw-globalrenamequeue-request label > ul > li' )[0]
).children( 'a:first' ).text();
if (
data.antispoof.users.length === 1
&& data.antispoof.users[0] === requesterUsername
) {
conflictDivClass = 'mw-message-box mw-message-box-warning';
conflictTextSuffix = ", but same with requester's username.";
enableApproveButton( $approveButton );
enableButton.$element = null;
}
$( '#mw-globalrenamequeue-request' ).prepend(
$(
'<div>',
{
id: 'EXT_rxy_antispoof_conflict',
class: conflictDivClass,
text: '[AntiSpoof] Result is conflict' + conflictTextSuffix
}
).append( $apiLink ).append( enableButton.$element )
);
} else {
enableApproveButton( $approveButton );
}
}
});
});
function enableApproveButton( $approveButton ){
$( "#mw-renamequeue-approve" ).on(
"click",
function(){ return confirm( mw.msg( 'centralauth-rename-confirm' ) ) }
);
$approveButton.disabled = false;
$( $approveButton ).parent().addClass( 'oo-ui-widget-enabled' ).removeClass( 'oo-ui-widget-disabled' );
}
});
}
}( mediaWiki, jQuery ) );