Suradnik:Ivi104/Skripte/Dobrodosli.js
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.');
});
}