User:AramilFeraxa/QD.js
Appearance
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
var QuickDelete = {
createFieldSet: function() {
// Tworzy div, który jest głównym kontenerem
document.getElementsByTagName("h1")[0].textContent = "Quick delete pages";
document.title = "Quick delete pages";
jQuery('<div/>', {
id: 'QD-container',
style: 'max-width: 750px; border: 1px solid #CCC; text-align:center; border-radius: 10px; padding: 15px; margin: 0 auto;'
}).appendTo('#mw-content-text');
// Tworzy fieldset layout
var QD_fieldset = new OO.ui.FieldsetLayout({
label: 'Quick Delete',
classes: ['container']
});
// Tworzy pole formularza na wpisanie nazwy kategorii
var defCategory = ''; // Domyślna kategoria
var QD_input_category = new OO.ui.TextInputWidget({
placeholder: 'Category',
"class": "QD-input",
id: 'QD-category',
required: true,
validate: 'non-empty',
value: defCategory
});
// Tworzy pole formularza na wpisanie powodu usunięcia
var defReason = 'NowCommons'; // Domyślny powód usunięcia
var QD_input_reason = new OO.ui.TextInputWidget({
placeholder: 'Reason',
"class": "QD-input",
id: 'QD-reason',
required: true,
validate: 'non-empty',
value: defReason
});
// Dodaje stworzone elementy do fieldsetu
QD_fieldset.addItems([
new OO.ui.FieldLayout(QD_input_category, {
label: 'Category name',
align: 'right',
}),
new OO.ui.FieldLayout(QD_input_reason, {
label: 'Reason',
align: 'right',
}),
]);
// Dołącza fieldset do kontenera
$('#QD-container').append(QD_fieldset.$element);
jQuery('#QD-reason').css('margin-bottom', '15px');
// Przycisk "Analizuj strony"
var QD_button_analyze = new OO.ui.ButtonInputWidget({
type: 'submit',
useInputTag: true,
id: 'QD-analyze-button',
label: 'Analyze pages',
flags: [
'primary'
]
});
$('#QD-container').append(QD_button_analyze.$element);
// Przycisk "Usuń strony"
var QD_button_delete = new OO.ui.ButtonInputWidget({
type: 'submit',
useInputTag: true,
id: 'QD-delete-button',
label: 'Delete listed pages',
flags: [
'primary',
'destructive'
],
});
QD_button_delete.$element.hide(); // Ukryj przycisk na początku
$('#QD-container').append(QD_button_delete.$element);
// Div na komunikaty otrzymywane później
jQuery('<div/>', {
id: 'QD-message-container',
style: 'width:100%; margin:5px;'
}).appendTo('#QD-container');
console.log("QD: Utworzono formularz");
// Po kliknięciu na "Analizuj strony" -> idź do funkcji analyzePages()
$(document).on('click', '#QD-analyze-button', function() {
var catName = QD_input_category.getValue().trim(); // Pobierz nazwę kategorii od użytkownika
console.log("QD: Rozpoczynam analizę stron z kategorii: " + catName);
QuickDelete.analyzePages(catName);
});
var QD_button_confirmDelete = new OO.ui.ButtonInputWidget({
type: 'submit',
useInputTag: true,
id: 'QD-confirm-delete-button',
label: 'Confirm',
flags: [
'primary',
'destructive'
],
});
QD_button_confirmDelete.$element.hide(); // Ukryj przycisk na początku
$('#QD-container').append(QD_button_confirmDelete.$element);
// Po kliknięciu na "Usuń strony" -> pokaż przycisk potwierdzenia
$(document).on('click', '#QD-delete-button', function() {
$('#QD-delete-button').hide();
$('#QD-confirm-delete-button').show();
});
// Po kliknięciu na "Potwierdź usunięcie" -> idź do funkcji deletePages()
$(document).on('click', '#QD-confirm-delete-button', function() {
var catName = QD_input_category.getValue().trim(); // Pobierz nazwę kategorii od użytkownika
console.log("QD: Rozpoczynam usuwanie stron z kategorii: " + catName);
// Pobierz powód usunięcia z formularza
var deleteReason = QD_input_reason.getValue().trim();
QuickDelete.deletePages(catName, deleteReason);
});
},
analyzePages: function(catName) {
// Wyczyść dotychczasowe komunikaty (jeśli są)
$('#QD-message-container').empty();
// Parametry dla zapytania API
var params = {
action: 'query',
list: 'categorymembers',
cmtitle: 'Category:' + catName,
cmlimit: 'max',
format: 'json'
};
// Wywołanie API, aby pobrać listę stron w kategorii
$.ajax({
url: mw.util.wikiScript('api'),
data: params,
success: function(data) {
if (data.query && data.query.categorymembers.length > 0) {
var pagesToAnalyze = data.query.categorymembers.map(function(member) {
return member.title;
});
console.log("QD: Znaleziono " + pagesToAnalyze.length + " stron do analizy.");
QuickDelete.displayMsg("Pages to delete:<br>" + pagesToAnalyze.join("<br>"), 'success');
$('#QD-delete-button').show();
} else if (data.query.categorymembers.length === 0 || data.query.categorymembers.missing !== undefined) {
QuickDelete.displayMsg("Category does not exist or is empty: " + catName, 'error');
console.error("QD: Category does not exist or is empty: " + catName);
} else {
QuickDelete.displayMsg("No pages found in the category: " + catName, 'error');
console.error("QD: Nie znaleziono stron w kategorii, bądź jest ona pusta: " + catName);
}
},
error: function(xhr, status, error) {
QuickDelete.displayMsg("Error when searching pages from category: " + error, 'error');
console.error("QD: Błąd podczas pobierania stron z kategorii: " + error);
}
});
},
deletePages: function(catName, deleteReason) {
// Wyczyść dotychczasowe komunikaty (jeśli są)
$('#QD-message-container').empty();
// Parametry dla zapytania API
var params = {
action: 'query',
list: 'categorymembers',
cmtitle: 'Category:' + catName,
cmlimit: 'max',
format: 'json'
};
// Wywołanie API, aby pobrać listę stron w kategorii
$.ajax({
url: mw.util.wikiScript('api'),
data: params,
success: function(data) {
if (data.query && data.query.categorymembers) {
var pagesToDelete = data.query.categorymembers.map(function(member) {
return member.title;
});
console.log("QD: Znaleziono " + pagesToDelete.length + " stron do usunięcia.");
// Wywołanie funkcji usuwającej strony
QuickDelete.deletePagesInCategory(pagesToDelete, deleteReason);
} else {
QuickDelete.displayMsg("No pages found in the category: " + catName, 'error');
console.error("QD: Nie znaleziono stron w kategorii: " + catName);
}
},
error: function(xhr, status, error) {
QuickDelete.displayMsg("Error when searching pages from category: " + error, 'error');
console.error("QD: Błąd podczas pobierania stron z kategorii: " + error);
}
});
},
deletePagesInCategory: function(pages, deleteReason) {
var suffix = "";
if (mw.config.get("wgGlobalGroups").indexOf("global-sysop") >= 0) {
suffix = " ([[m:GS|global sysop]] action)";
} else if (mw.config.get("wgGlobalGroups").indexOf("steward") >= 0) {
suffix = " ([[m:stewards|steward]] action)";
}
// Iteracja przez listę stron i usuwanie każdej z nich
pages.forEach(function(page) {
var deleteParams = {
action: 'delete',
title: page,
reason: deleteReason + suffix,
token: mw.user.tokens.get('csrfToken'),
format: 'json'
};
// Wywołanie API, aby usunąć stronę
$.ajax({
url: mw.util.wikiScript('api'),
type: 'POST',
data: deleteParams,
success: function(data) {
console.log("QD: Usunięto stronę: " + page);
QuickDelete.displayMsg("Deleted: " + page, 'success');
},
error: function(xhr, status, error) {
console.error("QD: Błąd podczas usuwania strony " + page + ": " + error);
QuickDelete.displayMsg("Error while deleting: " + page + ": " + error, 'error');
}
});
});
},
displayMsg: function(QD_msg, QD_msgtype) {
$('#QD-message-container').css({
'border-top': '1px solid #EEE',
'padding-top': '5px',
'margin-top': '5px'
});
var msgbox = document.createElement('div');
msgbox.style.width = "90%";
msgbox.style.margin = "0 auto";
msgbox.style.marginBottom = "5px";
msgbox.style.padding = "2px 5px 2px 20px";
msgbox.style.borderRadius = "0.2em";
msgbox.style.textAlign = "left";
if (QD_msgtype == 'error') {
msgbox.style.backgroundColor = "#FF9494";
msgbox.style.border = "2px solid #CB4154";
msgbox.innerHTML = "<b>ERROR:</b> ";
}
if (QD_msgtype == 'success') {
msgbox.style.backgroundColor = "#93DB70";
msgbox.style.border = "2px solid #659D32";
msgbox.innerHTML = "<b>OK:</b> ";
}
msgbox.innerHTML += QD_msg;
$(msgbox).appendTo('#QD-message-container');
}
};
$(document).ready(function() {
mw.loader.using(['oojs-ui', 'mediawiki.util']).done(function() {
if (mw.config.get('wgContentLanguage') !== "pl" && mw.config.get('wgNamespaceNumber') == -1 && mw.config.get('wgTitle').toLowerCase() == "qd" && ((mw.config.get("wgGlobalGroups").indexOf("global-sysop") >= 0) || (mw.config.get("wgGlobalGroups").indexOf("steward") >= 0) || (mw.config.get("wgUserGroups").indexOf("sysop") >= 0))) {
$('#mw-content-text').empty();
var QD_p = document.createElement('p');
QD_p.innerHTML = "QuickDelete (QD) tool allows you to quickly delete the pages contained in the category.<br /><br />Suffix <b>global sysop/steward action</b> is added automatically.";
$('#mw-content-text').append(QD_p);
QuickDelete.createFieldSet();
}
});
});