/**
* Author : [[:en:User:DreamRimer]]
* Based on [[MediaWiki:Gadget-GlobalRenameQueueCheckAntiSpoof.js]]
*/
( function ( mw, $ ) {
'use strict';
const specialPage = mw.config.get( 'wgCanonicalSpecialPageName' );
if ( specialPage !== 'GlobalRenameQueue' ) {
return;
}
if ( !$( '#mw-renamequeue-approve, #mw-renamequeue-approve-vanish' ).length ) {
return;
}
const pathMatch = window.location.pathname.match( /\/request\/(\d+)$/ );
if ( !pathMatch ) {
return;
}
const requestId = pathMatch[ 1 ];
const notesPage = 'Meta:GlobalRenameQueue/Notes/' + requestId;
const waitForAntiSpoofResult = () => {
const deferred = $.Deferred();
let attempts = 0;
const timer = setInterval( () => {
attempts++;
if ( $( '#EXT_rxy_antispoof_conflict' ).length ) {
clearInterval( timer );
deferred.resolve( true );
return;
}
if ( $( '#EXT_rxy_antispoof_enableApproveButton' ).length ) {
clearInterval( timer );
deferred.resolve( false );
return;
}
if ( attempts >= 20 ) {
clearInterval( timer );
deferred.resolve( false );
}
}, 100 );
return deferred.promise();
};
mw.loader.using(
[ 'mediawiki.util', 'mediawiki.api', 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows' ],
function () {
const $approveButton = $( 'button[name="approve"]' )[ 0 ];
const $approveWidget = $( '#mw-renamequeue-approve, #mw-renamequeue-approve-vanish' );
$approveButton.disabled = true;
$approveWidget
.addClass( 'oo-ui-widget-disabled' )
.removeClass( 'oo-ui-widget-enabled' );
const api = new mw.Api();
$.when(
api.get( {
action: 'query',
titles: notesPage,
prop: 'info',
formatversion: 2
} ),
waitForAntiSpoofResult()
).done( function ( apiData, antiSpoofConflict ) {
const data = apiData[ 0 ];
const page = data.query && data.query.pages && data.query.pages[ 0 ];
const notesExist = page && !page.missing;
if ( notesExist ) {
$( '#GlobalRenameQueueNotes' ).css( { 'background-color': 'yellow', 'color': '#333' } );
mw.util.addCSS(
'@media screen {' +
'html.skin-theme-clientpref-night #GlobalRenameQueueNotes { background-color: #7a6d00; color: #fff; }' +
'}' +
'@media screen and (prefers-color-scheme: dark) {' +
'html.skin-theme-clientpref-os #GlobalRenameQueueNotes { background-color: #7a6d00; color: #fff; }' +
'}'
);
if ( antiSpoofConflict ) {
return;
}
$approveButton.disabled = true;
$approveWidget
.addClass( 'oo-ui-widget-disabled' )
.removeClass( 'oo-ui-widget-enabled' );
$approveWidget.off( 'click' );
$.when(
mw.loader.using( [ 'mediawiki.util', 'mediawiki.api', 'mediawiki.jqueryMsg' ] ),
$.ready
).then( function () {
return new mw.Api().loadMessagesIfMissing( [
'Gadget-GlobalRenameQueueCheckNotes-enableApproveButton',
'Gadget-GlobalRenameQueueCheckNotes-confirm'
] );
} ).then( function () {
const enableButton = new OO.ui.ButtonWidget( {
id: 'EXT_notes_enableApproveButton',
label: mw.message( 'Gadget-GlobalRenameQueueCheckNotes-enableApproveButton' ).exists()
? mw.message( 'Gadget-GlobalRenameQueueCheckNotes-enableApproveButton' ).escaped()
: 'Enable Approve Button',
flags: [ 'primary', 'progressive' ]
} );
const notesPageURL = mw.util.getUrl( notesPage );
const $notesLink = $(
'<a>',
{
id: 'EXT_notes_detailLink',
href: notesPageURL,
text: '(' + notesPage + ')',
target: '_blank',
style: 'margin-right: 0.5em;'
}
);
$( '#mw-globalrenamequeue-request' ).prepend(
$(
'<div>',
{
id: 'EXT_notes_warning',
class: 'mw-message-box mw-message-box-warning'
}
).append(
$( '<strong>' ).text( '[Notes] ' ),
document.createTextNode(
'This request has notes. Please review them before approving. '
),
enableButton.$element
)
);
$( 'body' ).on( 'click', '#EXT_notes_enableApproveButton', function () {
const confirmMsg = mw.message( 'Gadget-GlobalRenameQueueCheckNotes-confirm' ).exists()
? mw.message( 'Gadget-GlobalRenameQueueCheckNotes-confirm' ).escaped()
: 'This request contains notes. Are you sure you have reviewed them and wish to approve it?';
OO.ui.confirm(
confirmMsg,
{ size: 'large' }
).done( function ( yes ) {
const leaveByDialogCancel = typeof Gadget_GlobalRenameQueueCheckNotes_leaveByDialogCancel !== 'undefined'
? Gadget_GlobalRenameQueueCheckNotes_leaveByDialogCancel
: false;
if ( yes ) {
enableApproveButton( $approveButton );
$( '#EXT_notes_enableApproveButton' ).remove();
} else if ( leaveByDialogCancel ) {
window.location = '/wiki/Special:GlobalRenameQueue/open';
}
} );
} );
} );
} else {
if ( !antiSpoofConflict ) {
enableApproveButton( $approveButton );
}
}
} ).fail( function () {
if ( !$( '#EXT_rxy_antispoof_conflict' ).length ) {
enableApproveButton( $approveButton );
}
} );
function enableApproveButton( approveButton ) {
approveButton.disabled = false;
$approveWidget
.addClass( 'oo-ui-widget-enabled' )
.removeClass( 'oo-ui-widget-disabled' );
}
}
);
}( mediaWiki, jQuery ) );