User:Greg Tyler/categorise.js

// DISCLAIMER THING // // This script is an extension of Twinkle (WP:TW), using the inner-workings of the Twinkle program // to do a new task (categorising AfD discussions). // // I DO NOT recommend using this yourself. I'm a fairly novice javascript coder and there may be // several things wrong with it. // // I use this program as a shortcut, because I'm lazy. I wouldn't recommend this, as it'll probably // generate more problems than it solves. // // If you find this script working incorrectly under my control, tell me about it at my talk page. // If you find this script working incorrectly under /someone else/'s control, tell them about it // and remind them that I don't condone its use at all. // // Happy editing! //

if( typeof( TwinkleConfig ) == 'undefined' ) { TwinkleConfig = {}; } TwinkleConfig.summaryAd = " (TW extension)";

function twinklecategorise { if( wgNamespaceNumber != 4 ) return;

mw.util.addPortletLink( 'p-cactions', "javascript:twinklecategorise.callback", "cat", "tw-cat", "Categorise deletion discussion", ""); } addOnloadHook(twinklecategorise);

twinklecategorise.callback = function twinklecategoriseCallback { var Window = new SimpleWindow( 800, 500 ); Window.setTitle( "Choose category" );

var form = new QuickForm( twinklecategorise.callback.evaluate );

form.append( { type:'header', label:'Select a category' } ); form.append ( {				type: 'radio',				name: 'cat',				list: [					{ 						label: 'Media and music',						value: 'M'					},					{ 						label: 'Organisation, corporation, or product',						value: 'O'					},					{ 						label: 'Biographical',						value: 'B'					},					{						label: 'Society topics', 						value: 'S'					},					{						label: 'Web or internet',						value: 'W'					},					{						label: 'Games or sports',						value: 'G'					},					{ 						label: 'Science and technology',						value: 'T'					},					{						label: 'Fiction and the arts',						value: 'F'					},					{						label: 'Places and transportation',						value: 'P'					}				]			} ); form.append( { type:'submit', label:'Categorise' } );

var result = form.render; Window.setContent( result ); Window.display; };

twinklecategorise.catHash = { 'M': 'Media and music', 'O': 'Organisation, corporation, or product', 'B': 'Biographical', 'S': 'Society topics', 'W': 'Web or internet', 'G': 'Games or sports', 'T': 'Science and technology', 'F': 'Fiction and the arts', 'P': 'Places and transportation', }

twinklecategorise.callbacks = { user: { main: function( self ) { var xmlDoc = self.responseXML; var exists = xmlDoc.evaluate( 'boolean(//pages/page[not(@missing)])', xmlDoc, null, XPathResult.BOOLEAN_TYPE, null ).booleanValue; if( ! exists ) { self.statelem.error( "It seems that the page doesn't exists, perhaps it has already been deleted" ); return; }			var query = { 'title': wgPageName, 'action': 'submit' };			var wikipedia_wiki = new Wikipedia.wiki( 'Tagging page', query, twinklecategorise.callbacks.user.tagPage ); wikipedia_wiki.params = self.params; wikipedia_wiki.followRedirect = false; wikipedia_wiki.get; },

tagPage: function( self ) { form = this.responseXML.getElementById( 'editform' ); var text = form.wpTextbox1.value; var tag = /\{\{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD\|([^\r\n]*)\}\}/.exec( text ); if( tag == null ) { self.statelem.error( [ htmlNode( 'strong', '' ), "Template not found!" ] ); return; }

categoryName = twinklecategorise.catHash[ self.params.value ]; text = text.replace(/\{\{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD\|([^\r\n]*)\}\}/g,"\{\{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|" + self.params.value + "\}\}");

var summaryText = "Categorising deletion discussion to Category:AfD debates (" + categoryName + ").";

var postData = { 'wpMinoredit': undefined, 'wpWatchthis': undefined, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSection': '', 'wpSummary': summaryText + TwinkleConfig.summaryAd, 'wpTextbox1': text };		self.post( postData ); TwinkleConfig.summaryAd = " (TW)"; }	} };

twinklecategorise.callback.evaluate = function twinklecategoriesCallbackEvaluate(e) { wgPageName = wgPageName.replace( /_/g, ' ' ); // for queen/king/whatever and country! var form = e.target; var params = { value: '' };

var l = form.cat.length; for(var i = 0; i < l; i++) { if(form.cat[i].checked) { params.value = form.cat[i].value; }	}

Status.init( form ); Wikipedia.actionCompleted.redirect = wgPageName; Wikipedia.actionCompleted.notice = "Tagging complete"; var query = { 'action': 'query', 'titles': wgPageName };	var wikipedia_api = new Wikipedia.api( 'Checking if page exists', query, twinklecategorise.callbacks.user.main ); wikipedia_api.params = params; wikipedia_api.post; }