//<nowiki>
$(function (){
var PC_bot_config = {
name: '[[User:DannyS712/PC bot|PC bot]]',
version: '1.8.1',
debug: false
};
var PC_bot_advert = "Task 11: Disable the categories on this page while it is still a draft, per [[WP:USERNOCAT]], using " PC_bot_config.name " (v. " PC_bot_config.version ")";
var root_user_pages = [];
var will_fix = [];
var unable_to_fix = [];
mw.loader.using( 'mediawiki.util', function () {
$(document).ready( function () {
importScript( 'User:DannyS712 test/page.js' );
if ( mw.config.get( 'wgPageName' ) === "Wikipedia:Database_reports/Polluted_categories") {
$(document).ready( function () {
mw.util.addPortletLink ( 'p-cactions', 'javascript:void(0)', 'Polluted categories', 'ca-polluted', 'TOOLTIP');
$('#ca-polluted').on('click', function() {
Polluted_categories();
} );
} );
}
} );
} );
function PC_bot ( category_name ) {
return new Promise((resolve) => {
console.log( '\t', category_name );
var getDrafts = {
action: 'query',
list: 'categorymembers',
cmlimit: 'max',
cmtitle: category_name,
cmprop: 'title',
format: 'json'
};
$.get( mw.config.get( 'wgScriptPath' ) '/api.php', getDrafts, function( Drafts ) {
//console.log(Drafts);
var pages = Drafts.query.categorymembers;
for (var i = 0; i < pages.length; i ) {
if (pages[i].ns === 2){
var name = pages[i].title;
//console.log("Page:", name);
if ( name.indexOf('/') > -1 ){
console.log("Will try:", name);
will_fix.push( name );
//draft_no_cat( name );
} else {
console.log( "Root user page:", name);
root_user_pages.push( '* [[' name ']]' );
}
}
}
//location.reload();
resolve();
} );
} );
}
async function Polluted_categories(){
var content1 = get_page( mw.config.get( 'wgPageName' ) );
if (PC_bot_config.debug) console.log( content1 );
var content2 = content1.replace( /\|-\n\| (\d*)\n\| {{dbr link\|1=(.*)}}/g, '"$2",');
if (PC_bot_config.debug) console.log( content2 );
var content3 = content2.replace( /(.*\n)*! Category\n/i, '{\n"Pages": [');
if (PC_bot_config.debug) console.log( content3 );
var content4 = content3.replace ( /,\n\|}/, "\n] }");
if (PC_bot_config.debug) console.log( content3 );
var content5 = content4.replace ( /_/g, " ");
if (PC_bot_config.debug) console.log( content5 );
var as_JSON = JSON.parse( content5 );
if (PC_bot_config.debug) console.log( as_JSON );
var array = as_JSON.Pages;
console.log( array );
var page = "";
for (var iii = 0; iii < array.length; iii ){
page = 'Category:' array[iii];
if (/AfC submissions.*/.test(page)) console.log( "Skip: AfC" );
else if (/.*Wikipedians/.test(page)) console.log( "Skip: Wikipedians");
else if (/Wikipedia.*/.test(page)) console.log( "Skip: Wikipedia");
else if (/WikiProject.*/.test(page)) console.log( "Skip: WikiProject");
else if (/.*ArtAndFeminism.*/.test(page)) console.log( "Skip: ArtAndFeminism");
else if (/.*User pages.*/.test(page)) console.log( "Skip: User page");
else if (/.*Portal templates.*/.test(page)) console.log( "Skip: Portal templates");
else {
await PC_bot( page );
}
}
var to_try = [...new Set(will_fix)];
//console.log( to_try );
for (var jjj = 0; jjj < to_try.length; jjj ){
await draft_no_cat(to_try[jjj]);
}
//console.log("Unable to fix:", unable_to_fix);
var unique_root_user_pages = [...new Set(root_user_pages)];
//console.log( "Root user pages skipped:", unique_root_user_pages );
var requestContent = 'DannyS712 bot needs help with task 11 (polluted categories); the following pages appear to be categorized as articles, but weren\'t automatically fixed because they are root user pages:\n\n{{div col}}\n';
requestContent = requestContent unique_root_user_pages.join('\n') '\n\n{{div col end}}\n\n';
requestContent = requestContent 'Additionally, the following pages appear to be categorized as articles through the transclusion of templates, and so I couldn\'t fix them.\n\n{{div col}}\n';
requestContent = requestContent unable_to_fix.join('\n') '\n\n{{div col end}}\n\nThanks, --~~~~';
console.log(requestContent);
var sectionHeading = 'Task 11: Help needed, {{subst:#time: Y-m-d }}';
var requestSummary = 'DannyS712 bot needs help - requested using ' PC_bot_config.name " (v. " PC_bot_config.version ")";
//botNeedsHelp(requestSummary, sectionHeading, requestContent);
}
function draft_no_cat( title ){
return new Promise((resolve) => {
var send_req = {
action: 'query',
titles: title,
prop: 'revisions',
intoken: 'edit',
rvprop: 'content',
indexpageids: 1,
dataType: 'xml',
format: 'xml'
};
$.get( mw.config.get( 'wgScriptPath' ) '/api.php', send_req, function( response ) {
var text = $( response ).find( 'rev' ).text();
var new_text = text.replace( /\[\[Category/gi, '\[\[:Category' ); // Replace categorization with links
var submit = {
action: 'edit',
title: title,
text: new_text,
summary: PC_bot_advert,
minor: true,
bot: true,
token: mw.user.tokens.get( 'csrfToken' )
};
if ( text === new_text ) {
console.log('Unable to fix: ' title);
unable_to_fix.push( '* [[' title ']]' );
} else {
$.when(
$.post( mw.config.get( 'wgScriptPath' ) '/api.php', submit, function( response ){ } )
).done( function() {
console.log("Done: " title);
} );
}
resolve();
} );
} );
}
function botNeedsHelp( summary, title, content) {
$.ajax({
url: mw.util.wikiScript( 'api' ),
data: {
format: 'json',
action: 'edit',
title: 'User talk:DannyS712 bot',
section: 'new',
sectiontitle: title,
summary: summary,
text: content,
token: mw.user.tokens.get( 'csrfToken' )
},
dataType: 'json',
type: 'POST',
success: function( data ) {
if ( data && data.edit && data.edit.result == 'Success' ) {
console.log( 'Help requested' ); // reload page if edit was successful
} else if ( data && data.error ) {
alert( 'Error: API returned error code "' data.error.code '": ' data.error.info );
} else {
alert( 'Error: Unknown result from API.' );
}
},
error: function( xhr ) {
alert( 'Error: Request failed.' );
}
});
}
});
//</nowiki>