User:Bluedeck/haystack/get-page-history-size.js

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ 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

})();