MediaWiki:Gadget-BulkUpload/Runtime.js: Difference between revisions
From MiiWiki
Jump to navigationJump to search
mNo edit summary |
mNo edit summary |
||
Line 19: | Line 19: | ||
// Default file description that is loaded in the form: | // Default file description that is loaded in the form: | ||
const DEFAULTDESCRIPTION = `==Summary== | const DEFAULTDESCRIPTION = `==Summary== | ||
{{ | {{aboutfile | ||
|description = | |description= | ||
| | |game= | ||
|modified = | |media= | ||
| | |modified= | ||
| | |type= | ||
|type2= | |||
|source= | |||
|license= | |||
}}; | |||
document.title = PAGETITLE; | document.title = PAGETITLE; |
Revision as of 21:31, 20 November 2021
/** * Turns Special:BulkUpload into a bulk upload form. Filenames are kept as-is and all files will have the same information. * Created by SuperHamster on Nookipedia (https://nookipedia.com/wiki/User:SuperHamster) * Licensed under CC BY-SA 3.0 (https://creativecommons.org/licenses/by-sa/3.0/) **/ (function() { "use strict"; // Set title of page as it appears in the browser tab:: const PAGETITLE = "Bulk upload form - Animal Crossing Wiki - Nookipedia"; // List of warnings that always result in upload failure, even if ignorewarnings is checked: const FATALWARNINGS = ["fileexists-no-change", "verification-error", "abusefilter-disallowed"]; // Milliseconds to wait between uploads, to avoid rate limiting: const SLEEPTIME = 1000; // Default file description that is loaded in the form: const DEFAULTDESCRIPTION = `==Summary== {{aboutfile |description= |game= |media= |modified= |type= |type2= |source= |license= }}; document.title = PAGETITLE; $('#firstHeading').html('Bulk upload form'); $('#bodyContent').empty(); $('#bodyContent').append('<p>Use this form to upload multiple files at once. Filenames are kept as-is and all files will have the same information. To cancel an upload that is in progress, simply navigate away from this page.</p>'); var htmlUploadForm = `<fieldset> <legend>Files and info</legend> <label for="bulkUploadFiles">Select files:</label><br> <input type="file" id="bulkUploadFiles" multiple/><br><br> <label for="bulkUploadInfo">File description</legend><br> <textarea id="bulkUploadInfo" cols="80" rows="12">` + DEFAULTDESCRIPTION + `</textarea><br><br> <input type="checkbox" id="bulkUploadIgnoreWarnings"><label for="bulkUploadIgnoreWarnings">Ignore warnings (check to override existing files)</label><br><br> <button id="bulkUploadButton" type="button">Upload files</button> </fieldset> <br> <fieldset> <legend>Upload status</legend> <span id="bulkUploadStatus">Waiting for user to start upload.</span> </fieldset> `; $('#bodyContent').append(htmlUploadForm); document.getElementById('bulkUploadButton').addEventListener("click", function () { const api = new mw.Api(); var completed = 0; document.getElementById('bulkUploadButton').disabled = true; $('#bulkUploadStatus').empty(); function uploadFile(file, uploadParams, j) { setTimeout(function() { api.upload(file, uploadParams).always(response => { completed++; var status = ""; if (typeof response === 'object') { if (response.hasOwnProperty('upload') && upload.result == 'Success') { status = 'Upload succeeded for ' + file.name; } else { status = 'Upload <span style="color: red;">failed</span> for ' + file.name + ' due to unknown error'; } } else if (typeof response === 'string') { if (FATALWARNINGS.includes(response)) { status = 'Upload <span style="color: red;">failed</span> for ' + file.name + ' with error "' + response + '"'; } else { if ($('#bulkUploadIgnoreWarnings').is(':checked')) { status = 'Upload succeeded for ' + file.name + ' with warning "' + response + '"'; } else { status = 'Upload <span style="color: red;">failed</span> for ' + file.name + ' with error "' + response + '"'; } } } else { status = 'Upload <span style="color: red;">failed</span> for ' + file.name + ' due to unknown error'; } $('#bulkUploadStatus').append(status + ' (' + completed + ' out of ' + files.length + ')<br>'); if (completed == files.length) { $('#bulkUploadStatus').append('<span style="color: green;">Done!</span>'); document.getElementById('bulkUploadButton').disabled = false; } }); }, SLEEPTIME * j); } var files = $('#bulkUploadFiles')[0].files; for (var i = 0; i < files.length; i++) { var file = files[i]; var uploadParams = {}; if($('#bulkUploadIgnoreWarnings').is(':checked')) { uploadParams = { filename: file.name, text: $('#bulkUploadInfo').val(), comment: "Uploaded via bulk upload gadget", ignorewarnings: "yes", format: "json" }; } else { uploadParams = { filename: file.name, text: $('#bulkUploadInfo').val(), comment: "Uploaded via bulk upload gadget", format: "json" }; } uploadFile(file, uploadParams, i); } }); })();