mic_none

User:Ahecht/Scripts/RedirectID.js Source: en.wikipedia.org/wiki/User:Ahecht/Scripts/RedirectID.js

// RedirectID by Ahecht v0.2.1

$(document).ready( () => {
var titles=[], redirects={};
$( "main#content a.mw-redirect" ).each(function() {
	if (!titles.includes($(this).prop('title'))) titles.push($(this).prop('title'));
});
mw.loader.using( [ 'mediawiki.api' ], () => {
	var api = new mw.Api( { userAgent: 'RedirectID/0.2.1' } );
	function getRedirects(titleArr) {
		if (titleArr.length > 0) {
			var fiftyTitles = titleArr.splice(0,50);
			api.get( {
				action: 'query', prop: '', redirects: 1, titles: fiftyTitles.join('|')
			} ).fail( (e, f) => console.warn(f.error.info) ).done( data => {
				if (typeof data?.query?.redirects === 'object') {
					data.query.redirects.forEach(i =>
						redirects[i.from] = i.to + (i?.tofragment ? (" § " + i.tofragment) : '')
					);
					getRedirects(titleArr);
				}
			});
		} else if (Object.keys(redirects).length > 0) {
			$( "main#content a.mw-redirect" ).each(function() {
				var title = $(this).prop('title');
				if (typeof redirects[title] === 'string') {
					$(this).prop('title', title + " → " + redirects[title]);
				}
			});
		}
	}
	
	getRedirects(titles);
	
	mw.hook('wikipage.content').add(async function() {
		var newTitles = [];
		$( "main#content a.mw-redirect" ).each(function() {
			var title = $(this).prop('title');
			if (!titles.includes(title)) {
				newTitles.push(title);
				titles.push(title);
			}
		} );
		getRedirects(newTitles);
	} );

} );
} );