Jump to content

User:Steel359/twinkle.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Steel (talk | contribs) at 00:45, 16 February 2007 (Modified version of User:AzaToth/twinklespeedy.js). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <pre> This is a slightly modified version of [[User:AzaToth/twinklespeedy.js]]. All credit goes to him for writing the script.

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

/**
TwinkleConfig.addAdToSummary
If [[WP:TWINKLE|TWINKLE]] should be added or not to summary
*/
if( typeof( TwinkleConfig.addAdToSummary ) == 'undefined' ) {
	TwinkleConfig.addAdToSummary = false;
}

/**
TwinkleConfig.addAdToDeletionSummary
If [[WP:TWINKLE|TWINKLE]] should be added or not to the deletion summary (admin only)
*/
if( typeof( TwinkleConfig.addAdToDeletionSummary ) == 'undefined' ) {
	TwinkleConfig.addAdToDeletionSummary = false;
}

/**
TwinkleConfig.watchSpeedyPages (array)
What types of actions that should result in forced addition to watchlist
*/
if( typeof( TwinkleConfig.watchSpeedyPages ) == 'undefined' ) {
	TwinkleConfig.watchSpeedyPages = [];
}

/**
TwinkleConfig.deleteTalkPageOnDelete
If talk page if exists should also be deleted (CSD G8) when spedying a page (admin only)
*/
if( typeof( TwinkleConfig.deleteTalkPageOnDelete ) == 'undefined' ) {
	TwinkleConfig.deleteTalkPageOnDelete = true;
}

function twinkleSpeedyDelete() {
	if( wgNamespaceNumber < 0 || wgCurRevisionId == false ) {
		return;
	}
	if( userIsInGroup( 'sysop' ) ) {
		addPortletLink('p-cactions', "javascript:twinklespeedy( 'csd' )", "speedy delete", "ca-db0", "Speedy delete using Twinkle javascript", "");
//		addPortletLink('p-cactions', "javascript:twinklespeedy( 'reason' )", "db (reason)", "ca-db0", "Speedy deletion with reason", "");
	} else {
		addPortletLink('p-cactions', "javascript:twinklespeedy( 'csd' )", "db (csd)", "ca-db0", "Request speedy deletion according to WP:CSD", "");
//		addPortletLink('p-cactions', "javascript:twinklespeedy( 'reason' )", "db (reason)", "ca-db0", "Request speedy deletion with reason", "");
	}	
}
addOnloadHook(twinkleSpeedyDelete);

function twinklespeedy( type ) {
	twinklespeedy.type = type;
	switch( type ) {
		case 'csd':
		twinklespeedy.Window = new SimpleWindow(100, 400 );
		twinklespeedy.Window.setTitle( "" );

		function createOption( value, text ) {
			var div = document.createElement( 'div' );
			var input = document.createElement( 'input' );
			input.value = value;
			input.name = 'csd';
			input.id = 'wp' + value;
			input.type = 'radio';
			var label = document.createElement( 'label' );
			label.setAttribute( 'for', value );
			label.appendChild( document.createTextNode( text ) );
			div.appendChild( input );
			div.appendChild( label );

			return div;
		}
		var form = document.createElement( 'form' );
		form.addEventListener( 'change', twinklespeedy.csd, true );
		form.appendChild( createOption( 'A7', 'CSD A7' ) );
		form.appendChild( createOption( 'A7/G11', 'CSD A7/G11' ) );
		form.appendChild( createOption( 'G11', 'CSD G11' ) );
		form.appendChild( createOption( 'G8', 'CSD G8' ) );
		form.appendChild( document.createElement( 'hr' ) );
		form.appendChild( createOption( 'A1', 'CSD A1' ) );
		form.appendChild( createOption( 'A3', 'CSD A3' ) );
		form.appendChild( createOption( 'G1', 'CSD G1' ) );
		form.appendChild( createOption( 'G4', 'CSD G4' ) );
		form.appendChild( createOption( 'G7', 'CSD G7' ) );
		form.appendChild( createOption( 'G10', 'CSD G10' ) );
		form.appendChild( createOption( 'G12', 'CSD G12' ) );
		form.appendChild( document.createElement( 'hr' ) );
		form.appendChild( createOption( 'OR', 'OR' ) );
		form.appendChild( createOption( 'Indef', 'Indef' ) );
		form.appendChild( createOption( 'Orph', 'Orphaned' ) );
		form.appendChild( createOption( 'Neo', 'Neologism' ) );
		form.appendChild( createOption( 'Ball', 'Crystal ball' ) );
		form.appendChild( document.createElement( 'hr' ) );
		form.appendChild( createOption( 'R1', 'CSD R1' ) );
		form.appendChild( createOption( 'R2', 'CSD R2' ) );
		form.appendChild( createOption( 'U1', 'CSD U1' ) );

		twinklespeedy.Window.setContent( form );
		twinklespeedy.Window.display();

		break;
		case 'reason':
		var criteria = prompt( "Enter reason for speedy deletion" );
		if( !criteria ) {
			return; // User abort action
		}
		if( userIsInGroup( 'sysop' ) ) {
			twinklespeedy.summary = "Speedy deletion, with reason: " + criteria + "." + ( TwinkleConfig.addAdToDeletionSummary ? ' [[WP:TWINKLE|TWINKLE]].' : '');
		} else {
			twinklespeedy.summary = "Requesting speedy deletion." + ( TwinkleConfig.addAdToSummary ? ' [[WP:TWINKLE|TWINKLE]]' : '');
		}
		twinklespeedy.code = "{{d" + "b" + ( criteria ? '|' + criteria : '' ) + "}}";
		Status.init( document.getElementById('bodyContent') );

		Status.status( 'Grabbing page' );

		editXML = sajax_init_object();
		editXML.overrideMimeType('text/xml');
		if( userIsInGroup( 'sysop' ) ) {
			editXML.open( 'GET' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( { 'title': wgPageName, 'action': 'delete' } ), true);
		} else {
			editXML.open( 'GET' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( { 'title': wgPageName, 'action': 'submit' } ), true);
		}
		editXML.onreadystatechange = twinklespeedyCallback;
		editXML.send( null );
		break;
	}
}
twinklespeedy.csd = function(e) {
	var convarr = {
		'A7': 'CSD A7',
		'A7/G11': 'CSD A7/G11',
		'G11': 'CSD G11',
		'G8': 'CSD G8',
		'A1': 'CSD A1',
		'A3': 'CSD A3',
		'G1': 'CSD G1',
		'G4': 'CSD G4',
		'G7': 'CSD G7',
		'G10': 'CSD G10',
		'G12': 'CSD G12',
		'OR': 'Original research',
		'Indef': 'Indefblocked user',
		'Orph': 'Orphaned',
		'Neo': 'Neologism',
		'Ball': 'Crystal ball',
		'R1': 'CSD R1',
		'R2': 'CSD R2',
		'U1': 'CSD U1', 
	};
	var reasarr = {
		'A7': '',
		'A7/G11': '',
		'G11': '',
		'G8': '',
		'A1': '',
		'A3': '',
		'G1': '',
		'G4': '',
		'G7': '',
		'G10': '',
		'G12': '',
		'OR': '',
		'Indef': '',
		'Orph': '',
		'Neo': '',
		'Ball': '',
		'R1': '',
		'R2': '',
		'U1': '', 
	};

	var value = e.target.value;
	var normalized = convarr[ value ];
	twinklespeedy.watch = TwinkleConfig.watchSpeedyPages.indexOf( normalized ) != -1;
	var reason = reasarr[ value ];
	if( userIsInGroup( 'sysop' ) ) {
		twinklespeedy.summary = "" + normalized + "" + reason + "" + ( TwinkleConfig.addAdToDeletionSummary ? ' [[WP:TWINKLE|TWINKLE]]' : '');
	} else {
		twinklespeedy.summary = "Requesting speedy deletion ([[WP:CSD#" + normalized + "|CSD " + normalized + "]])." + ( TwinkleConfig.addAdToSummary ? ' [[WP:TWINKLE|TWINKLE]]' : '');
		switch( normalized ) {
			case 'i8':
			var date = new Date();
			twinklespeedy.code = "{{" + "NowCommons" + "|month=" + date.getUTCMonthName() + "|day=" + date.getUTCDate() + "|year=" + date.getUTCFullYear() + "|1=" + wgPageName.replace( '_', ' ' ) + "}}";
			break;
			case 'g12':
			url = prompt( 'Please enter url if available, including the http://' );
			if( url == null ) {
				return;
			}
			twinklespeedy.code = "{{d" + "b-" +  value + "|url=" + url + "}}";
			break;
			case 'i1':
			img = prompt( 'enter the image this is redundant to, excluding the Image: prefix' );
			if( img == null ) {
				return;
			}
			twinklespeedy.code = "{{d" + "b-" +  value + "|1=" + img + "}}";
			break;
			default:
			twinklespeedy.code = "{{d" + "b-" +  value + "}}";
			break;
		}
	}
	twinklespeedy.Window.close();
	Status.init( document.getElementById('bodyContent') );

	Status.status( 'Running script' );

	editXML = sajax_init_object();
	editXML.overrideMimeType('text/xml');

	if( userIsInGroup( 'sysop' ) ) {
		editXML.open( 'GET' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( { 'title': wgPageName, 'action': 'delete' } ), true);
	} else {
		editXML.open( 'GET' , wgServer + wgScriptPath + '/index.php?' + QueryString.create( { 'title': wgPageName, 'action': 'submit' } ), true);
	}
	editXML.onreadystatechange = twinklespeedyCallback;
	editXML.send( null );
}


function twinklespeedyCallback() {
	if ( editXML.readyState != 4 ){
		Status.progress('.');		
		return;
	} 

	if( editXML.status != 200 ){
		Status.error('Bad status , bailing out');		
		return;
	}

	Status.progress('');

	// when we grabbed the page, it wasn't there
	if( editXML.responseText.indexOf( 'var wgCurRevisionId = false;' ) != -1 ) {
		Status.error( "Page doesn't exist." );
		return;
	}

	var doc = editXML.responseXML;
	var form;

	if( userIsInGroup( 'sysop' ) ) {
		Status.status( 'Deleting...' );

		form = doc.getElementById( 'deleteconfirm' );
		form.style.display = 'none';

		doc.getElementById( 'wpReason' ).value = twinklespeedy.summary;
		if( twinklespeedy.watch ) {
			doc.getElementById( 'wpWatch' ).checked = true;
		}
		if( TwinkleConfig.deleteTalkPageOnDelete && wgNamespaceNumber % 2 == 0 && document.getElementById( 'ca-talk' ).className != 'new' ) {
			var talk_page = namespaces[ wgNamespaceNumber  + 1 ] + ':' + wgTitle;
			var query = {
				'title': talk_page,
				'action': 'delete',
			};
			var win_ref = window.open(  wgServer + wgScriptPath + '/index.php?' + QueryString.create( query ), 'talkpage' , 'scrollbars=yes,width=75,height=75' );
			win_ref.watch = twinklespeedy.watch;
			win_ref.onload = function() {
				if( this.watch ) {
					this.document.getElementById( 'wpWatch' ).checked = true;
				}
				this.document.getElementById( 'wpReason' ).value = "CSD G8" + ( TwinkleConfig.addAdToDeletionSummary ? ' [[WP:TWINKLE|TWINKLE]]' : '');
				this.document.getElementById( 'deleteconfirm' ).submit();
			}
		}
	} else {

		form = doc.getElementById( 'editform' );
		form.style.display = 'none';

		var textbox = doc.getElementById( 'wpTextbox1' );

		var text = textbox.value;

		Status.status( 'Checking for tags on the page...' );

		var tag = /(\{\{(?:db-?|delete)\|?.*?\}\})/.exec( text );

		if( tag ) {
			Status.warn( [ htmlNode( 'strong', tag[0] ) , " is alread placed on the page." ] )
			return;
		}

		var xfd = /(\{\{(?:[aitcm]fd|md1)[^{}]*?\}\})/i.exec( text );

		if( xfd && !confirm( "The deletion related template " + xfd[0] + " is already present on the page, do you still want to revert?" ) ) {
			return;
		}

		Status.progress('');

		Status.status( 'Submitting form...' );

		textbox.value = twinklespeedy.code + "\n" + textbox.value;
		doc.getElementById( 'wpSummary' ).value = twinklespeedy.summary;	
		doc.getElementById( 'wpMinoredit' ).checked = true;
		if( twinklespeedy.watch ) {
			doc.getElementById( 'wpWatchthis' ).checked = true;
		}

	}
	document.getElementById('globalWrapper').appendChild( form );
	form.submit();	

	Status.progress('');
}