Thành viên:Trần Nguyễn Minh Huy/simpleRevert.js

Bách khoa toàn thư mở Wikipedia

Chú ý: Sau khi lưu thay đổi trang, bạn phải xóa bộ nhớ đệm của trình duyệt để nhìn thấy các thay đổi. Google Chrome, Firefox, Internet ExplorerSafari: Giữ phím ⇧ Shift và nhấn nút Reload/Tải lại trên thanh công cụ của trình duyệt. Để biết chi tiết và hướng dẫn cho các trình duyệt khác, xem Trợ giúp:Xóa bộ nhớ đệm.

/*
*  Script by [[User:Animum]] - Adds 'revert' and 'revert-to' links on contributions pages, page history, and diff screens
* 
*  Preferences (simplePrefs):
*    - showRevertOn (array) can take the values of "history", "diffs", and "contributions".
*    - autoSave (boolean) can be either true or false.
*        - Example (e.g., display revert link on diffs and contributions; automatically save):
             var simplePrefs = {
                 "showRevertOn" : ["diffs", "contributions"],
                 "autoSave"     : true
             };
*/
 
function formatResponse(response) { //This bit was stolen from Gracenotes.  Thanks, Gracenotes!
	try {
		response = response.query.pages;
		for (var property in response)
			return response[property];
	} catch (e) {
		return response.query.pages["-1"];
	}
}
 
var UrlParameters = new Array (); 
 
function readparams() { //Helper function.
  var asReadInUrlParameters;
  var asReadInUrlParameter;
 
  // Get URL parameters
  asReadInUrlParameters = location.search.substring(1, location.search.length).split("&");
  for (i = 0; i < asReadInUrlParameters.length; i++) {
    asReadInUrlParameter = asReadInUrlParameters[i].split("=");
    UrlParameters[decodeURIComponent(asReadInUrlParameter[0])] = decodeURIComponent(asReadInUrlParameter[1]);
  }
}
 
readparams();
 
 
if(typeof(simplePrefs) == "undefined") var simplePrefs = {};
if(typeof(simplePrefs.autoSave) == "undefined") simplePrefs.autoSave = true;
 
function makeLink(color, link, text, br) {
    var span = document.createElement("span");
    span.id = "script-revert";
    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);
    if(br) {
        var br = document.createElement("br");
        span.appendChild(br);
    }
    return span;
}
 
$(function() {
    if(/[?&]diff=/.test(location.href)) {
        var oldid = document.getElementById("mw-diff-otitle1") ? document.getElementById("mw-diff-otitle1").getElementsByTagName("a")[0].href : location.href;
        if(document.getElementById("mw-diff-ntitle1")) {
            var link = makeLink("steelblue", wgScript + "?title=" + wgPageName + "&action=edit" + oldid.substring(oldid.indexOf("&oldid=")) + "&script=rv", "revert-to", true);
            if(UrlParameters["diff"] == wgCurRevisionId) { //Diff containing most recent revision
                link = makeLink("rede", wgScript + "?title=" + wgPageName + "&action=edit" + oldid.substring(oldid.indexOf("&oldid=")) + "&script=rv", "revert", true);
                document.getElementById("mw-diff-ntitle4").appendChild(link);
            } else {
                document.getElementById("mw-diff-otitle4").insertBefore(link, document.getElementById("differences-prevlink"));
            }
        } else {
            var link = makeLink("steelblue", wgScript + "?title=" + wgPageName + "&action=edit" + oldid.substring(oldid.indexOf("&oldid=")) + "&script=rv", "revert-to", true);
            getElementsByClassName(document, "div", "firstrevisionheader")[0].insertBefore(link, document.getElementById("differences-nextlink"));
        }
    }
    if(/[?&]action=history/.test(location.href)) {
        var li_list = document.getElementById("bodyContent").getElementsByTagName("li");
        for(i=1;i<li_list.length;i++) {
            var li = li_list[i];
            var oldid = li.getElementsByTagName("input")[0].value;
            var link = makeLink("steelblue", wgScript + "?title=" + wgPageName + "&action=edit&oldid=" + oldid + "&script=rv", "revert-to");
            li.appendChild(link);
        }
    }
    if(wgCanonicalSpecialPageName == "Contributions" && document.title.indexOf("for") != -1 && true) {
        var li_list = document.evaluate('//div[@id="bodyContent"]//ul/li[contains(span[@class="mw-uctop"], "(top)")]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); //Lists all of the contributions that are the most recent edits on a page.
        for(i=0;i<li_list.snapshotLength;i++) {
            var li = li_list.snapshotItem(i);
            var href = document.evaluate('a[1]/@href', li, null, XPathResult.STRING_TYPE, null).stringValue;
            var oldid = href.split("&oldid=")[1].split("&")[0];
            var article = href.split("?title=")[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) {
                if(info.revisions[1]) {
                    var oldrev = info.revisions[1].revid;
                    var link = makeLink("red", wgScript + "?title=" + article + "&action=edit&oldid=" + oldrev + "&script=rv", "revert");
                    li.appendChild(link);
                }
            }
        }
    }
    if(UrlParameters["action"] == "edit" && UrlParameters["oldid"] > 0 && UrlParameters["script"] == "rv") {
        var a = document.getElementById("mw-revision-name") ? document.getElementById("mw-revision-name").getElementsByTagName("a")[0] : null;
        document.getElementById("wpSummary").value = "Reverted to revision " + UrlParameters["oldid"] + (!document.getElementById("mw-revision-name") || !a ? "" : " by [[" + a.href.split(wgArticlePath.replace(/\$1/g, ""))[1] + "\|" + a.innerHTML + "]]");
        document.getElementById("wpMinoredit").checked = true;
        document.getElementById("editform").submit();
    }
});