User:Jujutacular/closeFPC.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:Jujutacular/closeFPC. |
// See documentation at [[User:Jujutacular/closeFPC]]
// This code is largely based on [[User:Mr.Z-man/closeAFD]]
if (wgPageName.indexOf('Wikipedia:Featured_picture_candidates/') != -1) {
var closeFPC_PageName = wgPageName.replace(/_/g, ' ');
var closeFPC_AJAXnumber = 0;
var isDelist = closeFPC_PageName.replace(/^.*\b(delist)\b.*$/,"$1");
function closeFPC_init() {
if (!wfSupportsAjax()) {
jsMsg('<span style="color:red; font-size:120%">Your browser does not seem to support AJAX, which is required for the closeFPC script.</span>');
return;
}
if (isDelist == "delist") {
jsMsg('<span style="color:red; font-size:120%">Delist nominations are not supported by this script.</span>');
return;
}
form = '<div id="closeFPC_initialform">'+
'<h3>Closing '+closeFPC_PageName+'</h3>'+
'<h4>For promotion:</h4>'+
'<label for="closeFPC_nominator">Nominator: </label><input type="text" id="closeFPC_nominator" name="closeFPC_nominator" /><br>'+
'<label for="closeFPC_nominator2">Nominator 2 (if applicable): </label><input type="text" id="closeFPC_nominator2" name="closeFPC_nominator2" /><br>'+
//'<label for="closeFPC_creator_nonwiki">Creator (if non-Wikipedian): </label><input type="text" id="closeFPC_creator_nonwiki" name="closeFPC_creator_nonwiki" /><br>'+
'<label for="closeFPC_creator_wiki">Creator (if Wikipedian): </label><input type="text" id="closeFPC_creator_wiki" name="closeFPC_creator_wiki" /><br>'+
'<label for="closeFPC_editor">Image editor/Restorer: </label><input type="text" id="closeFPC_editor" name="closeFPC_editor" /><br>'+
'<label for="closeFPC_editor2">Image editor/Restorer 2: </label><input type="text" id="closeFPC_editor2" name="closeFPC_editor2" /><br>'+
'<label for="closeFPC_promoted_file">Promoted file (without "File:"): </label><input type="text" id="closeFPC_promoted_file" name="closeFPC_promoted_file" /><br>'+
'<label for="closeFPC_name">Name of nomination: </label><input type="text" id="closeFPC_name" name="closeFPC_name" /><br>'+
'<label for="closeFPC_cat">Main category: </label><input type="text" id="closeFPC_cat" name="closeFPC_cat" /><br><br>'+
//'<label for="closeFPC_subcat">Subcategory: </label><input type="text" id="closeFPC_subcat" name="closeFPC_subcat" /><br><br>'+
'<label for="closeFPC_reason">Additional closing rationale (optional): </label><input type="text" id="closeFPC_reason" name="closeFPC_reason" /><br>'+
'<input type="button" id="closeFPC_promote_button" name="closeFPC_promote_button" value="Promote" onclick="closeFPC_close(\'promote\')" />'+
'<input type="button" id="closeFPC_nopromote_button" name="closeFPC_nopromote_button" value="No Promote" onclick="closeFPC_close(\'nopromote\')" /></div>';
jsMsg(form);
}
function closeFPC_close(close) {
closetype = close;
var nominator = document.getElementById('closeFPC_nominator').value;
var nominator2 = document.getElementById('closeFPC_nominator2').value;
//var creator_nonwiki = document.getElementById('closeFPC_creator_nonwiki').value;
var creator_wiki = document.getElementById('closeFPC_creator_wiki').value;
var editor = document.getElementById('closeFPC_editor').value;
var editor2 = document.getElementById('closeFPC_editor2').value;
var promoted_file = document.getElementById('closeFPC_promoted_file').value;
var nom_name = document.getElementById('closeFPC_name').value;
var cat = document.getElementById('closeFPC_cat').value;
//var subcat = document.getElementById('closeFPC_subcat').value;
var reason = document.getElementById('closeFPC_reason').value;
var FPClink = '[['+closeFPC_PageName+']]';
var today = new Date();
var monthnames = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
month = monthnames[today.getUTCMonth()];
day = today.getUTCDate();
year = today.getUTCFullYear();
if (reason != '') {
reason = '*'+reason+" ~~"+"~~";
}
jsMsg('<ul id="closeFPC_status"></ul><ul id="closeFPC_finish"></ul>');
document.getElementById('closeFPC_finish').innerHTML += '<span id="closeFPC_finished_wrapper"><span id="closeFPC_finished_main" style="display:none"><li id="closeFPC_done"><b>Done (<a href="/wiki/'+encodeURI(closeFPC_PageName)+'?action=purge" title="'+closeFPC_PageName+'">Reload page</a>)</b></li></span></span>';
var FPCpage = closeFPC_getPageText(closeFPC_PageName);
var isClosed = FPCpage.match(/{{FPCresult\|/);
if (isClosed == "{{FPCresult|") {
jsMsg('<span style="color:red; font-size:120%">It seems that this nomination has already been closed.</span>');
return;
}
token = closeFPC_getToken(true);
if (closetype == "promote") {
// Checks for missing information
if (nominator == '') {
jsMsg('<span style="color:red; font-size:120%">A nominator has not been specified. A nominator is required for promotion.</span>');
return;
}
//if (creator_nonwiki == '' && creator_wiki == '') {
// jsMsg('<span style="color:red; font-size:120%">A creator has not been specified. A creator is required for promotion. Use "Unknown" under non-Wikipedian if creator is unknown.</span>');
// return;
//}
if (promoted_file == '') {
jsMsg('<span style="color:red; font-size:120%">A file name has not been specified. A file name is required for promotion.</span>');
return;
}
if (nom_name == '') {
jsMsg('<span style="color:red; font-size:120%">A name for the nomination has not been specified. A name is required for promotion.</span>');
return;
}
if (cat == '') {
jsMsg('<span style="color:red; font-size:120%">A category for the nomination has not been specified. A category is required for promotion.</span>');
return;
}
// Increments count, adds image, and removes older image at WP:FP
var FP = "Wikipedia:Featured pictures";
var FPpage = closeFPC_getPageText(FP);
if (cat == "Animals") {
FPpage = FPpage.replace(/<!-- start of Animals -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Animals -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Artwork") {
FPpage = FPpage.replace(/<!-- start of Artwork -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Artwork -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Culture, entertainment, and lifestyle") {
FPpage = FPpage.replace(/<!-- start of Culture, entertainment, and lifestyle -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Culture, entertainment, and lifestyle -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Diagrams, drawings, and maps") {
FPpage = FPpage.replace(/<!-- start of Diagrams, drawings, and maps -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Diagrams, drawings, and maps -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Engineering and technology") {
FPpage = FPpage.replace(/<!-- start of Engineering and technology -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Engineering and technology -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Food and drink") {
FPpage = FPpage.replace(/<!-- start of Food and drink -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Food and drink -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Fungi") {
FPpage = FPpage.replace(/<!-- start of Fungi -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Fungi -->/,"<!-- end of "+cat+" -->");
} else if (cat == "History") {
FPpage = FPpage.replace(/<!-- start of History -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of History -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Natural phenomena") {
FPpage = FPpage.replace(/<!-- start of Natural phenomena -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Natural phenomena -->/,"<!-- end of "+cat+" -->");
} else if (cat == "People") {
FPpage = FPpage.replace(/<!-- start of People -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of People -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Places") {
FPpage = FPpage.replace(/<!-- start of Places -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Places -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Plants") {
FPpage = FPpage.replace(/<!-- start of Plants -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Plants -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Sciences") {
FPpage = FPpage.replace(/<!-- start of Sciences -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Sciences -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Space") {
FPpage = FPpage.replace(/<!-- start of Space -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Space -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Vehicles") {
FPpage = FPpage.replace(/<!-- start of Vehicles -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Vehicles -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Other lifeforms") {
FPpage = FPpage.replace(/<!-- start of Other lifeforms -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Other lifeforms -->/,"<!-- end of "+cat+" -->");
} else if (cat == "Other") {
FPpage = FPpage.replace(/<!-- start of Other -->/, "<!-- start of "+cat+" -->[[File:"+promoted_file+"|150px]]\n|");
FPpage = FPpage.replace(/\n\|\[\[File:[^|]+\|150px]]<!-- end of Other -->/,"<!-- end of "+cat+" -->");
} else {
jsMsg('<span style="color:red; font-size:120%">An invalid category has been specified.</span>');
return;
}
var FPnumber = FPpage;
FPnumber = FPnumber.replace(/[^↓]+↓-->'''<onlyinclude>{{val\|/,'');
FPnumber = FPnumber.replace(/}}<\/onlyinclude>'''<!--↓[^↓]+/,'');
FPnumber++;
FPpage = FPpage.replace(/{{val\|[\d]+}}/,"{{val|"+FPnumber+"}}");
closeFPC_editPage(FP, FPpage, token, "Increment count, add [[File:"+promoted_file+"]]");
// Closes nomination as promote
FPCpage = FPCpage.replace(/<!-- additional votes go above this line -->\n/, "<!-- additional votes go above this line -->\n{"+"{FPCresult|Promoted|File:"+promoted_file+"}} --~~"+"~~\n"+reason+"\n");
closeFPC_editPage(closeFPC_PageName, FPCpage, token, "Closed, promoted [[:File:"+promoted_file+"]]");
// Adds image to New featured content
var NFC = "Template:Announcements/New featured content";
var NFCpage = closeFPC_getPageText(NFC);
NFCpage = NFCpage.replace(/<!-- Pictures \(15, most recent first\) -->/,"<!-- Pictures (15, most recent first) -->\n* [[:File:"+promoted_file+"|"+nom_name+"]]");
NFCpage = NFCpage.replace(/\n\* \[\[:File:[^|]+\|[^\]]+]] ?<!-- End of FPs -->/," <!-- End of FPs -->");
closeFPC_editPage(NFC, NFCpage, token, "+[[File:"+promoted_file+"]] to FPs");
/* // Adds image to WP:GO
var GO = "User:Public Juju/GO"; //Fix for final version
var GOpage = closeFPC_getPageText(GO);
//if (GOpage.test("[[:File:")) {
GOpage = GOpage.replace(/\n(\* \[\[:File:[^|]+\|[^\]]+]].+)\n\n/, "\n$1 \n\* [[:File:"+promoted_file+"|"+nom_name+"]] ("+day+" "+month+")\n\n");
closeFPC_editPage(GO, GOpage, token, "+[[File:"+promoted_file+"]] to FPs");
//} else {
//}
*/
// Adds image to FPC thumbs
var thumbs = "Wikipedia:Featured pictures thumbs";
var currentthumbs = closeFPC_getPageText(thumbs);
currentthumbs = currentthumbs.replace(/#REDIRECT \[\[/,'');
currentthumbs = currentthumbs.replace(/]]/,'');
var currentthumbs_page = closeFPC_getPageText(currentthumbs);
currentthumbs_page = currentthumbs_page.replace(/<gallery>/,"<gallery>\nFile:"+promoted_file+"|"+nom_name);
closeFPC_editPage(currentthumbs, currentthumbs_page, token, "+[[File:"+promoted_file+"]]");
// Notifies nominator of promotion
if (nominator != creator_wiki && nominator != editor && nominator != editor2) {
var nominator_talk = "User talk:"+nominator;
var nomtalkpage = closeFPC_getPageText(nominator_talk);
nomtalkpage = nomtalkpage + "\n\n==[["+closeFPC_PageName+"]]==\n{"+"{subst:PromotedFPC|File:"+promoted_file+"}}";
closeFPC_editPage(nominator_talk, nomtalkpage, token, FPClink);
}
// Notifies nominator2 of promotion
if (nominator2 != creator_wiki && nominator2 != editor && nominator2 != editor2) {
var nominator2_talk = "User talk:"+nominator2;
var nom2talkpage = closeFPC_getPageText(nominator2_talk);
nom2talkpage = nom2talkpage + "\n\n==[["+closeFPC_PageName+"]]==\n{"+"{subst:PromotedFPC|File:"+promoted_file+"}}";
closeFPC_editPage(nominator2_talk, nom2talkpage, token, FPClink);
}
// Notifies creator of promotion
if (creator_wiki != '') {
var creator_talk = "User talk:"+creator_wiki;
var creatortalkpage = closeFPC_getPageText(creator_talk);
creatortalkpage = creatortalkpage + "\n\n==[["+closeFPC_PageName+"]]==\n{"+"{subst:UploadedFPC|File:"+promoted_file+"}}";
closeFPC_editPage(creator_talk, creatortalkpage, token, FPClink);
}
// Notifies editor of promotion
if (editor != '') {
var editor_talk = "User talk:"+editor;
var editortalkpage = closeFPC_getPageText(editor_talk);
editortalkpage = editortalkpage + "\n\n==[["+closeFPC_PageName+"]]==\n{"+"{subst:UploadedFPC|File:"+promoted_file+"}}";
closeFPC_editPage(editor_talk, editortalkpage, token, FPClink);
}
// Notifies editor2 of promotion
if (editor2 != '') {
var editor2_talk = "User talk:"+editor2;
var editor2talkpage = closeFPC_getPageText(editor2_talk);
editor2talkpage = editor2talkpage + "\n\n==[["+closeFPC_PageName+"]]==\n{"+"{subst:UploadedFPC|File:"+promoted_file+"}}";
closeFPC_editPage(editor2_talk, editor2talkpage, token, FPClink);
}
closeFPC_informManual();
}
if (closetype == "nopromote") {
// Closes nomination as no promote
FPCpage = FPCpage.replace(/<!-- additional votes go above this line -->\n/, "<!-- additional votes go above this line -->\n{"+"{FPCresult|Not Promoted| }} --~~"+"~~\n"+reason+"\n");
closeFPC_editPage(closeFPC_PageName, FPCpage, token, "Closed, not promoted");
}
// Moves transclusion to 'recently closed' section of WP:FPC
var closeFPC_FPC = "Wikipedia:Featured picture candidates";
var FPClist = closeFPC_getPageText(closeFPC_FPC);
var regexTransclusion = new RegExp("{{"+closeFPC_PageName+"}}\n");
FPClist = FPClist.replace(regexTransclusion,'');
FPClist = FPClist.replace(/<!-- ↓ Under this line, please \(newest at the top\) ↓ -->/,"<!-- ↓ Under this line, please (newest at the top) ↓ -->\n{{"+closeFPC_PageName+"}}");
closeFPC_editPage(closeFPC_FPC, FPClist, token, "Closed [["+closeFPC_PageName+"]]");
// Archives nomination
var closeFPC_log = "Wikipedia:Featured picture candidates/"+month+"-"+year; // Change for final to be correct
var FPClog = closeFPC_getPageText(closeFPC_log);
FPClog = FPClog+"\n{"+"{"+closeFPC_PageName+"}}";
closeFPC_editPage(closeFPC_log, FPClog, token, "Archiving "+FPClink);
document.getElementById('closeFPC_finished_main').style.display = '';
}
function closeFPC_getPageText(title) {
document.getElementById('closeFPC_status').innerHTML += '<li id="closeFPC_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('closeFPC_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('closeFPC_get'+escape(title)).innerHTML = 'Got <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a>';
return pagetext;
}
var GOtitle = "Wikipedia:Goings on";
var FPtitle = "Wikipedia:Featured pictures";
function closeFPC_informManual() {
document.getElementById('closeFPC_status').innerHTML += '<li id="closeFPC_manual">*** You must manually make edits to <a href="/wiki/'+encodeURI(GOtitle)+'" GOtitle="'+GOtitle+'">'+GOtitle+'</a>, the proper sub-page of <a href="/wiki/'+encodeURI(FPtitle)+'" FPtitle="'+FPtitle+'">'+FPtitle+'</a>, and add the {{FeaturedPicture}} template to the image description page ***</li>';
}
function closeFPC_getToken(show) {
if (show) {
document.getElementById('closeFPC_status').innerHTML += '<li id="closeFPC_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(closeFPC_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('closeFPC_gettoken').innerHTML = 'Got token';
}
return token;
}
function closeFPC_editPage(title, newtext, token, summary) {
document.getElementById('closeFPC_finished_wrapper').innerHTML = '<span id="closeFPC_AJAX_finished_'+closeFPC_AJAXnumber+'" style="display:none">' + document.getElementById('closeFPC_finished_wrapper').innerHTML + '</span>';
var func_id = closeFPC_AJAXnumber;
closeFPC_AJAXnumber++;
document.getElementById('closeFPC_status').innerHTML += '<li id="closeFPC_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&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('closeFPC_edit'+escape(title)).innerHTML = 'Saved <a href="/wiki/'+encodeURI(title)+'" title="'+title+'">'+title+'</a>';
} else {
document.getElementById('closeFPC_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('closeFPC_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('closeFPC_AJAX_finished_'+func_id).style.display = '';
delete req;
}
}
req.send(params)
}
function closeFPC_addLink() {
addPortletLink("p-cactions", "javascript:closeFPC_init()", "Close FPC", "ca-closeFPC", "Close FPC");
}
addOnloadHook(closeFPC_addLink);
}