Suradnik:Ivi104/Skripte/Dobrodosli.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.
//dobrodošlica
$(document).ready(function() {
    if (location.href.includes('Posebno:Evidencije') && location.href.includes('type=newusers')) {
        var dobrodoslicaStartButton = document.createElement('a');
        dobrodoslicaStartButton.id = 'ivi104-dd-start';
        dobrodoslicaStartButton.className = 'cdx-button webfonts-changed';
        dobrodoslicaStartButton.innerText = 'Sučelje za dobrodošlicu';
        dobrodoslicaStartButton.addEventListener("click", dobrodoslicaPrep);
        document.querySelector('ul').before(dobrodoslicaStartButton);
    }

    function dobrodoslicaPrep() {
        document.getElementById('ivi104-dd-start').removeEventListener('click', dobrodoslicaPrep);
        var newUserTalkLink = null;
        var newUserContribsLink = null;
        document.querySelectorAll('ul>li.mw-logline-newusers').forEach(function(element, index) {
            newUserTalkLink = element.querySelectorAll('.mw-usertoollinks>span>a')[0];
            newUserContribsLink = element.querySelectorAll('.mw-usertoollinks>span>a')[1];
            if (newUserTalkLink.classList.contains('new') == true &&
                newUserContribsLink.classList.contains('mw-usertoollinks-contribs-no-edits') == false) {
                if (element.querySelector('input')) {
                    //ukloni stare kućice, ako postoje
                    element.querySelector('input').remove();
                }
            } else {
                element.remove();
            }
        });
        console.log('filtriranje završeno; uklonjene kućice');

        document.querySelectorAll('ul>li.mw-logline-newusers').forEach(function(element, index) {
            var username = element.querySelector('bdi').innerText;
            var dobrodosliCheckBox = document.createElement('input');
            dobrodosliCheckBox.className = 'webfonts-changed';
            dobrodosliCheckBox.type = 'checkbox';
            dobrodosliCheckBox.setAttribute('name', 'ivi104-dd-checkbox');
            dobrodosliCheckBox.setAttribute('value', username);
            element.prepend(dobrodosliCheckBox);
        });

        var dobrodoslicaSendButton = document.createElement('a');
        dobrodoslicaSendButton.id = 'ivi104-dd-send';
        dobrodoslicaSendButton.className = 'cdx-button webfonts-changed cdx-button--action-progressive';
        dobrodoslicaSendButton.innerText = 'Pošalji dobrodošlicu označenima';
        dobrodoslicaSendButton.addEventListener("click", dobrodoslicaSendPrep);
        document.getElementById('ivi104-dd-start').after(dobrodoslicaSendButton);

    }
});

function dobrodoslicaSendPrep() {
    var dobrodoslicaCheckedBoxes = document.querySelectorAll('input[name=ivi104-dd-checkbox]:checked');
    var dobrodoslicaCheckedArray = [];
    if (dobrodoslicaCheckedBoxes.length == 0) {
        alert("Ništa nije označeno, molim pokušajte ponovno!");
        return 0;
    } else {
        dobrodoslicaCheckedBoxes.forEach(function(box, index) {
            dobrodoslicaCheckedArray.push(box.getAttribute('value'));
        });

        if (confirm("Posljednja potvrda - poslati dobrodošlice " + dobrodoslicaCheckedArray.length + " suradnika?")) {

            var dobrodoslicaStatusText = document.createElement('span');
            dobrodoslicaStatusText.innerText = 'Čekam... : ';
            dobrodoslicaStatusText.id = 'ivi104-dd-status';
        
            var dobrodoslicaSuccessText = document.createElement('span');
            dobrodoslicaSuccessText.innerText = '[Uspjelo: 0/';
            dobrodoslicaSuccessText.id = 'ivi104-dd-success';
        
            var dobrodoslicaFailText = document.createElement('span');
            dobrodoslicaFailText.innerText = 'Neuspjelo: 0]';
            dobrodoslicaFailText.id = 'ivi104-dd-fail';
        
            document.getElementById('ivi104-dd-send').after(dobrodoslicaFailText);
            document.getElementById('ivi104-dd-send').after(dobrodoslicaSuccessText);
            document.getElementById('ivi104-dd-send').after(dobrodoslicaStatusText);


            dobrodoslicaAPILoop(dobrodoslicaCheckedArray);
        } else window.alert("Otkazano. Ništa nije izmjenjeno.");
    
    }
}

function dobrodoslicaAPILoop(dobrodoslicaCheckedArray) {
    var
        api = new mw.Api(),
        dobrodoslicaSuccessCount = 0,
        dobrodoslicaFailCount = 0,
        dobrodoslicaFailed = [];

    function dobrodoslicaAPICall(dobrodoslicaCheckedText) {
        return function() {
            //<nowiki>
            let welcomeTalkPagePrefix = "Razgovor_sa_suradnikom:";
            var params = {
                "action": "edit",
                "format": "json",
                "title": welcomeTalkPagePrefix + dobrodoslicaCheckedText,
                "text": "{{subst:dd}}~~~~",
                "summary": "Dobro došli!",
                "tags": "welcome-api",
                "bot": 1,
                "createonly": 1,
                "utf8": 1
            }; //</nowiki>

            return $.Deferred(function(dobrodoslicaDeferred) {
                var dobrodoslicaPromise = api.postWithToken('csrf', params);
                // console.log("params: ");
                // console.log(params);
                // console.log("checkedArray: " + checkedArray);
                // console.log("checkedText: " + checkedText);
                dobrodoslicaPromise.done(function(data) {
                    dobrodoslicaSuccessCount++;
                    document.getElementById("ivi104-dd-success").innerText = "[Uspjelo: " + dobrodoslicaSuccessCount + "/";
                    // console.log("PromiseSuccess: ");
                    // console.log(data);

                    // //obojaj uspješne
                    // document.querySelectorAll('ul>li.mw-logline-newusers').forEach(function(element, index) {
                    //     var newUserTalkURL = String(element.querySelectorAll('.mw-usertoollinks>span>a')[0].href).replace(/_/g, ' ').split('?title=');;
                    //     newUserTalkURL1 = newUserTalkURL[1];
                    //     newUserTalkURL1.split('&action=');
                    //     if (newUserTalkURL1[1].includes(data.edit.title)) {
                    //         element.style.backgroundColor = "greenyellow";
                    //     }
                    // });

                });
                dobrodoslicaPromise.fail(function(data) {
                    dobrodoslicaFailCount++;
                    dobrodoslicaFailed.push(dobrodoslicaCheckedText);
                    document.getElementById("ivi104-dd-fail").innerText = "Nije uspjelo: " + dobrodoslicaFailCount + "]";
                    console.log("PromiseError: ");
                    console.log(data);
                    console.log(dobrodoslicaFailed);

                });
                dobrodoslicaPromise.always(function() {
                    dobrodoslicaDeferred.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 objavom stranice. 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-dd-status').innerText = 'Radim... ';
    var dobrodoslicaDeferred = dobrodoslicaAPICall(dobrodoslicaCheckedArray[0])();
    for (var i = 1; i < dobrodoslicaCheckedArray.length; i++) {
        dobrodoslicaDeferred = dobrodoslicaDeferred.then(dobrodoslicaAPICall(dobrodoslicaCheckedArray[i]));
    }

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