MediaWiki:SimpleBatchUploadUpgrade.js: Unterschied zwischen den Versionen

(Die Seite wurde neu angelegt: „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…“)
 
Keine Bearbeitungszusammenfassung
Markierung: Manuelle Zurücksetzung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
(kein Unterschied)

Aktuelle Version vom 13. Juni 2025, 10:56 Uhr

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');
                    }
                });
            });
        });
    });
}