// ==UserScript==
// @name 灰机wiki查看版本历史
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 以另一种方式查看灰机wiki版本历史(绕过权限错误)。
// @author 鬼影233
// @match *.huijiwiki.com/*
// @icon https://av.huijiwiki.com/site_avatar_www_l.png
// @downloadURL none
// ==/UserScript==
(function () {
"use strict";
(async function () {
await new Promise(resolve => {
setInterval(() => {
if (
typeof mw !== "undefined" &&
typeof mw.Api !== "undefined"
) {
resolve();
return;
}
}, 50);
});
if (
mw.config.get("wgAction") !== "history" ||
!document.body.getElementsByClassName("permissions-errors")[0]
)
return;
const pageName = mw.config.get("wgPageName");
try {
document.getElementsByTagName(
"h1"
)[0].innerHTML = `“${pageName}”的版本历史`;
} catch {}
document.title = document.title.replace(
"权限错误",
`“${pageName}”的版本历史`
);
const pagehistory = document.createElement("ul");
pagehistory.id = "pagehistory";
document.getElementById("mw-content-text").innerHTML =
pagehistory.outerHTML;
const api = new mw.Api();
const creatRevLi = (revId, user, comment, timestamp, size) => {
const li = document.createElement("li");
li.dataset.mwRevid = revId;
const date = new Date(timestamp);
li.innerHTML = `
${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日 (${
["日", "一", "二", "三", "四", "五", "六"][date.getDay()]
}) ${date.getHours().toString().padStart(2, 0)}:${date
.getMinutes()
.toString()
.padStart(
2,
0
)} ${user}(讨论 | 贡献) . . (${size}字节) . . `;
document.getElementById("pagehistory").appendChild(li);
};
api.get({
action: "compare",
format: "json",
fromtitle: pageName,
torelative: "prev",
prop: "ids|user|parsedcomment|timestamp|size",
utf8: 1,
formatversion: 2,
}).done(d => {
d = d.compare;
creatRevLi(
d.torevid,
d.touser,
d.toparsedcomment,
d.totimestamp,
d.tosize
);
creatRevLi(
d.fromrevid,
d.fromuser,
d.fromparsedcomment,
d.fromtimestamp,
d.fromsize
);
(function getRev(fromrev) {
api.get({
action: "compare",
format: "json",
fromrev,
torelative: "prev",
prop: "ids|title|user|parsedcomment|timestamp|size",
utf8: 1,
formatversion: 2,
}).done(d => {
d = d.compare;
if (!d.fromrevid) return;
creatRevLi(
d.fromrevid,
d.fromuser,
d.fromparsedcomment,
d.fromtimestamp,
d.fromsize
);
getRev(d.fromrevid);
});
})(d.fromrevid);
});
})();
})();