Użytkownik:Polskacafe/rvall.js: Różnice pomiędzy wersjami

Z Nonsensopedii, polskiej encyklopedii humoru
M (meh)
 
(Nie pokazano 6 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
/**
/* Brudna metoda na cofanie wszystkich zmian na OZetach. Działa z "nowym" (tj JavaScriptowym) UI ostatnich zmian. */
* Narzędzie do rewertowania edycji wielu użytkowników
function rvall(){
* Stworzone we wrześniu 2024
// @param username Nazwa użytkownika
*/
function makeUserDesc(username) {
function rvall() {
// Ustawiając tą zmienną można ograniczać dostęp do narzędzia. Ofc grupy muszą mieć prawa do rollbacka i patrolu.
const allowedGroups = ["sysop", "content-moderator"];
/**
* Funkcja tworzy "opis" – domyślnie: link – użytkownika, którego zmiana została przywrócona
* @param username Nazwa użytkownika
*/
function makeUserDesc( username ) {
return "[[Specjalna:Wkład/" + username +"|" + username +"]]";
return "[[Specjalna:Wkład/" + username +"|" + username +"]]";
}
}


/**
// @param title Nazwa strony
* Funkcja zwraca kod przycisku do rewertowania wszystkich edycji zgrupowanych na OZetach
// @param firstRevid pierwszy chronologicznie revid
// @param newestRevid revid najnowszej zmiany
* @param title Nazwa strony
function makeRevallButton(title, firstRevid, newestRevid) {
* @param firstRevid pierwszy chronologicznie revid
* @param newestRevid revid najnowszej zmiany
return ' <span class="revall-button mw-rollback-link"><a href="#" class="mw-rollback-link-a" data-title="' + title +
*/
function makeRevallButton( title, firstRevid, newestRevid ) {
return ' <span class="revall-button mw-rollback-link"><a href="#" class="mw-rollback-link-a revall-a" data-title="' + title +
'" data-last-revid="' + firstRevid +
'" data-last-revid="' + firstRevid +
'" data-newest-revid="' + newestRevid +
'" data-newest-revid="' + newestRevid +
Linia 16: Linia 28:
}
}
/**
function makeRestoreMeButton(title, oneAboveRevid, newestRevid) {
* Funkcja zwraca kod przycisku do przywracania konkretnej edycji na OZetach
return ' • <a class="mw-changeslist-restoreme revall-button" href="#" data-title="' + title +
* @param title Nazwa strony
* @param oneAboveRevid Revid pierwszej edycji wykonanej po edycji przywracanej, czyli ostatniej do zrewertowania
* @param newestRevid Revid najnowszej wersji strony
*/
function makeRestoreMeButton( title, oneAboveRevid, newestRevid ) {
return ' • <a class="mw-changeslist-restoreme revall-button revall-button-restore revall-a" href="#" data-title="' + title +
'" data-last-revid="' + oneAboveRevid +
'" data-last-revid="' + oneAboveRevid +
'" data-newest-revid="' + newestRevid +
'" data-newest-revid="' + newestRevid +
Linia 23: Linia 41:
}
}


/**
* Automatycznie odświeża przyciski, gdy pojawią się nowe edycje na nowych ( JSowych ) ozetach
*/
function jsRcBind() {
var bodyClass = $( "body" ).attr( "class" );
if ( $( "body" ).attr( "class" ).indexOf( "mw-rcfilters-enabled" ) === -1 ) return;
$( 'body' ).on( 'DOMNodeInserted', '.mw-rcfilters-ui-changesListWrapperWidget-previousChangesIndicator', function() {
$( ".revall-button" ).remove();
rcAddLinks();
});
}
/**
* Dodaje linki do przywracania i wycofywania edycji na OZ
*/
function rcAddLinks() {
function rcAddLinks() {
$( 'tr.mw-changeslist-last.mw-changeslist-reviewstatus-unpatrolled.mw-changeslist-src-mw-edit > td.mw-changeslist-line-inner' ).each( function() {
// mw-changeslist-last
var firstSpan = $( this ).children().first();
$('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 href = $(firstSpan).children().first();
var title = $( href ).attr( 'title' );
var title = $(href).attr('title');


var parent = $(this).parent();
var parent = $( this ).parent();
var tbody = $(parent).parent();
var tbody = $( parent ).parent();
var firstTr = $(tbody).children(".mw-changeslist-edit").first();
var firstTr = $( tbody ).children( ".mw-changeslist-edit" ).first();
var lastTr = $(tbody).children().last(); // ostatnie dziekco = pierwsza zmiana chronologicznie
var lastTr = $( tbody ).children().last(); // ostatnie dziekco = pierwsza zmiana chronologicznie
var firstRevid = $(lastTr).attr('data-mw-revid');
var firstRevid = $( lastTr ).attr( 'data-mw-revid' );
var newestRevid = $(firstTr).attr('data-mw-revid');
var newestRevid = $( firstTr ).attr( 'data-mw-revid' );
$(this).append(makeRevallButton(title, firstRevid, newestRevid));
$( this ).append( makeRevallButton( title, firstRevid, newestRevid ) );
var edits = $(tbody).children(".mw-changeslist-edit");
var edits = $( tbody ).children( ".mw-changeslist-edit" );
edits.each(function(i){
edits.each( function( i ) {
if (i === 0) return;
if ( i === 0 ) return;
var smallRevid = $(edits.get(i-1)).attr('data-mw-revid');
var smallRevid = $( edits.get( i-1 )).attr( 'data-mw-revid' );
var diffBefore = $(this).children("td > .mw-changeslist-diff");
var diffBefore = $( this ).find( "a.mw-changeslist-diff" );
$(diffBefore).after(makeRestoreMeButton(title, smallRevid, newestRevid));
$( diffBefore ).after( makeRestoreMeButton( title, smallRevid, newestRevid ) );
});
});
$(".revall-button > .mw-rollback-link-a").on("click", function(){
$( ".revall-a" ).on( "click", function() {
var title = $(this).attr("data-title");
$( this ).off( 'click' );
var lastRevid = $(this).attr("data-last-revid");
document.body.style.cursor = "wait";
var newestRevid = $(this).attr("data-newest-revid");
var title = $( this ).attr( "data-title" );
rollToVersion(title, lastRevid, newestRevid);
var lastRevid = $( this ).attr( "data-last-revid" );
var newestRevid = $( this ).attr( "data-newest-revid" );
var spinner = $.createSpinner( {size: 'small', type: 'inline'} );
$( this ).after( spinner );
$( this ).attr( 'style', 'display: none;' );
rollToVersion( title, lastRevid, newestRevid );
});
});
});
});
}
}


/**
// @param title Tytuł artykułu
* Patroluje wszystkie wersje danej strony, używając API FancyModeration
// @param refId Revid ostatniej chronologicznie
* Odświeża stronę po wykonaniu zadania
function patrolAllChanges(title, revId) {
* @param title Tytuł artykułu
* @param refId Revid ostatniej chronologicznie
*/
function patrolAllChanges( title, revId ) {
var api = new mw.Api();
var api = new mw.Api();
api.postWithToken('patrol', {
api.postWithToken( 'patrol', {
'action': 'fmod-patrol',
'action': 'fmod-patrol',
'maxrevid': revId
'maxrevid': revId
}).then( function() { window.location.reload(); });
});
}
}




/**

* Przywraca konkretną wersję strony, to jest: wycofuje do ostatniej wersji przed rollBeforeRevID
// @param title Tytuł artykułu
* @param title Tytuł artykułu
// @param rollBeforeRevID pierwsza chronologicznie "zła" edycja
function rollToVersion(title, rollBeforeRevID, newestRevID) {
* @param rollBeforeRevID pierwsza chronologicznie "zła" edycja
*/
function rollToVersion( title, rollBeforeRevID, newestRevID ) {
var api = new mw.Api();
var api = new mw.Api();
api.get({
api.get( {
'action': 'query',
'action': 'query',
'formatversion': '2',
'formatversion': '2',
Linia 78: Linia 121:
'rvstartid': rollBeforeRevID,
'rvstartid': rollBeforeRevID,
'rvlimit': '2'
'rvlimit': '2'
}).then(function(result){
}).then( function( result ) {
var revisions = result.query.pages[0].revisions;
var revisions = result.query.pages[0].revisions;
if (!revisions || revisions.length < 2) return;
if ( !revisions || revisions.length < 2 ) return;
var goodRevision = revisions[1];
var goodRevision = revisions[1];
api.edit(title, function() {
api.edit( title, function() {
return {undo: newestRevID,
return {undo: newestRevID,
undoafter: goodRevision.revid,
undoafter: goodRevision.revid,
summary: 'Wycofano edycje wielu użytkowników, przywrócono edycję autorstwa ' + makeUserDesc(goodRevision.user),
summary: 'Wycofano edycje wielu użytkowników, przywrócono edycję autorstwa ' + makeUserDesc( goodRevision.user ),
minor: true};
minor: true};
}).then(function(){patrolAllChanges(title, newestRevID);});
}).then( function() {patrolAllChanges( title, newestRevID );});
});
});
}
}


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

var groups = mw.config.get( "wgUserGroups" );
mw.user.getRights(function(rights) {
for ( var i = 0; i < allowedGroups.length; i++ ) {
if (rights.indexOf('rollback') !== -1 && rights.indexOf('patrol')) {
if ( groups.indexOf( allowedGroups[i] ) !== -1 ) {
rcAddLinks();
rcAddLinks();
jsRcBind();
$('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();
break;
rcAddLinks();
});
}
}
});
}
}
}

rvall();
rvall();

Aktualna wersja na dzień 21:41, 16 wrz 2024

/**
 * Narzędzie do rewertowania edycji wielu użytkowników
 * Stworzone we wrześniu 2024
 */
function rvall() {
    // Ustawiając tą zmienną można ograniczać dostęp do narzędzia. Ofc grupy muszą mieć prawa do rollbacka i patrolu.
    const allowedGroups = ["sysop", "content-moderator"];
    
    /**
     * Funkcja tworzy "opis" – domyślnie: link – użytkownika, którego zmiana została przywrócona
     * @param username Nazwa użytkownika
     */
    function makeUserDesc( username ) {
        return "[[Specjalna:Wkład/" + username +"|" + username +"]]";
    }

    /**
     * Funkcja zwraca kod przycisku do rewertowania wszystkich edycji zgrupowanych na OZetach
     * @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 revall-a" data-title="' + title + 
        '" data-last-revid="' + firstRevid + 
        '" data-newest-revid="' + newestRevid +
        '">cofnij wszystko</a></span>';
    }
    
    /**
     * Funkcja zwraca kod przycisku do przywracania konkretnej edycji na OZetach
     * @param title Nazwa strony
     * @param oneAboveRevid Revid pierwszej edycji wykonanej po edycji przywracanej, czyli ostatniej do zrewertowania
     * @param newestRevid Revid najnowszej wersji strony
     */
    function makeRestoreMeButton( title, oneAboveRevid, newestRevid ) {
        return ' • <a class="mw-changeslist-restoreme revall-button revall-button-restore revall-a" href="#" data-title="' + title +
            '" data-last-revid="' + oneAboveRevid +
            '" data-newest-revid="' + newestRevid +
            '">przywr.</a>';
    }

    /**
     * Automatycznie odświeża przyciski, gdy pojawią się nowe edycje na nowych ( JSowych ) ozetach
     */
    function jsRcBind() {
    	var bodyClass = $( "body" ).attr( "class" );
        if ( $( "body" ).attr( "class" ).indexOf( "mw-rcfilters-enabled" ) === -1 ) return;
        $( 'body' ).on( 'DOMNodeInserted', '.mw-rcfilters-ui-changesListWrapperWidget-previousChangesIndicator', function() {
            $( ".revall-button" ).remove();
            rcAddLinks();
        });
    }
    
    /**
     * Dodaje linki do przywracania i wycofywania edycji na OZ
     */
    function rcAddLinks() {
        $( '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-a" ).on( "click", function() {
               $( this ).off( 'click' );
               document.body.style.cursor = "wait";
               var title = $( this ).attr( "data-title" );
               var lastRevid = $( this ).attr( "data-last-revid" );
               var newestRevid = $( this ).attr( "data-newest-revid" );
               var spinner = $.createSpinner( {size: 'small', type: 'inline'} );
               $( this ).after( spinner );
               $( this ).attr( 'style', 'display: none;' );
               rollToVersion( title, lastRevid, newestRevid );
            });
        });
    }

    /**
     * Patroluje wszystkie wersje danej strony, używając API FancyModeration
     * Odświeża stronę po wykonaniu zadania
     * @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
        }).then( function() { window.location.reload(); });
    }


    /**
     * Przywraca konkretną wersję strony, to jest: wycofuje do ostatniej wersji przed rollBeforeRevID
     * @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;
    var groups = mw.config.get( "wgUserGroups" );
    for ( var i = 0; i < allowedGroups.length; i++ ) {
        if ( groups.indexOf( allowedGroups[i] ) !== -1 ) {
            rcAddLinks();
            jsRcBind();
            break;
        }
    }
}

rvall();