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)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* <nowiki> */
/* Bharat Mitra: redirect tools module */
( function () {
'use strict';
var BM = window.BharatMitra;
function queryPage( name, limit ) {
return BM.core.api().get( {
action: 'query', list: 'querypage', qppage: name, qplimit: limit || 100, formatversion: 2
} ).then( function ( r ) {
return ( r.query && r.query.querypage && r.query.querypage.results ) || [];
} );
}
function finalTarget( title ) {
return BM.core.api().get( {
action: 'query', titles: title, redirects: 1, formatversion: 2
} ).then( function ( r ) {
var pages = r.query.pages || [];
return pages.length ? pages[ 0 ].title : title;
} );
}
BM.register( 'redirect', {
open: function () {
var title = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
var isRedirect = !!mw.config.get( 'wgIsRedirect' );
$.when(
queryPage( 'DoubleRedirects', 100 ).catch( function () { return []; } ),
queryPage( 'BrokenRedirects', 100 ).catch( function () { return []; } )
).then( function ( doubles, brokens ) {
var doubleTitles = doubles.map( function ( d ) { return d.title; } );
var brokenTitles = brokens.map( function ( b ) { return b.title; } );
var info = 'Double redirects: ' + doubleTitles.length + '. Broken redirects: ' + brokenTitles.length + '.' +
( isRedirect ? ' This page is itself a redirect.' : '' );
BM.core.dialog( {
title: 'Redirect tools',
help: 'Page: ' + title,
info: info,
fields: [
{ name: 'mode', label: 'Action', type: 'select', required: true, options: [
[ 'double', 'Fix double redirects (' + doubleTitles.length + ')' ],
[ 'retarget', 'Change the redirect target of this page' ],
[ 'broken', 'View broken redirects (' + brokenTitles.length + ')' ]
], value: doubleTitles.length ? 'double' : 'retarget' },
{ name: 'newTarget', label: 'New target (only for changing the target)', type: 'text', placeholder: 'Page name' }
],
preview: function ( v ) {
if ( v.mode === 'double' ) {
if ( !doubleTitles.length ) { return 'There are no double redirects.'; }
return '\'\'\'Redirects to be fixed:\'\'\'\n' + doubleTitles.map( function ( t ) {
return '* [[:' + t + ']]';
} ).join( '\n' );
}
if ( v.mode === 'broken' ) {
if ( !brokenTitles.length ) { return 'There are no broken redirects.'; }
return '\'\'\'Broken redirects:\'\'\'\n' + brokenTitles.map( function ( t ) {
return '* [[:' + t + ']]';
} ).join( '\n' );
}
var nt = BM.core.cleanParam( v.newTarget );
if ( !nt ) { throw new Error( 'Enter a new target.' ); }
return '#REDIRECT [[' + nt + ']]';
},
previewTitle: function () { return title; },
submitLabel: 'Do it',
success: 'Redirect work completed.',
onSubmit: function ( v ) {
if ( v.mode === 'broken' ) {
mw.notify( 'Broken redirects were only listed; nothing was changed.' );
return $.Deferred().resolve().promise();
}
if ( v.mode === 'retarget' ) {
if ( !isRedirect ) { throw new Error( 'This page is not a redirect.' ); }
var nt = BM.core.cleanParam( v.newTarget );
if ( !nt ) { throw new Error( 'Enter a new target.' ); }
return BM.core.getPage( title ).then( function ( p ) {
var lines = p.content.split( '\n' );
if ( !/^\s*#\s*REDIRECT/i.test( lines[ 0 ] ) ) {
throw new Error( 'No redirect was found in the first line.' );
}
lines[ 0 ] = '#REDIRECT [[' + nt + ']]';
return BM.core.savePage( title, lines.join( '\n' ),
'Changed the redirect target (using [[Bharatpedia:Bharat Mitra|Bharat Mitra]])', p.revid );
} );
}
var chain = $.Deferred().resolve().promise();
var fixed = 0;
doubleTitles.forEach( function ( t ) {
chain = chain.then( function () {
return finalTarget( t ).then( function ( fin ) {
if ( fin === t ) { return null; }
return BM.core.getPage( t ).then( function ( p ) {
if ( !p.exists ) { return null; }
var lines = p.content.split( '\n' );
lines[ 0 ] = '#REDIRECT [[' + fin + ']]';
return BM.core.savePage( t, lines.join( '\n' ),
'Fixed a double redirect (using [[Bharatpedia:Bharat Mitra|Bharat Mitra]])', p.revid )
.then( function () { fixed++; } );
} );
} ).catch( function () { /* next */ } );
} );
} );
return chain.then( function () {
mw.notify( 'Double redirects fixed: ' + fixed );
} );
}
} );
} );
}
} );
}() );
/* </nowiki> */