User:Gijs Kruitbosch/monobook.js

importScript('User:AzaToth/twinkle.js');

// If TwinkleConfig aint exist. if( typeof( TwinkleConfig ) == 'undefined' ) { TwinkleConfig = function {}; }

/** TwinkleConfig.summaryAd (string) If ad should be added or not to summary, default TWINKLE */ if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) { TwinkleConfig.summaryAd = " using TW"; }

/** TwinkleConfig.toolboxButtons (string) If id defined in this array, the button of the action is located inthe toolbox instead of in the actions bar. */ if( typeof( TwinkleConfig.toolboxButtons ) == 'undefined' ) { TwinkleConfig.toolboxButtons = []; }

function twinkleXfdButton { if( wgNamespaceNumber < 0 || wgCurRevisionId == false ) { return; }	mw.util.addPortletLink( chooseBox( 'tw-xfd', TwinkleConfig.toolboxButtons ), "javascript:twinklexfd", "xfd", "tw-xfd", "X for deletion", ""); } addOnloadHook(twinkleXfdButton); function num2order( num ) { switch( num ) { case 1: return ''; case 2: return '2nd'; case 3: return '3rd'; default: return num + 'th'; } } function createOption( data ) { var option = document.createElement( 'option' ); option.setAttribute( 'value', data.value ); if( data.selected ) { option.setAttribute( 'selected', 'selected' ); }	option.setAttribute( 'label', data.label ); option.appendChild( document.createTextNode( data.label ) );

return option; }

function createInput( data ) { var div = document.createElement( data.elem || 'span' ); var input = document.createElement( 'input' ); input.setAttribute( 'value', data.value ); input.setAttribute( 'name', data.name ); input.setAttribute( 'id', data.id ); input.setAttribute( 'type', data.type ); if( data.size ) { input.setAttribute( 'size', data.size ); }	if( data.checked ) { input.setAttribute( 'checked', 'checked' ); }	if( data.disabled ) { input.setAttribute( 'disabled', 'disabled' ); }	if( data.event && data.type == 'button' ){ input.addEventListener( 'click', data.event, true ); }	if( data.type == 'button' || data.type == 'submit' || data.type == 'reset' ) { div.appendChild( input ); } else { var label = document.createElement( 'label' ); label.setAttribute( 'for', data.id ); label.appendChild( document.createTextNode( data.text ) ); if( [ 'radio', 'checkbox' ].indexOf( data.type ) != -1 ) { div.appendChild( input ); div.appendChild( label ); } else { div.appendChild( label ); div.appendChild( input ); }	}

return div; } function twinklexfd {

twinklexfd.Window = new SimpleWindow( 600, 300 ); twinklexfd.Window.setTitle( "Enter what kind of action is wanted" ); twinklexfd.form = document.createElement( 'form' ); twinklexfd.form.setAttribute( 'action', 'javascript:void(0);'); twinklexfd.form.addEventListener( 'submit',twinklexfd.evaluate, true );

var main_choices = document.createElement( 'select' ); main_choices.addEventListener( 'change',twinklexfd.choose, true ); main_choices.setAttribute('name', 'main_choices'); main_choices.setAttribute('id', 'twXfdMainChoices');

main_choices.appendChild( createOption( { label: 'Afd', selected: wgNamespaceNumber == 0, value: 'afd' } ) ); main_choices.appendChild( createOption( { label: 'Tfd', selected: wgNamespaceNumber == 10, value: 'tfd' } ) ); main_choices.appendChild( createOption( { label: 'Ifd', selected: wgNamespaceNumber == 6, value: 'ifd' } ) ); main_choices.appendChild( createOption( { label: 'Cfd', selected: wgNamespaceNumber == 14, value: 'cfd' } ) ); main_choices.appendChild( createOption( { label: 'UCfd', selected: false, value: 'ucfd' } ) ); main_choices.appendChild( createOption( { label: 'Rfd', selected: false, value: 'rfd' } ) ); main_choices.appendChild( createOption( { label: 'Sfd', selected: false, value: 'sfd' } ) ); main_choices.appendChild( createOption( { label: 'Mfd', selected: [0, 10, 6, 14].indexOf(wgNamespaceNumber) == -1, value: 'mfd' } ) );

label = document.createElement( 'label' ); label.setAttribute( 'for', 'main_choices' ); label.appendChild( document.createTextNode( 'Type of XfD' ) ); twinklexfd.form.appendChild( label ); twinklexfd.form.appendChild( main_choices ); twinklexfd.form.appendChild( document.createElement( 'br' ) );

twinklexfd.choices = document.createElement( 'fieldset' ); twinklexfd.form.appendChild( twinklexfd.choices );

twinklexfd.Window.setContent( twinklexfd.form ); twinklexfd.choose; twinklexfd.Window.display; }

twinklexfd.choose = function(e) { while( twinklexfd.choices.hasChildNodes ){ twinklexfd.choices.removeChild( twinklexfd.choices.firstChild ); }

switch( twinklexfd.form.main_choices.value ) { case 'afd': var afdcat = document.createElement( 'select' ); afdcat.setAttribute('name', 'afdcat'); afdcat.setAttribute('id', 'twAfdCat');

var afdcat_legend = document.createElement( 'legend' ); afdcat_legend.appendChild( document.createTextNode( 'Fill in reason for Afd and what category' ) ); twinklexfd.choices.appendChild( afdcat_legend ); twinklexfd.choices.appendChild( afdcat );

afdcat.appendChild( createOption( { label: 'Unknown', selected:true, value: '?' } ) ); afdcat.appendChild( createOption( { label: 'Media and music', value: 'M' } ) ); afdcat.appendChild( createOption( { label: 'Organisation, corporation, or product', value: 'O' } ) ); afdcat.appendChild( createOption( { label: 'Biographical', value: 'B' } ) ); afdcat.appendChild( createOption( { label: 'Society topics', value: 'S' } ) ); afdcat.appendChild( createOption( { label: 'Web or internet', value: 'W' } ) ); afdcat.appendChild( createOption( { label: 'Games or sports', value: 'T' } ) ); afdcat.appendChild( createOption( { label: 'Science and technology', value: 'T' } ) ); afdcat.appendChild( createOption( { label: 'Fiction and the arts', value: 'F' } ) ); afdcat.appendChild( createOption( { label: 'Places and transportation', value: 'P' } ) ); afdcat.appendChild( createOption( { label: 'Indiscernible or unclassifiable topic', value: 'I' } ) ); afdcat.appendChild( createOption( { label: 'Debate not yet sorted', value: 'U' } ) );

twinklexfd.choices.appendChild( document.createElement( 'br' ) );

twinklexfd.choices.appendChild( createInput( { id:'twXfdReason', value:'', text:'Reason ', type:'text', name:'xfdreason', size:80 } ) );

twinklexfd.choices.appendChild( document.createElement( 'br' ) );

twinklexfd.choices.appendChild( createInput( { id:'twXfdSubmit', value: 'Submit', name:'submit', type:'submit' } ) );		break; case 'tfd': var legend = document.createElement( 'legend' ); legend.appendChild( document.createTextNode( 'Give reason for TfD' ) ); twinklexfd.choices.appendChild( legend ); twinklexfd.choices.appendChild( createInput( { id:'twXfdReason', value:'', text:'Reason ', type:'text', name:'xfdreason', size:80 } ) );

twinklexfd.choices.appendChild( document.createElement( 'br' ) );

twinklexfd.choices.appendChild( createInput( { id:'twXfdSubmit', value: 'Submit', name:'submit', type:'submit' } ) );		break; case 'mfd': var legend = document.createElement( 'legend' ); legend.appendChild( document.createTextNode( 'Give reason for MfD' ) ); twinklexfd.choices.appendChild( legend ); twinklexfd.choices.appendChild( createInput( { id:'twXfdReason', value:'', text:'Reason ', type:'text', name:'xfdreason', size:80 } ) );

twinklexfd.choices.appendChild( document.createElement( 'br' ) );

twinklexfd.choices.appendChild( createInput( { id:'twXfdSubmit', value: 'Submit', name:'submit', type:'submit' } ) );		break; case 'ifd': var legend = document.createElement( 'legend' ); legend.appendChild( document.createTextNode( 'Give reason for IfD' ) ); twinklexfd.choices.appendChild( legend ); twinklexfd.choices.appendChild( createInput( { id:'twXfdReason', value:'', text:'Reason ', type:'text', name:'xfdreason', size:80 } ) );

twinklexfd.choices.appendChild( document.createElement( 'br' ) );

twinklexfd.choices.appendChild( createInput( { id:'twXfdSubmit', value: 'Submit', name:'submit', type:'submit' } ) );		break; case 'cfd': case 'ucfd': case 'rfd': case 'sfd': var legend = document.createElement( 'legend' ); legend.appendChild( document.createTextNode( 'Not implemented' ) );

var div = document.createElement( 'legend' ); div.style.color = 'red'; div.style.fontSize = 'large'; div.style.fontWeight = 'bold'; div.appendChild( document.createTextNode( 'This function is not yet implemented' ) );

twinklexfd.choices.appendChild( legend ); twinklexfd.choices.appendChild( div ); break;

} }

twinklexfd.evaluate = function(e) {

twinklexfd.type = twinklexfd.form.main_choices.value; twinklexfd.reason = twinklexfd.form.xfdreason.value; if( twinklexfd.type == 'afd' ) { twinklexfd.afdcat = twinklexfd.form.afdcat.value; }

Status.init( twinklexfd.form );

if( twinklexfd.type == null ) { Status.error( 'no action given' ); return; }

switch( twinklexfd.type ) { case 'afd': // AFD

Status.status( 'Grabbing data of eventual previous nominations' ); var query = { 'title': 'Special:Prefixindex', 'from': 'Articles for deletion/' + wgTitle, 'namespace': 4 };		var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( query ), true); xmlhttp.onload = function { var a_tags = this.responseXML.getElementsByTagName('a'); var re = new RegExp( RegExp.escape( 'Articles for deletion/' + wgTitle ) ); var number = 0; for( var i in a_tags ) { var title = a_tags[i].title; if( re.exec( title ) ) { var n = /\(\s*(\d+)(?:(?:th|nd|rd|st) nom(?:ination)?)?\s*\)\s*$/.exec( title ); if( n && n[1] > number ) { number = n[1]; } else if( number == 0 ) { number = 1; }				}			}

if( number == 0 ) { twinklexfd.numbering = number = ''; } else { number = num2order( parseInt( number ) + 1); twinklexfd.numbering = ' (' + number + ' nomination)'; }			Status.info( 'next in order is Articles for deletion/' + wgTitle + twinklexfd.numbering + '');

// Tagging article Status.status( 'Putting the deletion tag on the article...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': wgTitle, 'action': 'submit' };			xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var form = this.responseXML.getElementById('editform'); var postData = { 'wpMinoredit': false, // Per memo 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Nominated for deletion; see Articles for deletion/" + wgTitle + twinklexfd.numbering + '.'+ TwinkleConfig.summaryAd, 'wpTextbox1': "\{\{" + ( number == '' ? "subst:afd\}\}\n" : 'subst:afdx|' + number + "\}\}\n" ) + form.wpTextbox1.value };				var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Article tagged.' );} xmlhttp.send( QueryString.create( postData ) ); }			xmlhttp.send( null );

// Discussion page Status.status( 'Creating the article\'s deletion discussion page...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': 'Wikipedia:Articles for deletion/' + wgTitle + twinklexfd.numbering, 'action': 'submit' };

xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var form = this.responseXML.getElementById('editform'); var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Creating deletion discussion page for \[\[" + wgTitle + '\]\].' + TwinkleConfig.summaryAd, 'wpTextbox1': "\{\{subst:afd2|pg=" + wgTitle + "|cat=" + twinklexfd.afdcat + "|text=" + twinklexfd.reason + " \~\~\~\~\}\}\n" };				var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Discussion page created.' );} xmlhttp.send( QueryString.create( postData ) ); }			xmlhttp.send( null );

// Todays list Status.status( 'Adding AFD discussion to the todays list...' );

var date = new Date;

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': 'Wikipedia:Articles for deletion/Log/' + date.getUTCFullYear + ' ' + date.getUTCMonthName + ' ' + date.getUTCDate, 'action': 'submit' };			xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var form = this.responseXML.getElementById('editform'); var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Adding \[\[Wikipedia:Articles for deletion/" + wgTitle + twinklexfd.numbering + '\]\].' + TwinkleConfig.summaryAd, 'wpTextbox1': form.wpTextbox1.value + "\n\{\{subst:afd3|pg=" + wgTitle + twinklexfd.numbering + "\}\}" };				var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Notification complete.' );} xmlhttp.send( QueryString.create( postData ) ); }			xmlhttp.send( null );

// Notification to first contributor Status.status( 'Getting data for first contributor...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'action': 'query', 'prop': 'revisions', 'titles': wgPageName, 'rvlimit': 1, 'rvprop': 'user', 'rvdir': 'newer', 'format': 'xml' }			xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?' + QueryString.create( xmlhttp.query ), true ); xmlhttp.onload = function { var user = this.responseXML.documentElement.getElementsByTagName('rev')[0].getAttribute('user'); Status.info( 'found user ' + user + ' as first contributor, proceeding to notify user...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': 'User talk:' + user, 'action': 'submit' };				xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true ); xmlhttp.onload = function { var form = this.responseXML.getElementById( 'editform' ); var text = form.wpTextbox1.value; text += "\n\{\{subst:AFDWarning|1=" + wgTitle + ( twinklexfd.numbering !=  ? '|order=&#32;' + twinklexfd.numbering :  ) + "\}\} \~\~\~\~"; var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': 'AfD nomination of \[\[' + wgTitle + '\]\].' + TwinkleConfig.summaryAd, 'wpTextbox1': text };					var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'User notification complete.' );} xmlhttp.send( QueryString.create( postData ) );

}				xmlhttp.send( null ); }			xmlhttp.send( null );

}		xmlhttp.send( null ); break; case 'tfd': // TFD

// Tagging article Status.status( 'Putting the deletion tag on the template...' ); var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': wgPageName, 'action': 'submit' };		xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var form = this.responseXML.getElementById('editform'); var postData = { 'wpMinoredit': false, // Per 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Nominated for deletion; see \[\[Wikipedia:Templates for deletion#" + wgPageName + '\]\].'+ TwinkleConfig.summaryAd, 'wpTextbox1': " \{\{tfd|" + wgTitle + "\}\}\n " + form.wpTextbox1.value };			var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Article tagged.' );} xmlhttp.send( QueryString.create( postData ) ); }		xmlhttp.send( null );

// Adding discussion Status.status( 'Adding TfD discussion to the todays page...' );

var date = new Date;

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': 'Wikipedia:Templates for deletion/Log/' + date.getUTCFullYear + ' ' + date.getUTCMonthName + ' ' + date.getUTCDate, 'action': 'submit', 'section': 1 };		xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var form = this.responseXML.getElementById('editform'); text = form.wpTextbox1.value; text = text.replace( '-->', "-->\n\{\{subst:tfd2|" + wgTitle + "|text=" + twinklexfd.reason + ". \~\~\~\~\}\}"); var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Adding Template:" + wgTitle + '.' + TwinkleConfig.summaryAd, 'wpTextbox1': text };			var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Notification complete.' );} xmlhttp.send( QueryString.create( postData ) ); }		xmlhttp.send( null );

// Notifying first contributor Status.status( 'Getting data for first contributor...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'action': 'query', 'prop': 'revisions', 'titles': wgPageName, 'rvlimit': 1, 'rvprop': 'user', 'rvdir': 'newer', 'format': 'xml' }		xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?' + QueryString.create( xmlhttp.query ), true ); xmlhttp.onload = function { var user = this.responseXML.documentElement.getElementsByTagName('rev')[0].getAttribute('user'); Status.info( 'found user ' + user + ' as first contributor, proceeding to notify user...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': 'User talk:' + user, 'action': 'submit' };			xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true ); xmlhttp.onload = function { var form = this.responseXML.getElementById( 'editform' ); var text = form.wpTextbox1.value; text += "\n\{\{subst:tfdnotice|1=" + wgTitle + "\}\} \~\~\~\~"; var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': 'TfD nomination of \[\[Template:' + wgTitle + '\]\].' + TwinkleConfig.summaryAd, 'wpTextbox1': text };				var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'User notification complete.' );} xmlhttp.send( QueryString.create( postData ) );

}			xmlhttp.send( null ); }		xmlhttp.send( null ); break; case 'mfd': // MFD wgPageName = wgPageName.replace( '_', ' ' ); // for queen/king/whatever and country!

Status.status( 'Grabbing data of eventual previous nominations' ); var query = { 'title': 'Special:Prefixindex', 'from': 'Miscellany for deletion/' + wgPageName, 'namespace': 4 };		var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( query ), true); xmlhttp.onload = function { var a_tags = this.responseXML.getElementsByTagName('a'); var re = new RegExp( RegExp.escape( 'Miscellany for deletion/' + wgPageName ) ); var number = 0; for( var i in a_tags ) { var title = a_tags[i].title; if( re.exec( title ) ) { var n = /\(\s*(\d+)(?:(?:th|nd|rd|st) nom(?:ination)?)?\s*\)\s*$/.exec( title ); if( n && n[1] > number ) { number = n[1]; } else if( number == 0 ) { number = 1; }				}			}

if( number == 0 ) { twinklexfd.numbering = number = ''; } else { number = num2order( parseInt( number ) + 1); twinklexfd.numbering = ' (' + number + ' nomination)'; }			Status.info( 'next in order is Miscellany for deletion/' + wgPageName + twinklexfd.numbering + '');

// Tagging article Status.status( 'Putting the deletion tag on the article...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': wgPageName, 'action': 'submit' };			xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var form = this.responseXML.getElementById('editform'); var postData = { 'wpMinoredit': false, // Per memo 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Nominated for deletion; see Miscellany for deletion/" + wgPageName + twinklexfd.numbering + '.'+ TwinkleConfig.summaryAd, 'wpTextbox1': "\{\{" + ( number == '' ? "subst:mfd\}\}\n" : 'subst:mfdx|' + number + "\}\}\n" ) + form.wpTextbox1.value };				var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Article tagged.' );} xmlhttp.send( QueryString.create( postData ) ); }			xmlhttp.send( null );

// Discussion page Status.status( 'Creating the article\'s deletion discussion page...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': 'Wikipedia:Miscellany for deletion/' + wgPageName + twinklexfd.numbering, 'action': 'submit' };

xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var form = this.responseXML.getElementById('editform'); var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Creating deletion discussion page for \[\[" + wgPageName + '\]\].' + TwinkleConfig.summaryAd, 'wpTextbox1': "\{\{subst:mfd2|pg=" + wgPageName + "|text=" + twinklexfd.reason + " \~\~\~\~\}\}\n" };				var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Discussion page created.' );} xmlhttp.send( QueryString.create( postData ) ); }			xmlhttp.send( null );

// Todays list Status.status( 'Adding MFD discussion to the todays list...' );

var date = new Date;

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': 'Wikipedia:Miscellany for deletion', 'action': 'submit', 'section': 2 };			xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function {

var form = this.responseXML.getElementById('editform');

var text = form.wpTextbox1.value;

var month = date.getUTCMonth + 1; var today_date = date.getUTCFullYear + '-' + ( month < 10 ? '0' : '' ) + month + '-' + date.getUTCDate; Status.info( 'todays date: ' + today_date ); var today_regex = new RegExp( "(\\=\\=\\=\\[\\[" + RegExp.escape( today_date ) + "\\]\\]\\=\\=\\=)" ); var new_data = "\n\{\{subst:mfd3|pg=" + wgPageName + twinklexfd.numbering + "\}\}";

if( today_regex.test( text ) ) { // we have a section allready Status.info( 'Found todays section, proceeding to add new entry' ); text = text.replace( today_regex, "$1\n" + new_data ); } else { // we need to create a new section Status.info( 'No section for today found, proceeding to ccreate one' ); text = text.replace( '-->', "-->\n===\[\[" + today_date + "\]\]===\n" + new_data ); }

var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Adding \[\[Wikipedia:Miscellany for deletion/" + wgPageName + twinklexfd.numbering + '\]\].' + TwinkleConfig.summaryAd, 'wpTextbox1': text };				var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Notification complete.' );} xmlhttp.send( QueryString.create( postData ) ); }			xmlhttp.send( null );

// Notification to first contributor Status.status( 'Getting data for first contributor...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'action': 'query', 'prop': 'revisions', 'titles': wgPageName, 'rvlimit': 1, 'rvprop': 'user', 'rvdir': 'newer', 'format': 'xml' }			xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?' + QueryString.create( xmlhttp.query ), true ); xmlhttp.onload = function { var user = this.responseXML.documentElement.getElementsByTagName('rev')[0].getAttribute('user'); Status.info( 'found user ' + user + ' as first contributor, proceeding to notify user...' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': 'User talk:' + user, 'action': 'submit' };				xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true ); xmlhttp.onload = function { var form = this.responseXML.getElementById( 'editform' ); var text = form.wpTextbox1.value; text += "\n\{\{subst:MFDWarning|1=" + wgPageName + ( twinklexfd.numbering !=  ? '|order=&#32;' + twinklexfd.numbering :  ) + "\}\} \~\~\~\~"; var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': 'MfD nomination of \[\[' + wgPageName + '\]\].' + TwinkleConfig.summaryAd, 'wpTextbox1': text };					var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'User notification complete.' );} xmlhttp.send( QueryString.create( postData ) );

}				xmlhttp.send( null ); }			xmlhttp.send( null );

}		xmlhttp.send( null ); break; case 'ifd': // IFD

wgPageName = wgPageName.replace( '_', ' ' ); // for queen/king/whatever and country!

// Tagging image Status.status( 'Putting the deletion tag on the image page...' ); var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': wgPageName, 'action': 'submit' };		xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var form = this.responseXML.getElementById('editform'); var postData = { 'wpMinoredit': false, // Per 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Nominated for deletion; see \[\[Wikipedia:Images for deletion#" + wgPageName + '\]\].'+ TwinkleConfig.summaryAd, 'wpTextbox1': "\{\{ifd\}\}\n" + form.wpTextbox1.value };/*			var xmlhttp = sajax_init_object; xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlhttp.onload = function { Status.info( 'Image tagged.' );} xmlhttp.send( QueryString.create( postData ) );*/ }		xmlhttp.send( null );

Status.status( 'Tagging all pages including said image' );

var xmlhttp = sajax_init_object; xmlhttp.query = { 'action': 'query', 'list': 'imageusage', 'titles': wgPageName, 'iulimit': 500, // test 500, // Maximum, if it's more than 500 images, ignore the rest for now... 'format': 'xml' };		var link = document.createElement( 'a' ); link.setAttribute( 'href', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?' + QueryString.create( xmlhttp.query ) ); link.appendChild( document.createTextNode( mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?' + QueryString.create( xmlhttp.query ) ) ); Status.info( ["going for ", link ] ); xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function { var xmlDoc = this.responseXML; var nsResolver = xmlDoc.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement); var count = xmlDoc.evaluate( 'count(//imageusage/iu)', xmlDoc, nsResolver, XPathResult.ANY_TYPE, null ); Status.info( "got " + count.numberValue + " nodes" );

var snapshot = xmlDoc.evaluate('//imageusage/iu/@title', xmlDoc, nsResolver, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );

for ( var i = 0; i < snapshot.snapshotLength; ++i ) { var title = snapshot.snapshotItem(i).value; var xmlhttp = sajax_init_object; xmlhttp.query = { 'title': title, 'action': 'submit' };				xmlhttp.overrideMimeType('text/xml'); xmlhttp.open( 'GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( xmlhttp.query ), true); xmlhttp.onload = function {

var form = this.responseXML.getElementById('editform'); var text = form.wpTextbox1.value; var old_text = text; var title_things = this.responseXML.documentURI.match(new RegExp("(?:&|\\?)title=([^&]+)(&|$)", "i")); if (!title_things || !(title_things.length > 1)) { return; }					var title = title_things[1];

var re = new RegExp( "(\\[\\[" + wgPageName + ".*?)(\\]\\])", 'g' ); // simple regexp, might not always work text.replace( re, "$1\{\{ifdc|" + wgPageName + "\}\}$2" );

if( text == old_text ) { Status.info( 'No tag for ' + title ); return; } else { Status.info( 'Added tag for ' + title ); }					var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': "Adding notice of possible deletion of image " + wgPageName + '.' + TwinkleConfig.summaryAd, 'wpTextbox1': text };					//var xmlhttp = sajax_init_object; //xmlhttp.current = this.current; //xmlhttp.overrideMimeType('text/xml'); //xmlhttp.open( 'POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( this.query ), true); //xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); //xmlhttp.onload = function { Status.info( 'Added tag for ' + this.current ) } //xmlhttp.send( QueryString.create( postData ) ); }								xmlhttp.send( null );

}

}		xmlhttp.send( null );

break;

} }