Suradnik:Ivi104/Skripte/Otkrij-sve.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 revdelShowGumbStart = document.createElement('a');
        revdelShowGumbStart.className = "ivi104-revdel-show-startbutton";
        revdelShowGumbStart.innerHTML = 'otkrij više izmjena';
        revdelShowGumbStart.setAttribute('onclick', 'revdelShowprikaziCheckBoxe()');
        revdelShowGumbStart.style.paddingLeft = '10px';

        setTimeout(() => { document.getElementsByClassName('ivi104-revdel-hide-startbutton')[0].after(revdelShowGumbStart); }, 1000);
    }
});

function revdelShowprikaziCheckBoxe() {
    var revdelShowSveIzmjene = document.querySelectorAll('ul.mw-contributions-list>li');
    revdelShowSveIzmjene.forEach(function(izmjena, index) {
        var revdelShowCheckBox = document.createElement('input');
        revdelShowCheckBox.className = 'webfonts-changed';
        revdelShowCheckBox.type = 'checkbox';
        var revdelShowIDIzmjene = revdelShowSveIzmjene[index].getAttribute('data-mw-revid');
        revdelShowCheckBox.setAttribute('disabled', 'disabled');
        revdelShowCheckBox.setAttribute('name', 'ivi104-revdel-show-checkbox');
        revdelShowCheckBox.setAttribute('value', revdelShowIDIzmjene);

        //je li izmjena već otkrivena?
        if (revdelShowSveIzmjene[index].getElementsByClassName('history-deleted').length > 0) {
            revdelShowCheckBox.removeAttribute('disabled');
        }
        revdelShowSveIzmjene[index].prepend(revdelShowCheckBox);
    });

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

    var revdelShowGumbOtkrij = document.createElement('input');
    revdelShowGumbOtkrij.type = 'submit';
    revdelShowGumbOtkrij.className = 'cdx-button webfonts-changed';
    revdelShowGumbOtkrij.id = 'ivi104-revdel-show-showButton';
    revdelShowGumbOtkrij.value = 'Otkrij odabrane izmjene';
    revdelShowGumbOtkrij.setAttribute('onclick', 'revdelShowPrintChecked()');
    document.getElementsByClassName('mw-contributions-list')[0].prepend(revdelShowGumbOtkrij);

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

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

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

    document.getElementById('ivi104-revdel-show-showButton').after(revdelShowfailText);
    document.getElementById('ivi104-revdel-show-showButton').after(revdelShowSuccessText);
    document.getElementById('ivi104-revdel-show-showButton').after(revdelShowStatusText);

}

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

        var revdelShowOdabirSakrivanja = "";
        var revdelShowValidRegex = new RegExp("^[abc]{1,3}$");
        if (window.confirm("Korak 1/3\nŽelite li zaista otkriti izmjene: \n" + revdelShowCheckedArray.join(", "))) {
            revdelShowOdabirSakrivanja = prompt("Korak 2/3\nOdaberite što sve želite otkriti:\n - upišite slovo 'a' za otkrivanje teksta izmjene\n - upišite slovo 'b' za otkrivanje sažetka\n - upišite slovo 'c' za otkrivanje imena suradnika\nDopušteno je unijeti više slova (unos 'abc' je u redu)");
            if (revdelShowOdabirSakrivanja == null || revdelShowOdabirSakrivanja == "" || revdelShowValidRegex.test(revdelShowOdabirSakrivanja) == false) {
                window.alert("Pogrešan unos, molim pokušajte ponovno.");
            } else {
                var revdelShowRazlog = window.prompt("Korak 3/3\nMolim unesite razlog otkrivanja:\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:");

                revdelShowValidacija(revdelShowCheckedArray, revdelShowOdabirSakrivanja, revdelShowRazlog);
            }
        } else {
            alert("Molim ispravite odabir.");
        }
    }

}

function revdelShowValidacija(revdelShowCheckedArray, revdelShowOdabirSakrivanjaAny, revdelShowRazlogAny) {
    // console.log("validacija start: ");
    // console.log(checkedArray);
    var revdelShowOdabirSakrivanja = String(revdelShowOdabirSakrivanjaAny);
    var revdelShowRazlog = String(revdelShowRazlogAny);

    var revdelShowOdabirArray = [];
    if (revdelShowOdabirSakrivanja.includes("a")) {
        revdelShowOdabirArray.push("content");
    }
    if (revdelShowOdabirSakrivanja.includes("b")) {
        revdelShowOdabirArray.push("comment");
    }
    if (revdelShowOdabirSakrivanja.includes("c")) {
        revdelShowOdabirArray.push("user");
    }
    var revdelShowOdabirString = revdelShowOdabirArray.join('|');

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

    //window.alert(checkedString + "\n" + odabirString + "\n" + razlogString);
    if (confirm("Posljednja potvrda - zaista otkriti?")) {
        revdelShowAPILoop(revdelShowCheckedArray, revdelShowOdabirString, revdelShowRazlogString);
    } else window.alert("Otkazano. Ništa nije izmjenjeno.");
}


function revdelShowAPILoop(revdelShowCheckedArray, revdelShowOdabirString, revdelShowRazlogString) {
    var
        api = new mw.Api(),
        revdelShowAllCount = revdelShowCheckedArray.length,
        revdelShowSuccessCount = 0,
        revdelShowFailCount = 0,
        revdelShowFailed = [],
        revdelShowError = [],
        revdelShowDeferreds = [];

    function revdelShowAPICall(revdelShowCheckedText, revdelShowOdabirString, revdelShowRazlogString) {
        return function() {
            var params = {
                action: 'revisiondelete',
                type: 'revision',
                ids: String(revdelShowCheckedText),
                format: 'json',
                show: String(revdelShowOdabirString),
                reason: String(revdelShowRazlogString),
                tags: 'revdel-api',
            };

            return $.Deferred(function(revdelShowDeferred) {
                var revdelShowPromise = api.postWithToken('csrf', params);
                // console.log("params: ");
                // console.log(params);
                // console.log("checkedArray: " + checkedArray);
                // console.log("checkedText: " + checkedText);
                revdelShowPromise.done(function(data) {
                    revdelShowSuccessCount++;
                    document.getElementById("ivi104-revdel-show-success").innerText = "[Uspjelo: " + revdelShowSuccessCount + "/";
                    // console.log("PromiseSuccess: ");
                    // console.log(data);
                });
                revdelShowPromise.fail(function(data) {
                    revdelShowFailCount++;
                    revdelShowFailed.push(revdelShowCheckedText);
                    document.getElementById("ivi104-revdel-show-fail").innerText = "Nije uspjelo: " + revdelShowFailCount + "]";
                    console.log("PromiseError: ");
                    console.log(data);
                    console.log(revdelShowFailed);
                });
                revdelShowPromise.always(function() {
                    revdelShowDeferred.resolve();
                });
            });
        };
    }

    // Make a chain of deferred objects. We chain them rather than execute them in
    // parallel so that we don't make 1000 simultaneous delete requests and bring the
    // site down. We use deferred objects rather than the promise objects returned
    // from the API request so that the chain continues even if some articles gave
    // errors.
    document.getElementById('ivi104-revdel-show-status').innerText = 'Radim... ';
    var revdelShowDeferred = revdelShowAPICall(revdelShowCheckedArray[0], revdelShowOdabirString, revdelShowRazlogString)();
    for (var i = 1; i < revdelShowCheckedArray.length; i++) {
        revdelShowDeferred = revdelShowDeferred.then(revdelShowAPICall(revdelShowCheckedArray[i], revdelShowOdabirString, revdelShowRazlogString));
    }

    // Show the output and do cleanup once all the requests are done.
    $.when(revdelShowDeferred).then(function() {
        document.getElementById('ivi104-revdel-show-status').innerText = 'Završeno! ';
        document.getElementById('ivi104-revdel-show-status').style.backgroundColor = 'greenyellow';
        window.alert('Otkrivanje završeno! Molim osvježite stranicu.');
    });
}