Użytkownik:Polskacafe/rvall.js

Z Nonsensopedii, polskiej encyklopedii humoru

Uwaga: aby zobaczyć zmiany po zapisaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5 lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer: Przytrzymaj Ctrl jednocześnie klikając Odśwież lub naciśnij klawisze Ctrl+F5
  • Konqueror: Kliknij polecenie Odśwież lub naciśnij klawisz F5
  • Opera: Wyczyść pamięć podręczną w Narzędzia → Preferencje
/* Brudna metoda na cofanie wszystkich zmian na OZetach. Działa z "nowym" (tj JavaScriptowym) UI ostatnich zmian. */
function rvall(){
    // @param username Nazwa użytkownika
    function makeUserDesc(username) {
        return "[[Specjalna:Wkład/" + username +"|" + username +"]]";
    }

    // @param title Nazwa strony
    // @param firstRevid pierwszy chronologicznie revid
    // @param newestRevid revid najnowszej zmiany
    function makeRevallButton(title, firstRevid, newestRevid) {
        return ' <span class="revall-button mw-rollback-link"><a href="#" class="mw-rollback-link-a" data-title="' + title + 
        '" data-last-revid="' + firstRevid + 
        '" data-newest-revid="' + newestRevid +
        '">cofnij wszystko</a></span>';
    }
    
    function makeRestoreMeButton(title, oneAboveRevid, newestRevid) {
        return ' • <a class="mw-changeslist-restoreme revall-button-restore" href="#" data-title="' + title +
            '" data-last-revid="' + oneAboveRevid +
            '" data-newest-revid="' + newestRevid +
            '">przywr.</a>';
    }

    function rcAddLinks() {
        // mw-changeslist-last
        $('tr.mw-changeslist-last.mw-changeslist-reviewstatus-unpatrolled.mw-changeslist-src-mw-edit > td.mw-changeslist-line-inner').each(function(){
            var firstSpan = $(this).children().first();
            var href = $(firstSpan).children().first();
            var title = $(href).attr('title');

            var parent = $(this).parent();
            var tbody = $(parent).parent();
            var firstTr = $(tbody).children(".mw-changeslist-edit").first();
            var lastTr = $(tbody).children().last(); // ostatnie dziekco = pierwsza zmiana chronologicznie
            var firstRevid = $(lastTr).attr('data-mw-revid');
            var newestRevid = $(firstTr).attr('data-mw-revid');
            $(this).append(makeRevallButton(title, firstRevid, newestRevid));
            var edits = $(tbody).children(".mw-changeslist-edit");
            edits.each(function(i){
                if (i === 0) return;
                var smallRevid = $(edits.get(i-1)).attr('data-mw-revid');
                var diffBefore = $(this).find("a.mw-changeslist-diff");
                $(diffBefore).after(makeRestoreMeButton(title, smallRevid, newestRevid));
            });
            
            $(".revall-button > .mw-rollback-link-a").on("click", function(){
               var title = $(this).attr("data-title");
               var lastRevid = $(this).attr("data-last-revid");
               var newestRevid = $(this).attr("data-newest-revid");
               rollToVersion(title, lastRevid, newestRevid);
            });
            $(".revall-button-restore").on("click", function(){
               var title = $(this).attr("data-title");
               var lastRevid = $(this).attr("data-last-revid");
               var newestRevid = $(this).attr("data-newest-revid");
               rollToVersion(title, lastRevid, newestRevid);
            });
        });
    }

    // @param title Tytuł artykułu
    // @param refId Revid ostatniej chronologicznie
    function patrolAllChanges(title, revId) {
        var api = new mw.Api();
        api.postWithToken('patrol', {
            'action': 'fmod-patrol',
            'maxrevid': revId
        });
    }



    // @param title Tytuł artykułu
    // @param rollBeforeRevID pierwsza chronologicznie "zła" edycja
    function rollToVersion(title, rollBeforeRevID, newestRevID) {
        var api = new mw.Api();
        api.get({
            'action': 'query',
            'formatversion': '2',
            'prop': 'revisions',
            'titles': title,
            'rvprop': 'ids|content|user',
            'rvstartid': rollBeforeRevID,
            'rvlimit': '2'
        }).then(function(result){
            var revisions = result.query.pages[0].revisions;
            if (!revisions || revisions.length < 2) return;
            var goodRevision = revisions[1];
            api.edit(title, function() {
                return {undo: newestRevID,
                undoafter: goodRevision.revid,
                summary: 'Wycofano edycje wielu użytkowników, przywrócono edycję autorstwa ' + makeUserDesc(goodRevision.user),
                minor: true};
            }).then(function(){patrolAllChanges(title, newestRevID);});
        });
    }

    if (mw.config.get('wgCanonicalSpecialPageName') !== "Recentchanges") return;

    mw.user.getRights(function(rights) {
        if (rights.indexOf('rollback') !== -1 && rights.indexOf('patrol')) {
            rcAddLinks();
            $('body').on('DOMNodeInserted', '.mw-rcfilters-ui-changesListWrapperWidget-previousChangesIndicator', function () { // W Y K U R W I Ś C I E    B R U D N E
                $(".revall-button").remove();
                rcAddLinks();
            });
        }
    });
}
rvall();