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.
//Imported from enwiki

importScript('User:Animum/urlparameters.js');
importScript('User:Animum/formatresponse.js');
 
function makeLink(color, link, text, br) {
    var span = document.createElement("span");
    span.id = "delete-revision";
    var b = document.createElement("b");
    b.appendChild(document.createTextNode(" ["));
    span.appendChild(b);
    var na = document.createElement("a");
    na.href = link;
    var span2 = document.createElement("span");
    span2.style.color = color;
    span2.style.fontWeight = "bold";
    span2.appendChild(document.createTextNode(text));
    na.appendChild(span2);
    span.appendChild(na);
    var b2 = document.createElement("b");
    b2.appendChild(document.createTextNode("]"));
    span.appendChild(b2);
 
    return span;
}
 
function deleteRevision(title, timestamp) {
    var req = sajax_init_object();
    req.open("GET", wgScriptPath + "/api.php?format=json&action=query&prop=info&inprop=protection&titles=" + title, false);
    req.send(null);
    var info = formatResponse(eval("(" + req.responseText + ")"));
    var protlevels = {};
    if(info.protection) {
        for(a=0;a<2;a++) {
            if(info.protection[a]) {
                var protection = info.protection[a];
                protlevels[protection.type] = protection.level;
                protlevels["expiry"] = protection.expiry;
            }
        }
    }
    var addition = new Date();
    addition = new Date(addition.getTime() + 1000*25);
    if(protlevels.edit || protlevels.move) { 
        document.cookie = "protectionparams=" + (protlevels.edit ? "mwProtect-level-edit=" + protlevels.edit : "")
                        + (protlevels.move ? (protlevels.edit ? "&" : "") + "mwProtect-level-move=" + protlevels.move : "")
                        + "&mwProtect-reason=" + encodeURIComponent("Restoring original protection levels")
                        + (protlevels.expiry == "infinity" ? "" : "&mwProtect-expiry=" + protlevels.expiry)
                        + "; path=/; expires=" + addition.toGMTString() + ";";
    }
    document.cookie = "protectiontitles=" + title + "; path=/; expiry=" + addition.toGMTString() + ";";
    var link = wgScript + "?title=Special:Undelete/" + title + "&page=" + title + "&norestore=";
    var req = sajax_init_object();
    req.open("GET", wgScript + "?title=Special:Undelete/" + title, false);
    req.send(null);
    var deletedrevs = req.responseText.split("<fieldset>")[1];
    if(deletedrevs) {
        deletedrevs2 = deletedrevs.split("<ul>")[1].split("</ul>")[0].split("<li>");
        for(x=1;x<deletedrevs2.length;x++) {
            if(deletedrevs2[x].split("</li>")[0].split('name="ts')[1]) {
                link += deletedrevs2[x].split("</li>")[0].split('<input name="ts')[1].split('"')[0] + "|";
            }
        }
    }
    var req = sajax_init_object();
    req.open("GET", wgScriptPath + "/api.php?format=json&action=query&prop=info&intoken=delete&titles=" + title, false);
    req.send(null);
    var deletetoken = formatResponse(eval("(" + req.responseText + ")")).deletetoken;
    var reason = prompt("Optional reason (leave blank for default):");
    var postdata = "wpReason=" + (reason.length > 0 ? reason : encodeURIComponent("Deleting to expunge a revision from this page's history."))
                 + "&wpEditToken=" + encodeURIComponent(deletetoken);
    var req = sajax_init_object();
    req.open("POST", wgScript + "?title=" + title + "&action=delete", true);
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.setRequestHeader("Content-length", postdata.length);
    req.send(postdata);
    req.onreadystatechange = function() {
        if(req.status == 200 && req.readyState == 4) {
            location.href = link + timestamp;
        }
    }
}
 
$(function() {
    if(/[?&]diff=/.test(location.href)) {
        if(document.getElementById("mw-diff-ntitle1")) {
            var article = document.getElementById("mw-diff-ntitle1").getElementsByTagName("a")[0].href.split("?title=")[1].split("&")[0];
            var oldid = document.getElementById("mw-diff-ntitle1").getElementsByTagName("a")[0].href.split("oldid=")[1].split("&")[0];
            var req = sajax_init_object();
            req.open("GET", wgScriptPath + "/api.php?format=json&action=query&prop=revisions&rvlimit=2&rvstartid=" + oldid + "&titles=" + article, false);
            req.send(null);
            var info = formatResponse(eval("(" + req.responseText + ")"));
            if(info.revisions) {
                var timestamp = info.revisions[0].timestamp.replace(/[^0-9]/g, "");
 
                var link = makeLink("#FF7133", "javascript:deleteRevision(\"" + article + "\", '" + timestamp + "')", "delete revision", true);
                getElementsByClassName(document, "td", "diff-ntitle")[0].insertBefore(link, document.getElementById("mw-diff-ntitle4"));
            }
        }
    }
    if(wgPageName == "Special:Undelete") {
        if(UrlParameters["norestore"]) {
            var inputs = document.getElementsByTagName("input");
            for(i=0;i<inputs.length;i++) {
                var input = inputs[i];
                if(input.type == "checkbox") {
                    input.checked = true;
                }
                var norestore_timestamps = UrlParameters["norestore"].split("|");
                for(n=0;n<norestore_timestamps.length;n++) {
                    if(input.name.indexOf("ts" + norestore_timestamps[n]) != -1 || input.checked == false) {
                        input.checked = false;
                    }
                }
            }
            document.getElementById("wpComment").value = "Expunging revision from page history.";
            document.getElementById("mw-undelete-submit").click();
        }
        if(UrlParameters["action"] == "submit" && document.cookie.search(/protectionparams/) != -1 && document.cookie.search(/protectiontitles/) != -1) {
            var title = document.cookie.split("protectiontitles=")[1].split(";")[0];
            var req = sajax_init_object();
            req.open("GET", wgScriptPath + "/api.php?format=json&action=query&prop=info&intoken=protect&titles=" + title, false);
            req.send(null);
            var info = formatResponse(eval("(" + req.responseText + ")"));
            var postdata = document.cookie.split("protectionparams=")[1].split(";")[0] + "&wpEditToken=" + encodeURIComponent(info.protecttoken);
            var req = sajax_init_object();
            req.open("POST", wgScript + "?title=" + title + "&action=protect", true);
            req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            req.setRequestHeader("Content-length", postdata.length);
            req.send(postdata);
            req.onreadystatechange = function() {
                if(req.status == 200 && req.readyState == 4) {
                    document.getElementById("contentSub").innerHTML += "<br /><b>Original protection levels have been restored.</b>";
                }
            }
        }
    }
});