User:DannyS712 test/redirects.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//<nowiki>
$(function (){
var redirects_config = {
	name: '[[User:DannyS712/getRedirects|getRedirects.js]]',
	version: 2.6,
	debug: false
};
var user = mw.config.get( 'wgUserName' );
console.log( user );
if (user && user === 'DannyS712 bot III') {
	redirects_config.logpage = 'User:DannyS712 bot III/Redirects.json';
} else {
	redirects_config.logpage = 'User:DannyS712 test/redirects.json';
}
importScript( 'User:DannyS712 test/JSON.js' );

mw.loader.using( 'mediawiki.util', function () {
    $(document).ready( function () { 
    	mw.util.addPortletLink ( 'p-cactions', 'javascript:void(0)', 'Get redirects', 'ca-getRedirects');
    	mw.util.addPortletLink ( 'p-cactions', 'javascript:void(0)', 'Patrol redirects', 'ca-patrolRedirects');
    	$('#ca-getRedirects').on('click', function() {
        	getRedirects();
    	} );
    	$('#ca-patrolRedirects').on('click', function() {
        	patrolRedirects();
    	} );
    } );
} );
async function getRedirects(){
	var inTrial = false;
	var ignoreOffset = false;
	var trialLimit = 0;
	var initial = await getFiltered();
	var pre = [{
		notes: {
			script: redirects_config.name,
			scriptVersion: redirects_config.version,
			logPage: redirects_config.logpage,
			time: parseInt(initial.offset),
			listBuild: parseInt(new Date().toISOString().replace(/[\-T:]|\.\d{3}Z/g, '')),
		}
	}];
	var data = pre.concat( initial.data );
	var offset = initial.offset;
	var iter = {};
	var shouldRun = true;
	var end = getEnd();
	while ( shouldRun ){
		iter = await getFiltered( offset );
		console.log( iter );
		data = data.concat( iter.data );
		offset = parseInt(iter.offset);
		if (inTrial && data.length > trialLimit) {
			console.log( "Batch complete" );
			shouldRun = false;
		}
		if (!ignoreOffset && offset && offset < end){
			console.log("All remaining redirects have already been analyzed previously");
			shouldRun = false;
		}
		if (!iter.offset) {
			console.log( "Done" );
			shouldRun = false;
		}
	}
	if (redirects_config.debug) console.log( data );
	var stringy = JSON.stringify( data, null, 2 );
	console.log( stringy );
	var user = mw.config.get( 'wgUserName' );
	console.log( user );
	if (user && user === 'DannyS712 bot III') {
		set_JSON ( 'User:DannyS712 bot III/Redirects.json', stringy, 'Redirects to patrol (bot)');
	} else {
		set_JSON ( 'User:DannyS712 test/redirects.json', stringy, 'Candidates to patrol');
	}
}
function getFiltered( offset ){
return new Promise((resolve) => {
	var to_send = {
		action: 'pagetriagelist',
		showunreviewed: true,
		showredirs: true,
		limit: 200,
		format: 'json',
	};
	if (offset || false ) to_send.offset = offset;
	if (redirects_config.debug) console.log( to_send );
	$.post( mw.config.get( 'wgScriptPath' ) + '/api.php', to_send, function( full_data ){ 
		if (redirects_config.debug) console.log( full_data );
		var pages = full_data.pagetriagelist.pages;
		if (redirects_config.debug) console.log( pages );
		var data = [];
		var page;
		for (var iii = 0; iii < pages.length; iii++){
			page = pages[iii];
			if (shouldPatrol( page )) {
			data.push( {
				pageid: parseInt(page.pageid),
				title: page.title,
				snippet: page.snippet,
			});
			}
		}
		console.log( data );
		var next_offset = false;
		if (pages && pages[pages.length-1] && pages[pages.length-1].creation_date) next_offset = parseInt(pages[pages.length-1].creation_date);
		var to_return = {
			data: data,
			offset: next_offset
		};
		resolve(to_return);
	});
});
}
function shouldPatrol( page ){
	var target = page.snippet.replace( /REDIRECT /i, '');
	var title = page.title;
	///*
	if (target === title.replace( / \(disambiguation\)/i, '')) return true;
	if (comparePages( target, title )) return true;
	if (comparePages( target + 's', title ) ) return true;
	if (comparePages( target + 'es', title ) ) return true;
	if (comparePages( target.replace( /[’'‘]/g, '\'' ), title.replace( /[’'‘]/g, '\'' ) ) ) return true;
	if (comparePages( target, title.replace( /(\w*), (\w*)/, '$2 $1' ) ) ) return true;
	if (comparePages( target, 'List of ' + title ) ) return true;
	if (comparePages( target.replace( /[ -]/g, '' ), title.replace( /[ -]/g, '' ) ) ) return true;
	if (comparePages( target.replace( / vs?\.? /g, 'v.' ), title.replace( / vs?\.? /g, 'v.' ) ) ) return true;
	if (comparePages( target.replace( /^The /, '' ), title.replace( /^The /g, '' ) ) ) return true;
	if (comparePages( target.replace( /[-‒–—―]/g, '-'), title.replace( /[-‒–—―]/g, '-' ) ) ) return true;
	//*/
	return false;
}
function comparePages( target, title ){
	var comparison = target.localeCompare( title, 'en', {sensitivity: 'base'} );
	if (comparison === 0) return true;
	return false;
}
function patrolRedirects(){
	var list = get_JSON(redirects_config.logpage);
	if (redirects_config.debug) console.log( list );
	for (var iii = 1; iii < list.length; iii++){ // Start from 1 because 0 is notes
		doPatrolFromId( list[iii].pageid);
	}
}
function doPatrolFromId( id ){
	var to_send = {
		action: 'pagetriageaction',
		pageid: id,
		reviewed: 1,
		token: mw.user.tokens.get( 'csrfToken' ),
		format: 'json'
	};
	if (redirects_config.debug) console.log( to_send );
	$.post( mw.config.get( 'wgScriptPath' ) + '/api.php', to_send, function( response ){ 
		console.log( response );
	} );
}
function getEnd(){
	var list = get_JSON(redirects_config.logpage);
	//console.log( list );
	var end = 0;
	if (list && list[0] && list[0].notes && list[0].notes.time) end = parseInt(list[0].notes.time);
	console.log( end );
	return end;
}
});
//</nowiki>