Korisnik:Srđan/js/massrevdel.js
Napomena: Nakon što objavite izmjene, možda ćete morati osvježiti keš preglednika da biste vidjeli izmjene.
- Firefox / Safari: Držite Shift i kliknite na Reload ili pritisnite 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 na Refresh ili pritisnite Ctrl-F5
- Opera: Pritisnite Ctrl-F5.
mw.hook("wikipage.content").add(function () {
mw.loader.using(["mediawiki.api"]).then(function () {
var apiLimit = 500;
var api = new mw.Api();
if (mw.config.get("wgCanonicalSpecialPageName") == "Contributions") {
wkContribsCheckboxInit = true;
$("ul.mw-contributions-list:first").before("<div style='display:inline-block;' id='revdelCP'><span id='revdelLabel' style='cursor:pointer;'>Skrivanje izmjena\
<img id='revdelLabelImg' src='/w/load.php?modules=oojs-ui.styles.icons-movement&image=expand&format=rasterized&lang=en' style='width:12px; transform:rotate(270deg);'/></span>\
<span id='revdelCPBody' style='display:none;'><input type='button' id='revdelSelectAll' value='Izaberi sve'><input type='button' id='revdelSelectNone' value='Nijedno'>\
<input type='button' id='revdelSelectInv' value='Obrni izbor'>\
<span style='white-space:nowrap;'><input type='checkbox' id='revdelContent' name='revdelOptions' value='content'> sakrij sadržaj</span> \
<span style='white-space:nowrap;'><input type='checkbox' id='revdelName' name='revdelOptions' value='userName'> sakrij korisničko ime</span> \
<span style='white-space:nowrap;'><input type='checkbox' id='revdelComment' name='revdelOptions' value='editSummary'> sakrij sažetak</span> \
<span style='white-space:nowrap;'><input type='checkbox' id='undelContent' name='revdelOptions' value='content'> vrati sadržaj</span> \
<span style='white-space:nowrap;'><input type='checkbox' id='undelName' name='revdelOptions' value='userName'> vrati korisničko ime</span> \
<span style='white-space:nowrap;'><input type='checkbox' id='undelComment' name='revdelOptions' value='editSummary'> vrati sažetak</span> \
<br/><select id='wpRevDeleteReasonList'><option value='Drugo'>Drugi / dodatni razlog</option></select><input name='wpReason' size='60' id='wpReason' maxlength='100'>\
<input type='button' class='revdelSubmit' id='revdelSubmit' value='Sakrij / vrati izabrane stavke'></span></div>");
$("ul.mw-contributions-list .mw-revdelundel-link").each(function (ind, el) {
if ($(this).children("a").length > 0) {
var revId = /ids=(\d+)/.exec($(this).children("a").attr("href"))[1];
var pageTitle = /target=([^&]+)/.exec($(this).children("a").attr("href"))[1];
el.innerHTML = "<input type='checkbox' name='" + decodeURIComponent(pageTitle) + "' class='revdelIds' value='" + revId + "'>";
$(el).children(".revdelIds").data("index", ind);
}
});
$("ul.mw-contributions-list").after("</form>");
$("#revdelCP").data("revdelToolbarShowing", false);
$("#revdelCP").data("lastSelectedIndex", -1);
//load canned summaries
$.get("/w/index.php?title=MediaWiki:Revdelete-reason-dropdown&action=raw", function (data) {
reasons = data.replace(/\*\* ([^\*]+)/g, '<option value="$1">$1</option>');
reasons = reasons.replace(/\* ([^<]+)([^\*]+)/g, '<optgroup label="$1">$2</optgroup>');
$('#wpRevDeleteReasonList').append(reasons);
});
//attach handlers
$("#revdelLabel").click(
function () {
if ($("#revdelCP").data("revdelToolbarShowing")) {
$("#revdelCP").data("revdelToolbarShowing", false);
$("#revdelLabelImg").css("transform", "rotate(270deg)");
$("#revdelCPBody").fadeOut();
}
else {
$("#revdelCP").data("revdelToolbarShowing", true);
$("#revdelLabelImg").css("transform", "none");
$("#revdelCPBody").fadeIn();
}
}
);
$("#revdelSelectAll").click(
function () {
$('input.revdelIds').each(function () {
$(this).prop("checked", true);
});
}
);
$("#revdelSelectNone").click(
function () {
$('input.revdelIds').each(function () {
$(this).prop("checked", false);
});
}
);
$("#revdelSelectInv").click(
function () {
$('input.revdelIds').each(function () {
$(this).prop("checked", !($(this).prop("checked")));
});
}
);
$("input.revdelIds").off("click").click(
function (ev) {
var lastSelectedRevdel = $("#revdelCP").data("lastSelectedIndex");
var newIndex = $(this).data("index");
if (ev.shiftKey && lastSelectedRevdel >= 0) {
var checkboxArray = $("input.revdelIds");
var start = lastSelectedRevdel;
var stop = newIndex;
if (start < stop) {
for (var i = start; i < stop; i++) {
$(checkboxArray[i]).prop("checked", true);
}
}
else {
for (var i = start; i > stop; i--) {
$(checkboxArray[i]).prop("checked", true);
}
}
}
$("#revdelCP").data("lastSelectedIndex", newIndex);
}
);
$("#revdelSubmit").click(
function () {
//figure out which revisions and pages we're working on.
var revCount = 0;
var numTitles = 0;
var pageTitles = {};
$("input.revdelIds:checked").each(function (ind) {
revCount = ind + 1;
if (ind > apiLimit - 1) {
mw.notify("Ne možete sakriti više od " + apiLimit + " izmjena odjednom! Otkazujem...");
return false;
}
if (typeof pageTitles[$(this).attr("name")] == "undefined") {
pageTitles[$(this).attr("name")] = $(this).val();
numTitles++;
}
else {
pageTitles[$(this).attr("name")] = pageTitles[$(this).attr("name")] + "|" + $(this).val();
}
});
if (numTitles == 0) {
mw.notify("Niste izabrali nijednu izmjenu za sakriti!");
return false;
}
var confirmString = "Promijenit ćete sljedeći broj izmjena: " + revCount + "\n\nBit će promijenjena sljedeća svojstva:\n";
//figure out what we're doing to each revision. This is pretty clunky, but whatever.
var deleteString = "";
var revealString = "";
var typeString = "revdel";
if ($("#revdelContent").prop("checked") == $("#undelContent").prop("checked")) {
confirmString = confirmString + "-Vidljivost sadržaja neće biti promijenjena.\n";
}
else if ($("#revdelContent").prop("checked")) {
deleteString = "content";
confirmString = confirmString + "-Sadržaj će biti skriven.\n";
}
else {
revealString = "content";
confirmString = confirmString + "-Sadržaj će biti otkriven.\n";
}
if ($("#revdelComment").prop("checked") == $("#undelComment").prop("checked")) {
confirmString = confirmString + "-Vidljivost sažetaka neće biti promijenjena.\n";
}
else if ($("#revdelComment").prop("checked")) {
if (deleteString != "") {
deleteString = deleteString + "|";
}
deleteString = deleteString + "comment";
confirmString = confirmString + "-Sažeci će biti skriveni.\n";
}
else {
if (revealString != "") {
revealString = revealString + "|";
}
revealString = revealString + "comment";
confirmString = confirmString + "-Sažeci će biti otkriveni.\n";
}
if ($("#revdelName").prop("checked") == $("#undelName").prop("checked")) {
confirmString = confirmString + "-Vidljivost korisničkih imena neće biti promijenjena.\n";
}
else if ($("#revdelName").prop("checked")) {
if (deleteString != "") {
deleteString = deleteString + "|";
}
deleteString = deleteString + "user";
confirmString = confirmString + "-Korisnička imena bit će skrivena.\n";
}
else {
if (revealString != "") {
revealString = revealString + "|";
}
revealString = revealString + "user";
confirmString = confirmString + "-Korisnička imena bit će otkrivena.\n";
}
if (deleteString == "" && revealString == "") {
mw.notify("Niste izabrali koje svojstvo želite promijeniti!");
return false;
}
var summary = "";
//construct the revdel summary
if ($("#wpRevDeleteReasonList").val() == "Drugo") {
if ($("#wpReason").val() == "") {
mw.notify("Niste naveli sažetak skrivanja za zapisnik!");
return false;
}
summary = $("#wpReason").val();
}
else {
summary = $("#wpRevDeleteReasonList").val();
if ($("#wpReason").val() != "") {
summary = summary + ": " + $("#wpReason").val();
}
}
confirmString = confirmString + "\nSažetak: " + summary + "\n\nJeste li sigurni da želite nastaviti?";
if (confirm(confirmString)) {
var numCompleted = 0;
for (title in pageTitles) {
var ajaxData;
ajaxData = { action: "revisiondelete", type: "revision", ids: pageTitles[title], reason: summary };
if (deleteString != "") {
ajaxData.hide = deleteString;
}
if (revealString != "") {
ajaxData.show = revealString;
}
api.postWithToken('csrf', ajaxData).done(function () {
numCompleted++;
if (numCompleted == numTitles) {
mw.notify("Uspješno promijenjen sljedeći broj izmjena: " + revCount);
return false;
}
});
}
}
return false;
}
)
}
});
});