User:DannyS712 test/Draft cleaner bot.js

// $(function { var DC_bot_config = {	name: 'Draft cleaner bot',	version: 1.4,	debug: true };

var DC_bot_advert = "Task 27: Disable the categories on this page while it is still a draft, per WP:DRAFTNOCAT, using " + DC_bot_config.name + " (v. " + DC_bot_config.version + ")";

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_(2)") { $(document).ready( function { 		    	mw.util.addPortletLink ( 'p-cactions', 'javascript:void(0)', 'Polluted categories 2', 'ca-pollutedTwo', 'TOOLTIP');		    	$('#ca-pollutedTwo').on('click', function { Categorized_drafts; } );		   } );		}    } ); } ); function DC_bot ( category_name ) { return new Promise((resolve) => {		console.log( category_name );		var getDrafts = {	       action: 'query',	        list: 'categorymembers',	        cmnamespace: 118,	        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 === 118){ var name = pages[i].title; console.log("\tWill try:", name); will_fix.push( name ); }			}			//location.reload; resolve; } );	}); } async function Categorized_drafts{ var content1 = get_page( mw.config.get( 'wgPageName' ) ); if (DC_bot_config.debug) console.log( content1 ); var content2 = content1.replace( /"/g, '&quot;');	content2 = content2.replace( /\\/g, /\\\\/);	if (DC_bot_config.debug) console.log( content2 );	var content3 = content2.replace( /Categories that contain pages.*\n\n{\| class=&quot;wikitable sortable&quot;\s+! Category !! Drafts\n/, '{\n"Categories": [\n');	if (DC_bot_config.debug) console.log( content3 );	var content4 = content3.replace( /\|-\n\| \[\[:(Category:.*?)\]\].*/g, '"$1",');	if (DC_bot_config.debug) console.log( content4 );	var content5 = content4 + 'ENDING_STRING';	if (DC_bot_config.debug) console.log( content5 );	var content6 = content5.replace ( /,\n\|}ENDING_STRING/, '\n]}');	if (DC_bot_config.debug) console.log( content6 );	var as_JSON = JSON.parse( content6 );	if (DC_bot_config.debug) console.log( as_JSON );	var array = as_JSON.Categories;	console.log( array );	var page = "";	for (var iii = 0; iii < array.length; iii++){		page = array[iii]; if (/Wikipedia/i.test( page )) console.log( "\tSkip: Wikipedia"); else if (/purge/i.test( page )) console.log( "\tSkip: Purge"); else { console.log( page ); await DC_bot( page ); }	}	var to_try = [...new Set(will_fix)]; for (var jjj = 0; jjj < to_try.length; jjj++){ await draft_no_cat(to_try[jjj]); }	console.log("Unable to fix:", unable_to_fix); } 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: DC_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("\t\tDone: " + title);			    } ); }			resolve; } );	} ); } }); //