Suradnik:Ivi104/Skripte/Unlink-ivi.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.
//unlink-ivi
$(document).ready(function() {
if (location.href.includes('/Datoteka:') || location.href.includes('/File:')) {
console.log("ivi-odlinkaj loaded.");
mw.util.addPortletLink(
'p-cactions', '#Poveznice',
'ivi104-odlinkaj', 'ivi104-odlinkaj', 'odlinkaj', ''
);
document.getElementById('ivi104-odlinkaj').setAttribute('onclick', 'ivi104OdlinkajPrep()');
}
});
function ivi104OdlinkajPrep() {
console.log("Ivi-odlinkaj: prep");
document.getElementById('filelinks').scrollIntoView();
var odlinkajPopis = document.querySelectorAll('ul.mw-imagepage-linkstoimage>li');
odlinkajPopis.forEach(function(izmjena, index) {
var odlinkajCheckBox = document.createElement('input');
odlinkajCheckBox.className = 'webfonts-changed';
odlinkajCheckBox.type = 'checkbox';
var odlinkajImeStranice = odlinkajPopis[index].innerText;
odlinkajCheckBox.setAttribute('name', 'ivi104-odlinkaj-checkbox');
odlinkajCheckBox.setAttribute('value', odlinkajImeStranice);
odlinkajPopis[index].prepend(odlinkajCheckBox);
});
//onemogući ponovno klikanje poveznice za start
document.getElementById('ivi104-odlinkaj').removeAttribute('onclick');
var odlinkajGumbSubmit = document.createElement('input');
odlinkajGumbSubmit.type = 'submit';
odlinkajGumbSubmit.className = 'cdx-button webfonts-changed';
odlinkajGumbSubmit.id = 'ivi104-odlinkaj-submit';
odlinkajGumbSubmit.value = 'Ukloni datoteku iz članaka';
odlinkajGumbSubmit.setAttribute('onclick', 'ivi104OdlinkajMain()');
document.getElementsByClassName('mw-imagepage-linkstoimage')[0].append(odlinkajGumbSubmit);
////////// *** prepravi ***////////////
var odlinkajStatusText = document.createElement('span');
odlinkajStatusText.innerText = 'Čekam... : ';
odlinkajStatusText.id = 'ivi104-odlinkaj-status';
var odlinkajSuccessText = document.createElement('span');
odlinkajSuccessText.innerText = '[Uspjelo: 0/';
odlinkajSuccessText.id = 'ivi104-odlinkaj-success';
var odlinkajFailText = document.createElement('span');
odlinkajFailText.innerText = 'Neuspjelo: 0]';
odlinkajFailText.id = 'ivi104-odlinkaj-fail';
document.getElementById('ivi104-odlinkaj-submit').after(odlinkajFailText);
document.getElementById('ivi104-odlinkaj-submit').after(odlinkajSuccessText);
document.getElementById('ivi104-odlinkaj-submit').after(odlinkajStatusText);
}
function ivi104OdlinkajMain() {
console.log("Ivi-odlinkaj: main");
var odlinkajCheckedBoxes = document.querySelectorAll('input[name=ivi104-odlinkaj-checkbox]:checked');
var odlinkajCheckedArray = [];
if (odlinkajCheckedBoxes.length == 0) {
alert("Ništa nije označeno, molim pokušajte ponovno!");
} else if (odlinkajCheckedBoxes.length > 49) {
alert("previše stavki označeno. Max 49.");
} else {
odlinkajCheckedBoxes.forEach(function(box, index) {
odlinkajCheckedArray.push(box.getAttribute('value'));
});
console.log("odlinkajArray");
console.log(odlinkajCheckedArray);
var odlinkajRazlog = window.prompt("Unesite sažetak izmjene: ", "slika za brisanje uklonjena iz članka");
if (odlinkajRazlog != null) {
ivi104OdlinkajDohvati(odlinkajCheckedArray, odlinkajRazlog);
} else {
window.alert("Odustali ste. Ništa nije promjenjeno.");
}
}
}
function ivi104OdlinkajDohvati(odlinkajCheckedArray, odlinkajRazlog) {
//get current content using MW
var params = {
"action": "query",
"format": "json",
"prop": "revisions",
"titles": odlinkajCheckedArray.join('|'),
"redirects": 1,
"rvprop": "content",
"rvslots": "main",
"utf8": 1
},
api = new mw.Api();
api.get(params).done(function(data) {
//console.log(data);
var pages = data.query.pages;
odlinkajLoop(pages, odlinkajRazlog);
});
}
function odlinkajLoop(pages, odlinkajRazlog) {
var pagesArray = [];
for (let i in pages) {
for (let j in pages[i].revisions[0].slots.main) {
if (j == "*") {
pagesArray.push(i);
pagesArray.push(pages[i].revisions[0].slots.main[j])
}
}
}
console.log("pagesArray");
console.log(pagesArray);
var
api = new mw.Api(),
successCount = 0,
failCount = 0,
failed = [],
error = [],
deferreds = [];
var odlinkajFilename = mw.config.get("wgPageName");
//console.log("name: ", odlinkajFilename);
var odlinkajFilenameSplit = odlinkajFilename.split('Datoteka:');
odlinkajFilename = odlinkajFilenameSplit[1];
console.log("Ime slike: ", odlinkajFilename);
function odlinkajAPI(pageid, pageContent, odlinkajRazlog) {
console.log("apiPoziv: pageid ", pageid, "razlog: ", odlinkajRazlog);
//console.log("before: ");
//console.log(pageContent);
var odlinkajRegexFull = new RegExp("\\[\\[(datoteka|slika|file):" + odlinkajFilename + "[\\w\\W]*?\\]\\]$\\n?", "im");
// "\[\[(datoteka|slika|file):Test-slika.png[\w\W]*?\]\]$\n?"
var odlinkajRegexInfobox = new RegExp("=\\s*?" + odlinkajFilename, "im");
// "=\s*?Test-slika.png"
var odlinkajRegexGallery = new RegExp("(datoteka|slika|file)?:?" + odlinkajFilename + "[\\w\\W]*?$\\n?(?=[\\w\\W]*?<\\/gallery>)")
// (datoteka|slika|file)?:?:Test-slika.png[\w\W]*?$\n?(?=[\w\W]*?<\/gallery>)
pageContent = pageContent.replace(odlinkajRegexFull, '');
pageContent = pageContent.replace(odlinkajRegexInfobox, '=');
pageContent = pageContent.replace(odlinkajRegexGallery, '');
// console.log("after: ");
// console.log(pageContent);
return function() {
var params = {
"action": "edit",
"format": "json",
"pageid": parseInt(pageid),
"text": pageContent,
"summary": odlinkajRazlog,
"tags": "odlinkaj-ivi104",
"minor": 1,
"nocreate": 1
};
return $.Deferred(function(deferred) {
var promise = api.postWithToken('csrf', params);
console.log("params:");
console.log(params);
promise.done(function(data) {
successCount++;
document.getElementById("ivi104-odlinkaj-success").innerText = "[Uspjelo: " + successCount + "/";
// console.log("PromiseSuccess: ");
// console.log(data);
});
promise.fail(function(data) {
failCount++;
failed.push(pageid);
document.getElementById("ivi104-odlinkaj-fail").innerText = "Nije uspjelo: " + failCount + "]";
console.log("PromiseError: ");
console.log(data);
console.log(failed);
});
promise.always(function() {
deferred.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-odlinkaj-status').innerText = 'Radim... ';
var deferred = odlinkajAPI(pagesArray[0], pagesArray[1], odlinkajRazlog)();
for (var i = 2; i < pagesArray.length; i++) {
console.log("i: ", i);
deferred = deferred.then(odlinkajAPI(pagesArray[i], pagesArray[i + 1], odlinkajRazlog));
i++;
}
// Show the output and do cleanup once all the requests are done.
$.when(deferred).then(function() {
document.getElementById('ivi104-odlinkaj-status').innerText = 'Završeno! ';
document.getElementById('ivi104-odlinkaj-status').style.backgroundColor = 'greenyellow';
window.alert('Sakrivanje završeno! Molim osvježite stranicu.');
});
}