User:SD0001/RFUD-helper.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:SD0001/RFUD-helper. |
/**
* ****** STILL UNDER DEVELOPMENT ******
*
* Script to easily respond to requests made at [[Wp:Requests for undeletion]]
* (WP:RFUD). When accepting a request, the script would do the following:
* - Post a response below the request
* - Undelete the page
* - Remove any deletion tags from the page
* - Undelete the talk page if it existed
* - If is a WP/WT:AFC subpage, move it to draft namespace
* - Offer to userfy the page instead of restoring to source
*
*/
// <nowiki>
$( function() {
if (mw.config.get('wgPageName') !== 'Wikipedia:Requests_for_undeletion') {
return;
}
// Load morebits.js library if not already present
importScript('Mediawiki:Gadget-Morebits.js');
var rfud = {};
rfud.config = {
advert: ' ([[User:SD0001/rfud-helper.js|rfud-helper]])',
version: '1.0.0'
};
var pageName;
$('h2').next().each(function(i,e) {
var a = $(e).find('li .sysop-show a');
var link = '<a class=rfud-undel>undelete</a>'
a.after(' | ' + link);
});
rfud.callback = function(e) {
pageName = e.target.parentElement.firstChild.nextElementSibling.title.slice(17).replace(/_/g,' ');
console.log(pageName);
var Window = new Morebits.simpleWindow( 700, 350 );
//Window.setTitle( "Undelete page" );
Window.setScriptName( "RFUD helper" );
Window.addFooterLink( "Administrator instructions", "Wikipedia:Requests for undeletion/Administrator instructions" );
// Window.addFooterLink( "Script documentation", "WP:RFUDHELPER" );
var form = new Morebits.quickForm( rfud.evaluate );
var field = form.append({
type: 'field',
label: 'Response'
});
field.append({
type: 'radio',
name: 'response',
list: [
{
label: 'Accept',
value: 'accept',
checked: true
},
{
label: 'Decline',
value: 'decline'
}
],
event: rfud.toggleResponse
});
form.append( {
type: 'field',
label: 'Work area',
name: 'work_area'
} );
// code here is copied off [[Mediawiki:Gadget-Twinklexfd.js]]
var previewlink = document.createElement( 'a' );
$(previewlink).click(function(){
rfud.preview(result); // |result| is defined below
});
previewlink.style.cursor = "pointer";
previewlink.textContent = 'Preview';
form.append( { type: 'div', id: 'rfudpreview', label: [ previewlink ] } );
form.append( { type: 'div', id: 'rfud-previewbox', style: 'display: none' } );
form.append( { type:'submit' } );
var result = form.render();
Window.setContent( result );
Window.display();
result.previewer = new Morebits.wiki.preview($(result).find('div#rfud-previewbox').last()[0]);
// We must init the controls
var evt = document.createEvent( "Event" );
evt.initEvent( 'change', true, true );
result.response[0].dispatchEvent( evt );
};
rfud.preview = function(result) {
var templatetext = result.template.value.replace(/^\{\{/,'{{subst:') + ' ' + result.comments.value + ' ~~~~';
result.previewer.beginRender(templatetext, "WP:RFUD"); // Force wikitext
}
rfud.toggleResponse = function(e) {
//var form = e.target.form;
var work_area;
if (e.target.value === 'accept') {
work_area = new Morebits.quickForm.element({
type: 'field',
label: 'Accept request',
name: 'work_area'
});
var title = new mw.Title(pageName);
if (! title.isTalkPage()) {
work_area.append({
type: 'checkbox',
list: [ {
label: 'Undelete talk page',
name: 'undeletetalk',
value: 'undeletetalk',
checked: true
} ]
});
}
if (pageName.startsWith('Wikipedia talk:Articles for creation/')) {
work_area.append({
type: 'checkbox',
list: [ {
label: 'Move to draft namespace',
name: 'movetodraft',
value: 'movetodraft',
checked: true
} ]
});
}
} else if (e.target.value === 'decline') {
work_area = new Morebits.quickForm.element({
type: 'field',
label: 'Decline request',
name: 'work_area'
});
}
var template_responses = work_area.append({
type: 'select',
label: 'Select a templated response',
name: 'template',
});
$.each(rfud.template_responses[e.target.value], function(i, e) {
template_responses.append({ type: 'option', value: i, label: i + ': ' + e });
});
work_area.append({
type: 'textarea',
label: 'Comments',
tooltip: 'Any comments in addition to the template response',
name: 'comments'
});
var old_area = $("[name=work_area]")[0];
var result = work_area.render();
old_area.replaceWith( result );
};
rfud.template_responses = {
accept: {
'' : "No template response",
'{{UND|Done}}' : "Done",
'{{UND|prod}}' : "contested proposed deletion",
'{{UND|g13}}' : "draft deleted under G13",
'{{UND|afc}}' : "for G13s where {{AFC submission}} was used and the draft was submitted and declined",
'{{UND|afc-ns}}' : "for G13s where {{AFC submission}} was used and where the draft was never submitted",
'{{UND|g13-draft}}' : "for G13s of draft namespace pages never part of the AfC process"
},
decline: {
'' : "No template response",
'{{UND|notdone}}' : "Not done",
'{{UND|notdone2}}' : "Not done and will not be done",
'{{UND|doesnotexist}}' : "No deleted page with this name",
'{{UND|notdonecompany}}' : "Company article failing NCORP",
'{{UND|notdoneperson}}' : "Biographical article failing NBIO",
'{{UND|g11}}' : "Blatant advertisement",
'{{UND|discussion}}' : "Article deleted at a discussion", //needs subgroup
'{{UND|csd}}' : "Article deleted per CSD criteria", // needs subgroup
'{{UND|copyvio}}' : "Copyright violation" //
}
};
rfud.evaluate = function(e) {
var form = e.target.form;
var undeletetalk = form.undeletetalk && form.undeletetalk.checked;
var movetodraft = form.movetodraft && form.movetodraft.checked;
var template = form.template.value;
var comments = form.comments.value;
var p = new Morebits.wiki.page(pageName);
p.setEditSummary('Undelete per request at [[WP:RFUD]]' + rfud.config.advert);
p.undeletePage(function(e) {
// Undelete talk page
if (undeletetalk) {
// code here is copied off [[Mediawiki:Gadget-Twinklebatchdelete.js]], written by [[User:Amorymeltzer]]
var talkpagename = new mw.Title(pageName).getTalkPage().getPrefixedText();
var query = {
'action': 'query',
'prop': 'deletedrevisions',
'drvprop': 'ids',
'drvlimit': 1,
'titles': talkpagename
};
var wikipedia_api = new Morebits.wiki.api( 'Checking talk page for deleted revisions', query, function talk_undel( apiobj ) {
var xml = apiobj.responseXML;
var exists = $(xml).find('page:not([missing])').length > 0;
var delrevs = $(xml).find('rev').attr('revid');
if( exists || !delrevs ) {
// page exists or has no deleted revisions; forget about it
return;
}
var talkpage = new Morebits.wiki.page(apiobj.query.titles, "Undeleting talk page of " + pageName);
talkpage.setEditSummary('Undeleting [[Help:Talk page|talk page]] of "' + pageName + '"' + rfud.config.advert);
talkpage.undeletePage();
} );
wikipedia_api.post();
}
// Move WT:AFC pages to Draft: space
if (movetodraft) {
p.setMoveDestination(pageName.replace('Wikipedia talk:Articles for creation/','Draft:'));
p.setEditSummary('Moving to new location for drafts' + rfud.config.advert);
p.movePage();
}
// Remove deletion tags
p.load(function(e) {
var pageText = e.getPageText();
var newPageText = pageText.replace(
// Regex courtesy: [[Mediawiki:Gadget-friendlytag.js]]
new RegExp(
// leading whitespace
'^\\s*' +
// capture template(s)
'(?:((?:\\s*' +
// AfD is special, as the tag includes html comments before and after the actual template
'(?:<!--.*AfD.*\\n\\{\\{Article for deletion\\/dated.*\\}\\}\\n<!--.*\\n<!--.*AfD.*(?:\\s*\\n))?|' + // trailing whitespace/newline needed since this subst's a newline
// begin template format
'\\{\\{\\s*(?:' +
// CSD
'db|delete|db-.*?|speedy deletion-.*?|' +
// PROD
'(?:proposed deletion|prod blp)\\/dated\\n(?:\\s+\\|(?:concern|user|timestamp|help).*)+|' +
// sometimes under a CSD or AfD
'|salt|proposed deletion endorsed' +
// end main template name, optionally with a number (such as redirect2)
')\\d*\\s*' +
// template parameters
'(\\|(?:\\{\\{[^{}]*\\}\\}|[^{}])*)?' +
// end template format
'\\}\\})+' +
// end capture
'(?:\\s*\\n)?)' +
// trailing whitespace
'\\s*)?',
'i'), ''
);
if (newPageText !== pageText) {
p.setPageText(pageText);
p.setEditSummary('Removing deletion tags from undeleted page' + rfud.config.advert);
p.save();
}
});
});
};
$('.rfud-undel').click(rfud.callback);
} );
// </nowiki>