Suradnik:Ivi104/Skripte/Sakrivanje-svih-izmjena-suradnika.js
< Suradnik:Ivi104 | Skripte
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.');
});
}