User:Mr.Z-man/closeDR.js
Jump to navigation
Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
Documentation for this user script can be added at User:Mr.Z-man/closeDR. |
- Report page listing warnings and errors.
// See [[w:en:User:Mr.Z-man/closeAFD]] for documentation
if (wgPageName.indexOf('Commons:Deletion_requests/') != -1) {
var closeDR_PageName = wgPageName.replace(/_/g, ' ');
var closeDR_isAdmin = (wgUserGroups.toString().indexOf('sysop') != -1);
var closeDR_AJAXnumber = 0;
function closeDR_init() {
if (!wfSupportsAjax()) {
jsMsg('<span style="color:red; font-size:120%">Your browser does not seem to support AJAX, which is required for the closeDR script.</span>');
return;
}
form = '<div id="closeDR_initialform">'+
'<h3>Closing '+closeDR_PageName+'</h3>'+
'<label for="closeDR_reason">Additional closing rationale (optional):</label><input type="text" id="closeDR_reason" name="closeDR_reason" />'+
'<label for="closeDR_speedy">Speedy:</label><input type="checkbox" id="closeDR_speedy" name="closeDR_speedy" /><br /><br />'+
'<input type="button" id="closeDR_delete_button" name="closeDR_delete_button" value="Deleted" onclick="closeDR_close(\'Deleted\')" />'+
'<input type="button" id="closeDR_keep_button" name="closeDR_keep_button" value="Keep" onclick="closeDR_close(\'Kept\')" />'+
'<input type="button" id="closeDR_other_button" name="closeDR_other_button" value="Other" onclick="closeDR_other()" /><br />'+
'<input type="hidden" value="0" id="closeDR_dodelete" name="closeDR_dodelete" /></div><div id="closeDR_extra"></div>';
jsMsg(form);
if (!closeDR_isAdmin) {
document.getElementById('closeDR_delete_button').disabled = true;
document.getElementById('closeDR_deleteredir').disabled = true;
}
}
function closeDR_other() {
document.getElementById('closeDR_extra').innerHTML += '<br /><br /><label for="closeDR_otherclose">Other: </label><input type="text" id="closeDR_otherclose" name="closeDR_otherclose" />'+
'<input type="button" id="closeDR_other_delete_button" name="closeDR_other_delete_button" value="Delete article" onclick="closeDR_otherdelete()" />'+
'<input type="button" id="closeDR_other_nodelete_button" name="closeDR_other_nodelete_button" value="Don\'t delete" onclick="closeDR_otherkeep()" />';
if (!closeDR_isAdmin) {
document.getElementById('closeDR_other_delete_button').disabled = true;
}
}
function closeDR_otherdelete() {
document.getElementById('closeDR_dodelete').value = 1;
close = document.getElementById('closeDR_otherclose').value;
closeDR_close(close);
}
function closeDR_otherkeep() {
close = document.getElementById('closeDR_otherclose').value;
closeDR_close(close);
}
function closeDR_close(close) {
closetype = close;
var dodelete = false;
if (closetype == "delete" || document.getElementById('closeDR_dodelete').value == 1) {
dodelete = true;
}
var reason = document.getElementById('closeDR_reason').value;
if (reason != '') {
reason = ' '+reason;
}
if (document.getElementById('closeDR_speedy').checked == true) {
close = "speedy "+close;
}
jsMsg('<ul id="closeDR_status"></ul><ul id="closeDR_finish"></ul>');
document.getElementById('closeDR_finish').innerHTML += '<span id="closeDR_finished_wrapper"><span id="closeDR_finished_main" style="display:none"><li id="closeDR_done"><b>Done (<a href="/wiki/'+encodeURI(closeDR_PageName)+'?action=purge" title="'+closeDR_PageName+'">Reload page</a>)</b></li></span></span>';
var DRpage = closeDR_getPageText(closeDR_PageName);
DRpage = "{"+"{delh}}"+ DRpage + "\n ---- '''"+close+"'''."+reason+' ~~'+'~~\n' + '{'+'{delf}}';
token = closeDR_getToken(true);
pagetitle = wgTitle.substring(wgTitle.indexOf('/')+1);
debatename = pagetitle;
closeDR_editPage(closeDR_PageName, DRpage, token, "Closing debate, result was " + close);
var DRlink = '[['+closeDR_PageName+']]';
if (dodelete) {
closeDR_deletePage(pagetitle, encodeURIComponent(token), DRlink, false, false);
closeDR_deletePage("Talk:"+pagetitle, encodeURIComponent(token), DRlink, false, false);
}
var articlepage = ''
if (closetype != "delete" && !dodelete ) {
articlepage = closeDR_getPageText(pagetitle);
articlepage = articlepage.replace(/\{\{\s*delete\s*\|\s*[^(}})]*\}\}/ig, '');
}
if (!dodelete) {
closeDR_editPage(pagetitle, articlepage, token, DRlink + " closed as " + close);
}
document.getElementById('closeDR_finished_main').style.display = '';
}
function closeDR_getPageText(title) {
document.getElementById('closeDR_status').innerHTML += '<li id="closeDR_get'+escape(title)+'">Getting <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a></li>';
var req = sajax_init_object();
req.open("GET", wgScriptPath + "/api.php?action=query&prop=revisions&rvprop=content&format=json&indexpageids=1&titles="+encodeURIComponent(title), false);
req.send(null);
var response = eval('(' + req.responseText + ')');
pageid = response['query']['pageids'][0];
if (pageid == "-1") {
document.getElementById('closeDR_get'+escape(title)).innerHTML = '<a class="new" href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a> does not exist';
delete req;
return '';
}
pagetext = response['query']['pages'][pageid]['revisions'][0]['*'];
delete req;
document.getElementById('closeDR_get'+escape(title)).innerHTML = 'Got <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a>';
return pagetext;
}
function closeDR_getToken(show) {
if (show) {
document.getElementById('closeDR_status').innerHTML += '<li id="closeDR_gettoken">Getting token</li>';
}
var req = sajax_init_object();
req.open("GET", wgScriptPath + "/api.php?action=query&prop=info&indexpageids=1&intoken=edit&format=json&titles="+encodeURIComponent(closeDR_PageName), false);
req.send(null);
var response = eval('(' + req.responseText + ')');
pageid = response['query']['pageids'][0];
token = response['query']['pages'][pageid]['edittoken'];
delete req;
if (show) {
document.getElementById('closeDR_gettoken').innerHTML = 'Got token';
}
return token;
}
function closeDR_editPage(title, newtext, token, summary) {
document.getElementById('closeDR_finished_wrapper').innerHTML = '<span id="closeDR_AJAX_finished_'+closeDR_AJAXnumber+'" style="display:none">' + document.getElementById('closeDR_finished_wrapper').innerHTML + '</span>';
var func_id = closeDR_AJAXnumber;
closeDR_AJAXnumber++;
document.getElementById('closeDR_status').innerHTML += '<li id="closeDR_edit'+escape(title)+'">Editing <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a></li>';
var req = sajax_init_object();
var params = "action=edit&format=json&token="+encodeURIComponent(token)+"&title="+encodeURIComponent(title)+"&text="+encodeURIComponent(newtext)+"¬minor=1&unwatch=1&summary="+encodeURIComponent(summary);
url = wgScriptPath + "/api.php";
req.open("POST", url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
response = eval('(' + req.responseText + ')');
try {
if (response['edit']['result'] == "Success") {
document.getElementById('closeDR_edit'+escape(title)).innerHTML = 'Saved <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a>';
} else {
document.getElementById('closeDR_edit'+escape(title)).innerHTML = '<div style="color:red"><b>Edit failed on <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a></b></div>. Error info:' +response['error']['code'] + ' : ' + response['error']['info'];
}
}
catch(err) {
document.getElementById('closeDR_edit'+escape(title)).innerHTML = '<div style="color:red"><b>Edit failed on <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a></b></div>';
}
document.getElementById('closeDR_AJAX_finished_'+func_id).style.display = '';
delete req;
}
}
req.send(params)
}
function closeDR_deletePage(title, token, summary, isredirect, retry) {
document.getElementById('closeDR_finished_wrapper').innerHTML = '<span id="closeDR_AJAX_finished_'+closeDR_AJAXnumber+'" style="display:none">' + document.getElementById('closeDR_finished_wrapper').innerHTML + '</span>';
var func_id = closeDR_AJAXnumber;
closeDR_AJAXnumber++;
if (!retry) {
document.getElementById('closeDR_status').innerHTML += '<li id="closeDR_delete'+escape(title)+'">Deleting <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a></li>';
}
var req = sajax_init_object();
var params = "action=delete&format=json&token="+token+"&title="+encodeURIComponent(title)+"&reason="+encodeURIComponent(summary);
url = wgScriptPath + "/api.php";
req.open("POST", url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
response = eval('(' + req.responseText + ')');
try {
if (response['delete']['title']) {
document.getElementById('closeDR_delete'+escape(title)).innerHTML = 'Deleted <a class="new" href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a>';
}
}
catch(err) {
if (response['error']['code'] == "missingtitle") {
document.getElementById('closeDR_delete'+escape(title)).innerHTML = '<a class="new" href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a> does not exist';
} else {
if (retry) {
document.getElementById('closeDR_delete'+escape(title)).innerHTML = '<span style="color:red"><b>Deletion error on <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a>. Error info:' +response['error']['code'] + ' : ' + response['error']['info'] + '</b></span>';
}
}
}
document.getElementById('closeDR_AJAX_finished_'+func_id).style.display = '';
delete req;
}
}
req.send(params)
}
function closeDR_addLink() {
mw.util.addPortletLink("p-cactions", "javascript:closeDR_init()", "Close", "ca-closeDR", "Close DR");
}
$(closeDR_addLink);
}