User:Timotheus Canens/massedit.js

///Tim's Mass Edit Tool

/// Adapted from User:Animum/massdelete.js

function doMassEdit() {

document.getElementById("wpMassEditSubmit").disabled = true;

var articles = document.getElementById("wpMassEditPages").value.split("\n");

if(articles.length == 0) return;

var newtext = document.getElementById("wpMassEditText1").value;

var text2 = document.getElementById("wpMassEditText2").value;

var wpMassEditType = document.getElementById("wpMassEditType").value, wpMassEditSummary = document.getElementById("wpMassEditSummary").value, edited = 0, failed = new Array(), error = new Array();

var wpMassEditMinor = document.getElementById("wpMassEditMinor").checked;

for(i=0;i

var article = articles[i];

if(article.length > 0) {

var req = new XMLHttpRequest();

req.open("GET", mw.config.get('wgScriptPath') + "/api.php?format=json&action=query&prop=info&meta=tokens&type=csrf&titles=" + encodeURIComponent(article), false);

req.send(null);

var query = eval("(" + req.responseText + ")").query;

var edittoken = query.tokens.csrftoken;

var response = query.pages;

for(var index in response) {

var info = response[index];

var postdata = "format=json"

+ "&action=edit&watchlist=nochange"

+ "&title=" + encodeURIComponent(article)

+ "&summary=" + encodeURIComponent(wpMassEditSummary)

+ "&token=" + encodeURIComponent(edittoken);

if(wpMassEditMinor)

postdata += "&minor=1";

else

postdata += "¬minor=1";

if(wpMassEditType == "prepend"){

postdata += "&prependtext=" + encodeURIComponent(newtext + "\n");

}

else if(wpMassEditType == "append"){

postdata += "&appendtext=" + encodeURIComponent("\n" + newtext);

}

else if(wpMassEditType == "replacepage"){

postdata += "&text=" + encodeURIComponent(newtext);

}

else if(wpMassEditType == "replacetext" || wpMassEditType == "replacetextg" || wpMassEditType == "bothpend"){

var pagetext = gettext(article);

if(wpMassEditType == "replacetextg"){

newtext = newtext.replace(/([.*+?|(){}\[\]\\])/g, "\\$1");

pagetext = pagetext.replace(new RegExp(newtext, "g"), text2);

}

else if(wpMassEditType == "replacetext"){

pagetext = pagetext.replace(newtext, text2);

}

else

pagetext = newtext + pagetext + text2;

postdata += "&text=" + encodeURIComponent(pagetext);

}

var req = new XMLHttpRequest();

req.open("POST", mw.config.get('wgScriptPath') + "/api.php", false);

req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

req.setRequestHeader("Content-length", postdata.length);

req.send(postdata);

if(eval("(" + req.responseText + ")").edit ) { //If edited, update the count and the button.

edited++;

document.getElementById("wpMassEditSubmit").value = "(" + edited + ")";

} else { //If not edited, add the title to the "failed" array and a description of the error to the "error" array.

failed.push(article);

error.push(eval("(" + req.responseText + ")").error.info);

}

}

}

if(!articles[i+1]) {

document.getElementById("wpMassEditSubmit").value = "Done (" + edited + ")";

if(failed.length > 0) {

var linkedList = "";

for(x=0; x

linkedList += "

  • " + failed[x] + ": " + error[x] + "
  • "; //Links the titles in the "failed" array

    }

    document.getElementById("wpMassEditFailedContainer").innerHTML += '
    Failed edits:

      ' + linkedList + '
    ';

    }

    }

    }

    }

    function gettext(title){

    var req = new XMLHttpRequest();

    req.open("GET", mw.config.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") {

    delete req;

    return '';

    }

    var pagetext = response['query']['pages'][pageid]['revisions'][0]['*'];

    return pagetext;

    }

    function masseditform() {

    var bodyContent;

    switch (mw.config.get('skin')) {

    case 'modern':

    bodyContent = 'mw_contentholder';

    break;

    case 'cologneblue':

    bodyContent = 'article';

    break;

    case 'vector':

    case 'monobook':

    case 'vector':

    default:

    bodyContent = 'bodyContent';

    break;

    }

    document.getElementsByTagName("h1")[0].textContent = "Tim's mass edit tool";

    document.title = "Tim's mass-editing tool - Wikipedia, the free encyclopedia";

    document.getElementById(bodyContent).innerHTML = '

    From Wikipedia, the free encyclopedia



    '

    + '

    '

    + 'If you abuse this tool, it\'s your fault, not mine.'

    + '

    '

    + '

    '

    + 'Pages to edit (one on each line, please):
    '

    + ''

    + 'Text 1 (see below):
    '

    + ''

    + 'Text 2 (see below):
    '

    + ''

    + '

    '

    + '

    '

    + '

    '

    + '

    '

    + '

    '

    + '

    '

    + '

    '

    + '

    '

    + '';

    }

    var massedit_whitelist = ["Sven Manguard", "DeltaQuad.alt", "T. Canens"];

    if(mw.config.get("wgNamespaceNumber") == -1 && (mw.config.get("wgTitle").toLowerCase() == "massedit") &&

    (/sysop/.test(mw.config.get("wgUserGroups")) || massedit_whitelist.indexOf(mw.config.get("wgUserName")) != -1 )) $(masseditform);

    Edit type:
    Edit summary:
    Mark edit as minor: