Thành viên:Trần Nguyễn Minh Huy/simpleRevert.js
Giao diện
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 Explorer và Safari: 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();
}
});