MediaWiki:SimpleBatchUploadUpgrade.js
Aus FürthWiki
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
if (mw.config.get('wgCanonicalSpecialPageName') === 'BatchUpload') {
$(function () {
const $uploadForm = $('#fileupload');
const $uploadTable = $('<table id="file-preview"><thead><tr><th>Datei</th><th>Neuer Name</th><th>Status</th></tr></thead><tbody></tbody></table>');
const $uploadButton = $('<button id="start-upload" disabled>📤 Hochladen</button>');
let fileEntries = [];
// Upload-Button und Tabelle einfügen
$uploadForm.before($uploadTable);
$uploadForm.after($uploadButton);
// Verhindere Sofort-Upload
$uploadForm.fileupload('option', 'autoUpload', false);
// Datei-Existenzprüfung via MediaWiki-API
function checkFileExists(fileName, callback) {
$.get(mw.util.wikiScript('api'), {
action: 'query',
format: 'json',
titles: 'File:' + fileName
}).done(function (data) {
const exists = data.query.pages && !data.query.pages["-1"];
callback(exists);
});
}
// Prüft alle Dateien in der Liste neu (nach Umbenennung)
function recheckAll() {
let allValid = true;
fileEntries.forEach(entry => {
const newName = entry.input.val().trim();
checkFileExists(newName, function (exists) {
if (exists) {
entry.status.text('⚠️ Existiert');
entry.row.css('background-color', '#ffe0e0');
allValid = false;
} else {
entry.status.text('✅ OK');
entry.row.css('background-color', '#e0ffe0');
}
// Nur Button aktivieren, wenn alle Namen OK sind
$uploadButton.prop('disabled', !fileEntries.every(en =>
en.status.text() === '✅ OK'
));
});
});
}
// Drag & Drop: Dateien hinzufügen
$uploadForm.on('fileuploadadd', function (e, data) {
fileEntries = []; // Reset
$uploadTable.find('tbody').empty();
data.files.forEach((file, index) => {
const defaultName = file.name;
const row = $('<tr></tr>');
const input = $('<input type="text">').val(defaultName);
const status = $('<td>⏳</td>');
const nameCell = $('<td></td>').append(input);
row.append($('<td></td>').text(file.name)); // Originalname
row.append(nameCell);
row.append(status);
$uploadTable.find('tbody').append(row);
const entry = {
file: file,
data: data,
input: input,
status: status,
row: row
};
fileEntries.push(entry);
// Erste Prüfung
checkFileExists(defaultName, function (exists) {
if (exists) {
status.text('⚠️ Existiert');
row.css('background-color', '#ffe0e0');
} else {
status.text('✅ OK');
row.css('background-color', '#e0ffe0');
}
$uploadButton.prop('disabled', !fileEntries.every(en =>
en.status.text() === '✅ OK'
));
});
// Wenn Benutzer Namen ändert, neu prüfen
input.on('input', function () {
recheckAll();
});
});
});
// Upload starten bei Klick
$uploadButton.on('click', function (e) {
e.preventDefault();
fileEntries.forEach(entry => {
const formData = new FormData();
formData.append('file', entry.file);
formData.append('filename', entry.input.val().trim());
// Optional: weitere Parameter, wie Edit-Summary oder Watch
formData.append('token', mw.user.tokens.get('csrfToken'));
formData.append('action', 'upload');
formData.append('format', 'json');
formData.append('ignorewarnings', '1'); // optional
$.ajax({
url: mw.util.wikiScript('api'),
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (res) {
entry.status.text('✅ Hochgeladen');
entry.row.css('background-color', '#d0f0d0');
},
error: function () {
entry.status.text('❌ Fehler');
entry.row.css('background-color', '#fdd');
}
});
});
});
});
}