User:Kingpin13/csdhelper.js

/* ============================================== *\ \* ============================================== */
 * CSD Helper - JavaScript CSD Script
 * for Wikipedia
 * Created by Alexander Barley User:Ale_jrb
 * Created by Alexander Barley User:Ale_jrb

// the following settings are used in this script: if (notifyByDefaultDec == null)	 var notifyByDefaultDec	= true;			// whether to check the 'notify tagger' box by default when declining a speedy deletion request if (notifyByDefaultDel == null)	 var notifyByDefaultDel	= false;		// whether to check the 'notify tagger' box by default when changing a speedy deletion rationale if (notifyByDefaultPrd == null)	 var notifyByDefaultPrd	= true;			// whether to check the 'notify tagger' box by default when converting a speedy deletion to PROD if (notifyLimit == null)			 var notifyLimit			= 8;			// how many revisions should be retrieved when determining who tagged the page if (redirectAfterDel == null)		 var redirectAfterDel	= 'http://en.wikipedia.org/w/index.php?title=Category:Candidates_for_speedy_deletion&action=purge#Pages_in_category'; // where to redirect after deletion if (overwriteDeclineReasons == null)var overwriteDeclineReasons	= false;	 // whether to overwrite the in-build decline reasons with the user defined ones if (myDeclineReasons == null)		var myDeclineReasons	= new Array;	 // any addition speedy deletion decline reasons to add to the list

//main script function csdHelper { this.launch = function { // launch helper. check whether there is a deletion tag on this page. if ((document.getElementById('delete-criterion') == null) && !(document.body.innerHTML.indexOf('speedy deletion of this page is contested.') > -1)) { return false; }		if ( /*(waUser.isSysop == false) ||*/ (wgNamespaceNumber == 10)) { return false; }

// all checks OK :).  	        // launch controller.		this.control	= new csdH_controller;		this.control.attachLinks;		return true;	} }

function csdH_controller { csdHController		 = this; csdHController.doNotifyDec = ; csdHController.doNotifyDel = ; csdHController.doNotifyPrd = ''; if (notifyByDefaultDec == true) csdHController.doNotifyDec = ' checked'; if (notifyByDefaultDel == true) csdHController.doNotifyDel = ' checked'; if (notifyByDefaultPrd == true) csdHController.doNotifyPrd = ' checked'; this.declineReasons = new Array(					['G1',		 'the page is not nonsense - there is meaningful content.'],					['G2',		 'the page is not a test page.'],					['G3',		 'the page is not blatantly vandalism or a hoax.'],					['G4',		 'the page has not previously been deleted via a deletion discussion.'],					['G5',		 'the page was not created by a banned user, or the page does not violate the user\'s ban.'],					['G6',		 'the deletion of this page may be controvertial or is under discussion.'],					['G7',		 'the author has not requested deletion, or other users have added substantial content.'],					['G8',		 'the page does not rely on one that does not exist.'],					['G9',		 'this criterion can only be used at the request of, or by, the Wikimedia Foundation.'],					['G10',	 'the page is not an attack page or negative unsourced BLP'],					['G11',	 'the page is not unambiguously promotional.'], ['G12',	 'the page is not an unambiguous copyright infringement, or there is other content to save.'], ['A1',		 'there is sufficient context to identify the subject of the article.'], ['A2',		 'the article is in English, or does not exist at a foreign project.'], ['A3',		 'the article contains sufficient content to be a stub.'], ['A5',		 'the article has not been transwikied to another project.'], ['A7',		 'the article makes a credible claim of importance or significance.'], ['A7',		 'A7 does not apply to books, software, buildings etc.'], ['A9',		 'the article makes a credible claim of importance or significance or is not a musical recording'], ['R2',		 'the page does not redirect to a different or incorrect namespace.'], ['R3',		 'the page is a plausible, useful redirect or is not a redirect at all.'], ['R3',		 'the redirect page was not recently created'], ['U1',		 'this criterion does not apply to user talk pages, or this is not a user page.'], ['U2',		 'the user does exist, or this is not a user page.'] );	// Handle user defined content...	if (overwriteDeclineReasons == true) {		this.declineReasons.length = 0;		this.declineReasons = myDeclineReasons;	} else {		this.declineReasons = this.declineReasons.concat(myDeclineReasons);	}	var declineReasonsEnd = new Array( ['NA',		 'the reason given is not a valid \[\[WP:CSD|criterion for speedy deletion\]\]. Use \[\[WP:PROD\]\] or \[\[WP:AFD\]\] instead.'], ['-',		 'no reason given.'],	 // don't touch this ['O',		 'Other...']				// don't touch this );	this.declineReasons = this.declineReasons.concat(declineReasonsEnd);	this.deleteReasons = new Array( ['N/A',		 'You must select a rationale...'], ['G1',		 'Patent nonsense, meaningless, or incomprehensible'], ['G2',		 'Test page'], ['G3',		 'Vandalism'], ['G4',		 'Recreation of a page that was deleted per a deletion discussion'], ['G5',		 'Creation by a banned user in violation of ban'], ['G6',		 'Housekeeping and routine (non-controversial) cleanup'], ['G7',		 'One author who has requested deletion or blanked the page'], ['G8',		 'Page dependent on a deleted or nonexistent page'], ['G10',	 'Attack page or negative unsourced BLP'], ['G11',	 'Unambiguous advertising or promotion'], ['G12',	 'Unambiguous copyright infringement'],

['A1',		 'Not enough context to identify article\'s subject'], ['A2',		 'Article in a foreign language that exists on another project'], ['A3',		 'Article that has no meaningful, substantive content'], ['A5',		 'Article that has been transwikied to another project'], ['A7',		 'Article about a real person, which does not indicate the importance or significance of the subject'], ['A7',		 'Article about a company, corporation, organization, or group, which does not indicate the importance or significance of the subject'], ['A7',		 'Article about a group or club, which does not indicate the importance or significance of the subject'], ['A7',		 'Article about a band, singer, musician, or musical ensemble, which does not indicate the importance or significance of the subject'], ['A7',		 'Article about a web site, blog, web forum, webcomic, podcast, browser game, or similar web content, which does not indicate the importance or significance of the subject'], ['A7',		 'No indication that the article might meet the guidelines for inclusion'], ['A9',		 'Non-notable music by artist with no Wikipedia article'], ['R2',		 'Cross-namespace redirect from mainspace'], ['R3',		 'Recently-created, implausible redirect'], ['U1',		 'User request to delete pages in own userspace'], ['U2',		 'Userpage or subpage of a nonexistent user'], ['U3',		 'Non-free gallery'] );	this.showcsdHWindow = function {		// grab position of button		var offset = document.getElementById('ca-speedy').offsetLeft;		// build window to show user		if (this.interface == null) { 			this.interface = new wa_window(document.getElementById('content')); this.visible = true; this.csdHelperLink.ele_obj.setAttribute('class', 'selected'); 			this.interface.win_content = ''+					' Handle Speedy Deletion '+					' What do you want to do to this page? '+					' '+						'Delete Page '+						'Decline Speedy '+ 'Change to PROD '+ ' '+					'';		} else { this.interface.win_content = ''+ ' Handle Speedy Deletion '+ ' What do you want to do to this page? '+					' '+						'Delete Page '+ 'Decline Speedy '+ 'Change to PROD '+ ' '+					'';			if (this.visible == true) { this.csdHelperLink.ele_obj.setAttribute('class', ''); this.interface.win_disp = 'none'; this.interface.applyAll; this.visible = false; return true; } else { this.csdHelperLink.ele_obj.setAttribute('class', 'selected'); this.interface.win_disp = 'block'; this.interface.win_height = 170; this.interface.applyAll; this.visible = true; return true; }		}		this.interface.win_left = offset - 17; this.interface.win_top = -1; this.interface.win_width = 600; this.interface.win_height = 170; this.interface.win_bg = '#fff'; this.interface.win_bd = '#aaaaaa'; this.interface.win_bd_wd = 1; this.interface.applyAll; }	this.declinePage = function { // build the selection options var declineOptions = ''; for (var i = 0; i < this.declineReasons.length; i++) { var selected = ''; if (document.getElementById('delete-criterion') != null) { if (document.getElementById('delete-criterion').innerHTML == this.declineReasons[i][0]) selected = ' selected '; } else { if (this.declineReasons[i][0] == 'O') selected = ' selected '; }			if (this.declineReasons[i][0] == 'NA') { declineOptions += 'No such criterion: '+this.declineReasons[i][1]+' '; } else if (this.declineReasons[i][0] == '-') { declineOptions += 'Criterion does not apply: '+this.declineReasons[i][1]+' '; } else if (this.declineReasons[i][0] == 'O') { declineOptions += 'Other - supply your own reason below. ';			} else { declineOptions += ''+this.declineReasons[i][0]+': '+this.declineReasons[i][1]+' '; }		}		this.interface.win_content = ''+ ' Decline Speedy Deletion '+ ' Select the reason for declining the deletion from the list. This text will be used as the edit summary. '+					''+declineOptions+' '+ ' Or provide your own reason and summary below. '+					''+ ' -- decline speedy deletion -- '+ ' notify tagger  '+ ' '+					'';		this.interface.applyAll; }	this.declineDo = function(callback) { // get page content if (!callback) var callback = 0; switch (callback) { default: // main vars csdHController.declineText =	 document.getElementById('declineText').value; csdHController.declineSel =	 document.getElementById('declineReason').selectedIndex; csdHController.declineNotify =	 document.getElementById('notifyTagger').checked; if ((csdHController.declineText == '') && (csdHController.declineSel == csdHController.declineReasons.length-1)) { csdHController.declineSel == csdHController.declineReasons.length-2; } else if ((csdHController.declineText != '') && (csdHController.declineSel == csdHController.declineReasons.length-1)) { csdHController.declineSel == csdHController.declineReasons.length-2; }				csdHController.declineCategory	 =	 csdHController.declineReasons[csdHController.declineSel][0]; csdHController.declineReason	=	 csdHController.declineReasons[csdHController.declineSel][1]; // finish building messages if (csdHController.declineSel == csdHController.declineReasons.length - 3) { csdHController.declineReason = 'No such criterion: '+csdHController.declineReason+''; } else if (csdHController.declineSel == csdHController.declineReasons.length - 2) { csdHController.declineReason = 'Criterion does not apply. '+csdHController.declineReason+''; } else if (csdHController.declineSel == csdHController.declineReasons.length - 1) { csdHController.declineReason = csdHController.declineText; } else { csdHController.declineReason = csdHController.declineReason; }				// start this.interface.win_content = ''+ ' Working... '+					' Please wait while CSDHelper performs the requested operations. This can take several seconds. '+					' - Retrieving existing content... '+					' '+					'';				this.interface.applyAll; csdHController.pageReq = new wa_mediawikiApi; csdHController.pageReq.onCompleteAction = function { csdHController.declineDo('1'); }; csdHController.pageReq.getPage(wgPageName, notifyLimit, 'user|content'); break; case '1': document.getElementById('workingStatus').innerHTML += '- Removing tags... ';				csdHController.pageContent = csdHController.pageReq.data['page']['revisions'][0]['content']; var regReplace = /[\s]*\{\{db(?:-?(?:.+?)?|\|(.+))\}\}[\s]*/gi; csdHController.pageContent = csdHController.pageContent.replace(regReplace, ''); var regReplace = /[\s]*\{\{hangon\}\}[\s]*/gi; csdHController.pageContent = csdHController.pageContent.replace(regReplace, ''); csdHController.newContent = csdHController.pageContent; // grab a record of that if (csdHController.declineSel < csdHController.declineReasons.length-1) { // normal case csdHController.editSummary = 'removed speedy tag- '+csdHController.declineReason+' (CSDH)'; } else if (csdHController.declineSel == csdHController.declineReasons.length-1) { csdHController.editSummary = 'removed speedy tag- '+csdHController.declineText+' (CSDH)'; } else { csdHController.displayError; return false; }				document.getElementById('workingStatus').innerHTML += '- Updating page... ';				csdHController.editReq = new wa_mediawikiApi; csdHController.editReq.onCompleteAction = function { csdHController.declineDo('2'); }; csdHController.editReq.editPage(wgPageName, csdHController.newContent, csdHController.editSummary, false, 'text'); break; case '2': // check for notify if (csdHController.declineNotify == true) { document.getElementById('workingStatus').innerHTML += '- Determining user who tagged page... ';					var tags = 0; csdHController.tagger = ''; for (var i = 0; i < notifyLimit; i ++) { var thisPage = csdHController.pageReq.data['page']['revisions'][i]['content']; // count tags var regTest = /[\s]*\{\{db(?:-?(?:.+?)?|\|(.+))\}\}[\s]*/gi; var k = 1; var count = 0; while (k != null) { k = regTest.exec(thisPage); if (k != null) count ++; }						regTest.lastIndex = 0; // check if we have fewer than last time (1 was added on that rev) if (count < tags) { csdHController.tagger = csdHController.pageReq.data['page']['revisions'][i - 1]['user']; break; } else { tags = count; }					}					if (csdHController.tagger == '') { document.getElementById('workingStatus').innerHTML += '- Could not determine tagger: will not notify. Finished. '; break; } document.getElementById('workingStatus').innerHTML += '- Tagged by \''+csdHController.tagger+'\' - notifying user... ';					csdHController.declineDo('3'); } else { window.location.reload(true); csdHController.showcsdHWindow; } break; case '3': // edit summary csdHController.editSummary = 'Notifying about removed speedy deletion tag (CSDH)'; // message var message = '== Removed speedy deletion tag: '+wgPageName.replace(/_/g, ' ')+' == \nHi '+csdHController.tagger+'! Firstly, thanks for helping out in CSD areas. I just wanted to inform you that '+ 'I removed the speedy deletion tag you placed on '+wgPageName.replace(/_/g, ' ')+'- because: \'\''+csdHController.declineReason+'\'\' If you have any questions or other message, please contact me. Thanks ' + ''; csdHController.saveReq = new wa_mediawikiApi; csdHController.saveReq.onCompleteAction = function { window.location.reload(true); csdHController.showcsdHWindow; }; csdHController.saveReq.editPage('User_talk:'+csdHController.tagger, message, csdHController.editSummary, false, 'appendtext'); break; }	}	this.prodPage = function { var prodOptions = ''; var content = document.getElementById('bodyContent'); var regTest = /criteria for speedy deletion<\/a><\/i> because (.*?)\.<\/b> For valid criteria,/i var rationale = regTest.exec(content); if (rationale != null) { rationale = rationale[1]; } else { rationale = ''; } this.interface.win_content = ''+ ' Convert to PROD '+ ' You are asserting that the page cannot be speedy deleted, but can be deleted by proposed deletion. '+					'Enter the reason for deletion below - if the tagger provided one, it will be filled automatically. '+					'<input id="prodReason" style="margin-left: 9px; font-size: 11px; width: 576px;" type="text" value="'+rationale+'" />'+ '<div id="notifyTaggerDiv" style="margin-top: 10px; font-size: 11px; margin-left: 20px; float: left; vertical-align: middle;">notify tagger of convertion <input id="notifyTagger"'+csdHController.doNotifyPrd+' style="position: relative; top: 3px; " type="checkbox" /> '+ ' -- <a href="#" onclick="csdHController.prodDo;">convert to PROD</a> -- '+ ' '+					'';		this.interface.applyAll; }	this.prodDo = function(callback) { if (!callback) var callback = 0; switch (callback) { default: csdHController.prodReason = document.getElementById('prodReason').value; csdHController.prodNotify = document.getElementById('notifyTagger').checked; this.interface.win_content = ''+ ' Working... '+					' Please wait while CSDHelper performs the requested operations. This can take several seconds. '+					' '+					' '+					'';				this.interface.applyAll; if (csdHController.prodNotify == true) { document.getElementById('workingStatus').innerHTML += '- Searching for tagger... ';					if (notifyLimit > 10) notifyLimit = 10; csdHController.pageReq = new wa_mediawikiApi; csdHController.pageReq.onCompleteAction = function { csdHController.prodDo('1'); }; csdHController.pageReq.getPage(wgPageName, notifyLimit + 1, 'content|user'); } else { csdHController.pageReq = new wa_mediawikiApi; csdHController.pageReq.onCompleteAction = function { csdHController.prodDo('3'); }; csdHController.pageReq.getPage(wgPageName, 1, 'content|user'); }				break; case '1': var tags = 0; csdHController.tagger = ''; for (var i = 0; i < notifyLimit; i ++) { var thisPage = csdHController.pageReq.data['page']['revisions'][i]['content']; // count tags var regTest = /[\s]*\{\{db(?:-?(?:.+?)?|\|(.+))\}\}[\s]*/gi; var k = 1; var count = 0; while (k != null) { k = regTest.exec(thisPage); if (k != null) count ++; }					regTest.lastIndex = 0; // check if we have fewer than last time (1 was added on that rev) if (count < tags) { csdHController.tagger = csdHController.pageReq.data['page']['revisions'][i - 1]['user']; break; } else { tags = count; }				}				if (csdHController.tagger == '') { document.getElementById('workingStatus').innerHTML += '- Could not determine tagger. Moving to tag page... '; csdHController.prodDo('3'); break; } csdHController.prodDo('2'); break; case '2': // notify tagger document.getElementById('workingStatus').innerHTML += '- Tagged by \''+csdHController.tagger+'\' - notifying user... ';				// edit summary csdHController.editSummary = 'Notifying about speedy deletion converted to PROD (CSDH)'; // message var message =	 '== Speedy Deletion Converted to PROD: '+wgPageName.replace(/_/g, ' ')+' == \nHello '+csdHController.tagger+', and thanks for your work patrolling new changes. I am just informing you that '+ 'I have changed a page you tagged ('+wgPageName.replace(/_/g, ' ')+') from being tagged for speedy deletion to being tagged for proposed deletion. '+					'The speedy deletion criteria are very narrow, and do not fit the page in question. Consider reviewing the criteria for speedy deletion. '+					'If you have any queries, please let me know. Thanks again! '+'';				csdHController.notifyReq = new wa_mediawikiApi; csdHController.notifyReq.onCompleteAction = function { csdHController.prodDo('3'); }; csdHController.notifyReq.editPage('User_talk:'+csdHController.tagger, message, csdHController.editSummary, false, 'appendtext'); break; case '3': document.getElementById('workingStatus').innerHTML += '- Converting tags... ';				csdHController.pageContent = csdHController.pageReq.data['page']['revisions'][0]['content']; var regReplace = /[\s]*\{\{db(?:-?(?:.+?)?|\|(.+))\}\}[\s]*/gi; csdHController.pageContent = csdHController.pageContent.replace(regReplace, '{'+'{subst:prod|'+csdHController.prodReason+'}'+'}\n'); var regReplace = /[\s]*\{\{hangon\}\}[\s]*/gi; csdHController.pageContent = csdHController.pageContent.replace(regReplace, ''); csdHController.newContent = csdHController.pageContent; // grab a record of that csdHController.editSummary = 'Speedy deletion converted to PROD (CSDH)'; document.getElementById('workingStatus').innerHTML += '- Updating page... ';				csdHController.editReq = new wa_mediawikiApi; csdHController.editReq.onCompleteAction = function { window.location.reload(true); csdHController.showcsdHWindow; }; csdHController.editReq.editPage(wgPageName, csdHController.newContent, csdHController.editSummary, false, 'text'); break; }	}	this.deletePage = function { // build the selection options var deleteOptions = ''; for (var i = 0; i < this.deleteReasons.length; i++) { var selected = ''; if (document.getElementById('delete-criterion') != null) { if (document.getElementById('delete-criterion').innerHTML == this.deleteReasons[i][0]) selected = ' selected'; } else { if (this.deleteReasons[i][0] == 'N/A') selected = ' selected '; }			// general var visibleReasoning = this.deleteReasons[i][1].replace(/\[\[(?:.*?\|)(.+?)\]\]/g, '$1'); deleteOptions += '<option value="'+this.deleteReasons[i][0]+': '+this.deleteReasons[i][1]+'"'+selected+' >'+this.deleteReasons[i][0]+': '+visibleReasoning+' '; }		if (document.getElementById('delete-criterion') == null) { var displayTagCommand = 'display: none;'; } else { var displayTagCommand = 'display: block;'; } this.interface.win_content = ''+ ' Perform Speedy Deletion '+ ' Select the reason for deletion from the list. The rationale specified by the tagger is automatically selected. If you select a reason that does not '+ 'match the tag, will be given the option of notifying the tagger. '+					'<select id="deleteReason" style="font-size: 11px; margin-left: 9px; width: 576px;" onchange="'+						'if (document.getElementById(\'delete-criterion\') != null) {'+					'if (csdHController.deleteReasons[document.getElementById(\'deleteReason\').selectedIndex][0] != document.getElementById(\'delete-criterion\').innerHTML) { '+						'if (csdHController.deleteReasons[document.getElementById(\'deleteReason\').selectedIndex][0] == \'N/A\') { document.getElementById(\'notifyTaggerDiv\').style.display = \'none\'; } else { document.getElementById(\'notifyTaggerDiv\').style.display = \'block\'; }'+					'} else {'+						'document.getElementById(\'notifyTaggerDiv\').style.display = \'none\'; '+					'}'+						'} else { document.getElementById(\'notifyTaggerDiv\').style.display = \'none\'; }'+						'if (csdHController.deleteReasons[document.getElementById(\'deleteReason\').selectedIndex][0] == \'N/A\') {'+ 'document.getElementById(\'performDeletionDiv\').style.display = \'none\'; '+ '} else {'+ 'document.getElementById(\'performDeletionDiv\').style.display = \'block\'; '+ '}'+					'">'+deleteOptions+' '+					'<div id="notifyTaggerDiv" style="display: none; margin-top: 10px; font-size: 11px; margin-left: 20px; float: left; vertical-align: middle;">notify tagger of rationale change <input id="notifyTagger"'+csdHController.doNotifyDel+' style="position: relative; top: 3px; " type="checkbox" /> '+					'<div id="performDeletionDiv" style="margin: auto; margin-top: 13px; font-size: 11px; width: 200px; text-align: center; '+displayTagCommand+'">-- <a href="#" onclick="csdHController.deleteDo;">perform speedy deletion</a> -- '+					' '+					'';		this.interface.applyAll;	}	this.deleteDo = function(callback) {		if (!callback) var callback = 0;		switch (callback) {			default:				csdHController.deleteReason = document.getElementById('deleteReason').value + ' (CSDH)';				csdHController.deleteSel = document.getElementById('deleteReason').selectedIndex; csdHController.deleteNotify = document.getElementById('notifyTagger').checked; if (document.getElementById('delete-criterion') == null) { csdHController.allowDelNotify = false; } else { csdHController.allowDelNotify = (csdHController.deleteReasons[csdHController.deleteSel][0] != document.getElementById('delete-criterion').innerHTML); } this.interface.win_content = ''+ ' Working... '+					' Please wait while CSDHelper performs the requested operations. This can take several seconds. '+					' '+					' '+					'';				this.interface.applyAll; if ((csdHController.deleteNotify == true) && (csdHController.allowDelNotify == true)) { document.getElementById('workingStatus').innerHTML += '- Searching for tagger... ';					if (notifyLimit > 10) notifyLimit = 10; csdHController.pageReq = new wa_mediawikiApi; csdHController.pageReq.onCompleteAction = function { csdHController.deleteDo('1'); }; csdHController.pageReq.getPage(wgPageName, notifyLimit + 1, 'content|user'); } else { csdHController.deleteDo('3'); } break; case '1': var tags = 0; csdHController.tagger = ''; for (var i = 0; i < notifyLimit; i ++) { var thisPage = csdHController.pageReq.data['page']['revisions'][i]['content']; // count tags var regTest = /[\s]*\{\{db(?:-?(?:.+?)?|\|(.+))\}\}[\s]*/gi; var k = 1; var count = 0; while (k != null) { k = regTest.exec(thisPage); if (k != null) count ++; }					regTest.lastIndex = 0; // check if we have fewer than last time (1 was added on that rev) if (count < tags) { csdHController.tagger = csdHController.pageReq.data['page']['revisions'][i - 1]['user']; break; } else { tags = count; }				}				if (csdHController.tagger == '') { document.getElementById('workingStatus').innerHTML += '- Could not determine tagger. Moving to deletion... '; csdHController.deleteDo('3'); break; } csdHController.deleteDo('2'); break; case '2': // notify tagger document.getElementById('workingStatus').innerHTML += '- Tagged by \''+csdHController.tagger+'\' - notifying user... ';				// edit summary csdHController.editSummary = 'Notifying about altered speedy deletion rationale (CSDH)'; // message var message =	 '== Altered Speedy Deletion rationale: '+wgPageName.replace(/_/g, ' ')+' == \nHello '+csdHController.tagger+', and thanks for your work patrolling new changes. I am just informing you that '+ 'I have deleted a page you tagged ('+wgPageName.replace(/_/g, ' ')+') under a different criteria, because the one you provided was inappropriate or incorrect. CSD criteria are narrow and specific, '+ 'and the process is more effective if the correct deletion rationale is supplied. Consider reviewing the criteria for speedy deletion. '+					'If you have any queries, please let me know. Thanks again! '+'';				csdHController.notifyReq = new wa_mediawikiApi; csdHController.notifyReq.onCompleteAction = function { csdHController.deleteDo('3'); }; csdHController.notifyReq.editPage('User_talk:'+csdHController.tagger, message, csdHController.editSummary, false, 'appendtext'); break; case '3': // perform the edit document.getElementById('workingStatus').innerHTML += '- Deleting page... ';				csdHController.deleteReq = new wa_mediawikiApi; csdHController.deleteReq.onCompleteAction = function { window.location = redirectAfterDel; csdHController.showcsdHWindow; }; csdHController.deleteReq.performAction('delete', wgPageName, csdHController.deleteReason); break; }	}	this.displayError = function { this.interface.win_content = ''+ ' An error occured... '+					' '+					'';		this.interface.applyAll; }	this.attachLinks = function { this.csdHelperLink						 = new wa_element('li'); this.csdHelperLink.ele_obj.id			= 'ca-speedy'; this.csdHelperLink.ele_obj.innerHTML	= '<a href="#" title="handle speedy deletion">speedy</a>'; this.csdHelperLink.addScriptEvent('click', function { csdHController.showcsdHWindow; }); this.csdHelperLink.attach(document.getElementById('ca-move'), 'before'); }; }

// -- run program function launchCsdHelper { // lib proto if(typeof wa_window !== 'undefined' && typeof wa_document !== 'undefined' && typeof wa_element !== 'undefined') { wa_window.prototype = new wa_document; wa_element.prototype = new wa_document; // init object var obj_csdHelper = new csdHelper; obj_csdHelper.launch; return true; } }

importScript('User:Ale_jrb/Scripts/waLib.js'); $(launchCsdHelper);