Suradnik:Ivi104/Skripte/Sakrivanje-svih-izmjena-suradnika.js

Izvor: Wikipedija

Napomena: Nakon objave možda ćete trebati očistiti međuspremnik svog preglednika kako biste vidjeli promjene.

  • Firefox / Safari: držite Shift i pritisnite Reload, ili pritisnite bilo Ctrl-F5 ili Ctrl-R (⌘-R na Macu)
  • Google Chrome: pritisnite Ctrl-Shift-R (⌘-Shift-R na Macu)
  • Internet Explorer / Edge: držite Ctrl i kliknite Refresh, ili pritisnite Ctrl-F5
  • Opera: pritisnite Ctrl-F5.
//Deferred
$(document).ready(function() {
    if (location.search.includes('title=Posebno%3ADoprinosi') ||
        location.href.includes('Special:Contributions') || location.href.includes('Posebno:Doprinosi') || location.href.includes('Posebno%3ADoprinosi')) {

        var revdelHideGumbStart = document.createElement('a');
        revdelHideGumbStart.className = "ivi104-revdel-hide-startbutton";
        revdelHideGumbStart.innerHTML = 'sakrij više izmjena';
        revdelHideGumbStart.setAttribute('onclick', 'revdelHidePrikaziCheckBoxe()');
        revdelHideGumbStart.style.paddingLeft = '10px';

        document.querySelectorAll('div#contentSub')[0].after(revdelHideGumbStart);

    }
});

function revdelHidePrikaziCheckBoxe() {
    var revdelHideSveIzmjene = document.querySelectorAll('ul.mw-contributions-list>li');
    revdelHideSveIzmjene.forEach(function(izmjena, index) {
        var revdelHideCheckBox = document.createElement('input');
        revdelHideCheckBox.className = 'webfonts-changed';
        revdelHideCheckBox.type = 'checkbox';
        var revdelHideIDIzmjene = revdelHideSveIzmjene[index].getAttribute('data-mw-revid');
        revdelHideCheckBox.setAttribute('name', 'ivi104-revdel-hide-checkbox');
        revdelHideCheckBox.setAttribute('value', revdelHideIDIzmjene);

        //je li izmjena već sakrivena?
        if (revdelHideSveIzmjene[index].getElementsByClassName('history-deleted').length > 0) {
            revdelHideCheckBox.setAttribute('disabled', 'disabled');
        }
        revdelHideSveIzmjene[index].prepend(revdelHideCheckBox);
    });

    //onemogući ponovno klikanje poveznice za start
    document.getElementsByClassName("ivi104-revdel-hide-startbutton")[0].removeAttribute('onclick');

    var revdelHideGumbSakrij = document.createElement('input');
    revdelHideGumbSakrij.type = 'submit';
    revdelHideGumbSakrij.className = 'cdx-button webfonts-changed';
    revdelHideGumbSakrij.id = 'ivi104-revdel-hide-hideButton';
    revdelHideGumbSakrij.value = 'Sakrij odabrane izmjene';
    revdelHideGumbSakrij.setAttribute('onclick', 'revdelHidePrintChecked()');
    document.getElementsByClassName('mw-contributions-list')[0].prepend(revdelHideGumbSakrij);

    var revdelHideStatusText = document.createElement('span');
    revdelHideStatusText.innerText = 'Čekam... : ';
    revdelHideStatusText.id = 'ivi104-revdel-hide-status';

    var revdelHideSuccessText = document.createElement('span');
    revdelHideSuccessText.innerText = '[Uspjelo: 0/';
    revdelHideSuccessText.id = 'ivi104-revdel-hide-success';

    var revdelHideFailText = document.createElement('span');
    revdelHideFailText.innerText = 'Neuspjelo: 0]';
    revdelHideFailText.id = 'ivi104-revdel-hide-fail';

    document.getElementById('ivi104-revdel-hide-hideButton').after(revdelHideFailText);
    document.getElementById('ivi104-revdel-hide-hideButton').after(revdelHideSuccessText);
    document.getElementById('ivi104-revdel-hide-hideButton').after(revdelHideStatusText);

}

function revdelHidePrintChecked() {
    document.getElementsByTagName('input');
    var revdelHideCheckedBoxes = document.querySelectorAll('input[name=ivi104-revdel-hide-checkbox]:checked');
    var revdelHideCheckedArray = [];
    if (revdelHideCheckedBoxes.length == 0) {
        alert("Ništa nije označeno, molim pokušajte ponovno!");
    } else {
        revdelHideCheckedBoxes.forEach(function(box, index) {
            revdelHideCheckedArray.push(box.getAttribute('value'));
        });
        // console.log("checkedarray1");
        // console.log(checkedArray);

        var revdelHideOdabirSakrivanja = "";
        var revdelHideValidRegex = new RegExp("^[abc]{1,3}$");
        if (window.confirm("Korak 1/3\nŽelite li zaista sakriti izmjene: \n" + revdelHideCheckedArray.join(", "))) {
            revdelHideOdabirSakrivanja = prompt("Korak 2/3\nOdaberite što sve želite sakriti:\n - upišite slovo 'a' za sakrivanje teksta izmjene\n - upišite slovo 'b' za sakrivanje sažetka\n - upišite slovo 'c' za sakrivanje imena suradnika\nDopušteno je unijeti više slova (unos 'abc' je u redu)");
            if (revdelHideOdabirSakrivanja == null || revdelHideOdabirSakrivanja == "" || revdelHideValidRegex.test(revdelHideOdabirSakrivanja) == false) {
                window.alert("Pogrešan unos, molim pokušajte ponovno.");
            } else {
                var revdelHideRazlog = window.prompt("Korak 3/3\nMolim unesite razlog sakrivanja:\n - unesite '1' za 'kršenje autorskih prava'\n - unesite '2' za 'neprimjereni osobni podatci'\n - unesite '3' za '[[Wikipedija:Vandalizam|vandalizam]]'\n - unesite '4' za 'grafit'\nTakođer možete ručno unijeti razlog:");

                revdelHideValidacija(revdelHideCheckedArray, revdelHideOdabirSakrivanja, revdelHideRazlog);
            }
        } else {
            alert("Molim ispravite odabir.");
        }
    }

}

function revdelHideValidacija(revdelHideCheckedArray, revdelHideOdabirSakrivanjaAny, revdelHideRazlogAny) {
    // console.log("validacija start: ");
    // console.log(checkedArray);
    var revdelHideOdabirSakrivanja = String(revdelHideOdabirSakrivanjaAny);
    var revdelHideRazlog = String(revdelHideRazlogAny);

    var revdelHideOdabirArray = [];
    if (revdelHideOdabirSakrivanja.includes("a")) {
        revdelHideOdabirArray.push("content");
    }
    if (revdelHideOdabirSakrivanja.includes("b")) {
        revdelHideOdabirArray.push("comment");
    }
    if (revdelHideOdabirSakrivanja.includes("c")) {
        revdelHideOdabirArray.push("user");
    }
    var revdelHideOdabirString = revdelHideOdabirArray.join('|');

    var revdelHideRazlogString = "";
    if (revdelHideRazlog == "1") {
        revdelHideRazlogString = "kršenje autorskih prava";
    } else if (revdelHideRazlog == "2") {
        revdelHideRazlogString = "neprimjereni osobni podatci";
    } else if (revdelHideRazlog == "3") {
        revdelHideRazlogString = "[[Wikipedija:Vandalizam|vandalizam]]";
    } else if (revdelHideRazlog == "4") {
        revdelHideRazlogString = "grafit";
    } else {
        revdelHideRazlogString = revdelHideRazlog;
    }

    //window.alert(checkedString + "\n" + odabirString + "\n" + razlogString);
    if (confirm("Posljednja potvrda - zaista sakriti?")) {
        revdelHideAPILoop(revdelHideCheckedArray, revdelHideOdabirString, revdelHideRazlogString);
    } else window.alert("Otkazano. Ništa nije izmjenjeno.");
}


function revdelHideAPILoop(revdelHideCheckedArray, revdelHideOdabirString, revdelHideRazlogString) {
    var
        api = new mw.Api(),
        revdelHideAllCount = revdelHideCheckedArray.length,
        revdelHideSuccessCount = 0,
        revdelHideFailCount = 0,
        revdelHideFailed = [],
        revdelHideError = [],
        revdelHideDeferreds = [];

    function revdelHideAPICall(revdelHideCheckedText, revdelHideOdabirString, revdelHideRazlogString) {
        return function() {
            var params = {
                action: 'revisiondelete',
                type: 'revision',
                ids: String(revdelHideCheckedText),
                format: 'json',
                hide: String(revdelHideOdabirString),
                reason: String(revdelHideRazlogString),
                tags: 'revdel-api',
            };

            return $.Deferred(function(revdelHideDeferred) {
                var revdelHidePromise = api.postWithToken('csrf', params);
                // console.log("params: ");
                // console.log(params);
                // console.log("checkedArray: " + checkedArray);
                // console.log("checkedText: " + checkedText);
                revdelHidePromise.done(function(data) {
                    revdelHideSuccessCount++;
                    document.getElementById("ivi104-revdel-hide-success").innerText = "[Uspjelo: " + revdelHideSuccessCount + "/";
                    // console.log("PromiseSuccess: ");
                    // console.log(data);
                });
                revdelHidePromise.fail(function(data) {
                    revdelHideFailCount++;
                    revdelHideFailed.push(revdelHideCheckedText);
                    document.getElementById("ivi104-revdel-hide-fail").innerText = "Nije uspjelo: " + revdelHideFailCount + "]";
                    console.log("PromiseError: ");
                    console.log(data);
                    console.log(revdelHideFailed);
                });
                revdelHidePromise.always(function() {
                    revdelHideDeferred.resolve();
                });
            });
        };
    }


    // Pošaljemo prvi zahtjev, i zatim radimo lanac odgođenih (deffered) objekata
    // Radimo lanac umjesto izvršavanja u paraleli da ne srušimo stranicu nakon 
    // 1000 istovremenih zahtjeva za sakrivanje izmjena. Koristimo deferred objekte
    // umjesto promise objekata koje vraća API kako bi se lanac nastavio za slučaj ako
    // nam prijašnji API zahtjev u lancu nije uspio.

    document.getElementById('ivi104-revdel-hide-status').innerText = 'Radim... ';
    var revdelHideDeferred = revdelHideAPICall(revdelHideCheckedArray[0], revdelHideOdabirString, revdelHideRazlogString)();
    for (var i = 1; i < revdelHideCheckedArray.length; i++) {
        revdelHideDeferred = revdelHideDeferred.then(revdelHideAPICall(revdelHideCheckedArray[i], revdelHideOdabirString, revdelHideRazlogString));
    }

    // Pokaži završeno
    $.when(revdelHideDeferred).then(function() {
        document.getElementById('ivi104-revdel-hide-status').innerText = 'Završeno! ';
        document.getElementById('ivi104-revdel-hide-status').style.backgroundColor = 'greenyellow';
        window.alert('Sakrivanje završeno! Molim osvježite stranicu.');
    });
}