User:DannyS712 test/redirects.js

//

$(function (){

var redirects_config = {

name: '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;

}

});

//