User:Flatscan/rescueTag.js

// test for article namespace if (wgNamespaceNumber == 0) {

const rescueTag_regexpAfdm = new RegExp('\{\{Article for deletion/dated\\|page=[^|]*'); const rescueTag_regexpAfdmPrefixLength = 34; const rescueTag_regexpRescue = new RegExp('\{\{\\s*[Rr]escue\\s*(\\|.*?)?\}\}'); const rescueTag_afdPrefix = "Wikipedia:Articles for deletion/";

var rescueTag_headerText; var rescueTag_done = false;

function rescueTag_init { if (!wfSupportsAjax) { jsMsg(' Your browser does not seem to support AJAX, which is required for the rescueTag script. '); return; } else if (rescueTag_done) { jsMsg('Rescue tag already applied. Try reloading the page.'); return; }

// load again, handle delay between page load and tab click rescueTag_headerText = rescueTag_getHeaderText(wgPageName); if (!rescueTag_test(rescueTag_headerText)) { jsMsg('Rescue tag is not appropriate – no {'+'{Article for deletion/dated}} found or {'+'{Rescue}} already placed. Try reloading the page.'); return; }

form = ''+ ' Rescue tag '+ 'Tag rationale (optional): '+ ' ';

jsMsg(form); }

function rescueTag_commit { afdpage = rescueTag_regexpAfdm.exec(rescueTag_headerText)[0]; afdpage = afdpage.substr(rescueTag_regexpAfdmPrefixLength);

rescueTag_headerText = rescueTag_headerText.replace(   "-->\n",    "-->\n{"+"{Rescue|page="+afdpage+"}}\n"  );

esTag = '{'+'{Rescue}}'; esNotification = '{'+'{Afdrescue}}'; reason = document.getElementById('rescueTag_reason').value; if (reason.length == 0) { esTag += ', '+rescueTag_afdPrefix+afdpage+''; } else { esTag += ', ' + reason; esNotification += ', ' + reason; }

token = rescueTag_getToken; rescueTag_commitEdit(wgPageName, token, esTag, '&notminor=1&section=0&text=' + encodeURIComponent(rescueTag_headerText)); rescueTag_commitEdit(rescueTag_afdPrefix+afdpage, token, esNotification, '&notminor=1&appendtext=' + encodeURIComponent('{'+'{subst:Afdrescue}}'));

rescueTag_done = true; jsMsg('Rescue tag applied and notification posted.');

// force reload location.reload; }

function rescueTag_test(headerText) { if (!rescueTag_regexpAfdm.test(headerText)) { return false; } else if (rescueTag_regexpRescue.test(headerText)) { return false; } return true; }

function rescueTag_getHeaderText(pageName) { var req = sajax_init_object; req.open("GET", wgScriptPath + "/api.php?action=query&prop=revisions&rvprop=content&rvsection=0&format=json&indexpageids=1&titles="+encodeURIComponent(pageName), false); req.send(null); var response = eval('(' + req.responseText + ')'); pageid = response['query']['pageids'][0]; if (pageid == "-1") { delete req; return ''; } pagetext = response['query']['pages'][pageid]['revisions'][0]['*']; delete req; return pagetext; }

function rescueTag_getToken { var req = sajax_init_object; req.open("GET", wgScriptPath + "/api.php?action=query&prop=info&indexpageids=1&intoken=edit&format=json&titles="+encodeURIComponent(mw.config.get('wgPageName')), false); req.send(null); var response = eval('(' + req.responseText + ')'); pageid = response['query']['pageids'][0]; token = response['query']['pages'][pageid]['edittoken']; delete req; return token; }

function rescueTag_commitEdit(title, token, summary, textParams) { var req = sajax_init_object; var params = "action=edit&format=json&token="+encodeURIComponent(token)+"&title="+encodeURIComponent(title)+"&summary="+encodeURIComponent(summary)+textParams; 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") { // success } else { alert('Failure on ' + title + '; Error info:' +response['error']['code'] + ' : ' + response['error']['info']); }     }      catch(err) { alert('Failure on ' + title + '; Unspecified error.'); }     delete req; } }  req.send(params); }

function rescueTag_testAndAddLink { rescueTag_headerText = rescueTag_getHeaderText(wgPageName); if (rescueTag_test(rescueTag_headerText)) { mw.util.addPortletLink("p-cactions", "javascript:rescueTag_init", "Rescue", "ca-rescue", "Rescue tag"); } } $(rescueTag_testAndAddLink); }