User:Bluedeck/haystack/get-page-history-size.js
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// exposed function: Pagename^n -> Z+, where codomain is the size in byte the history of all these pages.
(function(){
function get(uri) {
return new Promise((r, rj) => {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = _ => (xhr.readyState === 4) ? r(xhr.responseText) : null;
xhr.open("GET", uri, true);
xhr.send();
});
}
function get1pagehistsize(pagename) {
return new Promise((r, rj) => {
pagename = pagename.replace(/\&\=/g, "");
let uri = `/w/api.php?action=query&format=json&prop=revisions&rvlimit=max&rvprop=user|size|timestamp&titles=${pagename}`;
get(uri).then(JSON.parse).then(obj => {
let total_size = 0;
let pages = obj.query.pages;
pages[Object.keys(pages)[0]].revisions.forEach(x => total_size += x.size);
r(total_size);
});
});
}
function expose(pagenames) {
let len = pagenames.length;
let total_size = 0;
return new Promise((r, rj) => {
let how_much_done = 0;
for(let i=0; i<len; i++) {
get1pagehistsize(pagenames[i]).then(sizeof1page => {
total_size += sizeof1page;
how_much_done ++;
if(how_much_done === len) r(total_size);
});
}
});
}
return expose
})();