MediaWiki:Gadget-MultiUpload.js: Difference between revisions

From Pikipedia, the Pikmin wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 100: Line 100:


             // Description is summary + license + category
             // Description is summary + license + category
            var summary = $("#wpUploadDescription").val();
             var description = getUploadDescription();
             var description = getUploadDescription();
             var watch = getWatchlistPreference();
             var watch = getWatchlistPreference();
Line 125: Line 126:
                 fd.append("filename", files[currentFileIdx].name);
                 fd.append("filename", files[currentFileIdx].name);
                 fd.append("file", files[currentFileIdx]);
                 fd.append("file", files[currentFileIdx]);
                 fd.append("comment", description);
                 fd.append("comment", summary);
                fd.append("text", description);
                 fd.append("watchlist", watch);
                 fd.append("watchlist", watch);
                 fd.append("ignorewarnings", 1);
                 fd.append("ignorewarnings", 1);

Latest revision as of 16:08, October 28, 2024

// Author: pcj
// https://www.mediawiki.org/wiki/API:Upload

mw.loader.using(["site"]).then(function() {
    if (mw.config.get("wgCanonicalSpecialPageName") !== "Upload")
        return;
 
    var l10nFactory = l10nFactory || function($lang, $data) {
        return function ($key) {
            // (null == undefined) is true, (null === undefined) is false
            return ($data[$lang] && $data[$lang][$key] != null) ? $data[$lang][$key] : $data.en[$key];
        };
    };
 
    const l10n = l10nFactory(mw.config.get("wgUserLanguage"), {
        en: {
            multiupload: "Upload multiple files:",
            yes: "Yes",
            no: "No",
            sourcefiles: "Source files:",
            categoryname: "Category name:",
            categorynamehint: "Page name of the category the files will automatically be added to, e.g. Item images",
            categorynamespace: "Category",
            uploadfiles: "Upload files",
            nofiles: "Please select some files first.",
            nolicense: "Please select a valid license first.",
            summary: "Summary",
            license: "Licensing",
            categories: "Categories",
            uploading: "Uploading files...",
            uploaded: "Uploaded:",
            failed: "Failed:",
            done: "Done."
        }
    });
 
    const getUploadDescription = function() {
        var sections = [];
 
        var summary = $("#wpUploadDescription").val();
        var licenseDisplayName = $("#wpLicense option:selected").val();
        var categoryName = $("#multiFileCategory").val();
 
        if (summary !== "")
            sections.push("== " + l10n("summary") + " ==\n" + summary);
 
        if (licenseDisplayName !== "") {
            var licenseTemplateText = $("#wpLicense option:selected").prop("title");
            sections.push("== " + l10n("license") + " ==\n" + licenseTemplateText);
        }
 
        if (categoryName !== "")
            sections.push("[[" + l10n("categorynamespace") + ":" + categoryName + "]]");
 
        return sections.join("\n\n");
    };
 
    const getWatchlistPreference = function() {
        if ($("#wpWatchthis").is(":checked")) {
            return "watch";
        } else {
            return "nochange";
        }
    };
    
    $(function(){
        $("#wpUploadFile").parent().parent().addClass("regularFileSelect");
        $("tr.regularFileSelect").before('<tr><td class="mw-label">'+ l10n("multiupload") + '</td><td class="mw-input"><label><input type="radio" name="multipleFiles" value="'+ l10n("yes") + '" /> '+ l10n("yes") + '</label> &nbsp; <label><input type="radio" name="multipleFiles" value="'+ l10n("no") + '" checked="" /> '+ l10n("no") + '</label></td></tr>');
        $("tr.regularFileSelect").after('<tr class="multipleFileSelect" style="display:none;"><td class="mw-label">' + l10n("sourcefiles") + '</td><td class="mw-input"><input type="file" id="multiupload" multiple /></td></tr>');
        $("input[name='wpUpload']").addClass("regularFileSelect");
        $("#wpDestFile").parent().parent().addClass("regularFileSelect");
        $("#wpIgnoreWarning").parent().parent().addClass("regularFileSelect");
 
        // Append "category name" textbox to multiupload section
        $("#mw-upload-form #mw-htmlform-description tbody").append('<tr class="mw-htmlform-field-HTMLTextField multipleFileSelect" style="display:none;"><td class="mw-label"><label for="multiFileCategory"><abbr title="' + l10n("categorynamehint") + '">' + l10n("categoryname") + '</abbr></label></td><td class="mw-input"><input id="multiFileCategory" name="multiFileCategory" size="60"></td></tr>');
 
        $("input[name='wpUpload']").after('<input type="button" value="' + l10n("uploadfiles") + '" class="multipleFileSelect" style="display:none;" id="multiFileSubmit" />');
        $("input[name='multipleFiles']").change(function() {
            if (this.value === l10n("yes")) {
                $(".regularFileSelect").hide();
                $(".multipleFileSelect").show();
		$("#hotcatLabel").hide();
		$("#hotcatLabel + td").hide();
            } else {
                $(".regularFileSelect").show();
                $(".multipleFileSelect").hide();
		$("#hotcatLabel").show();
		$("#hotcatLabel + td").show();
            }
        });
 
        $("#multiFileSubmit").click(function() {
            var files = $("#multiupload")[0].files;
 
            // Cancel upload if no files are selected
            if (files.length === 0) {
                alert(l10n("nofiles"));
                return false;
            }

            // Description is summary + license + category
            var summary = $("#wpUploadDescription").val();
            var description = getUploadDescription();
            var watch = getWatchlistPreference();
 
            $("#firstHeading").text(l10n("uploading"));
            $("#mw-content-text").html("<h3>" + l10n("uploaded")  + "</h3><ul></ul><div style='display:none;' id='multiUploadFailed'><h3>" + l10n("failed") + "</h3><ul></ul></div>");
            
            var currentFileIdx = 0;
            var uploadCurrentFile;
            uploadCurrentFile = function() {
                if (currentFileIdx > files.length) {
                    $("#mw-content-text").append("<h3>"+ l10n("done") + "</h3>");
                    return;
                }
 
                if (files[currentFileIdx] === undefined) {
                    currentFileIdx++;
                    uploadCurrentFile();
                    return;
                }
 
                fd = new FormData();
                fd.append("action", "upload");
                fd.append("token", mw.user.tokens.get("csrfToken"));
                fd.append("filename", files[currentFileIdx].name);
                fd.append("file", files[currentFileIdx]);
                fd.append("comment", summary);
                fd.append("text", description);
                fd.append("watchlist", watch);
                fd.append("ignorewarnings", 1);
                fd.append("format", "json");
                
                $.ajax({
                    url: mw.util.wikiScript("api"),
                    method: "POST",
                    data: fd,
                    cache: false,
                    contentType: false,
                    processData: false,
                    type: "POST"
                }).done(function(d) {
                    if (d.error == undefined) {
                        $("#mw-content-text > ul").append('<li><a href="' + d.upload.imageinfo.descriptionurl + '" target="_blank">' + d.upload.filename + '</a></li>');
                    } else {
                        $("#multiUploadFailed ul").append('<li>' + files[currentFileIdx].name + '</li>');
                        $("#multiUploadFailed").show();
                    }
                    currentFileIdx++;
                    uploadCurrentFile();
                }).fail(function() {
                    $("#multiUploadFailed ul").append('<li>' + files[currentFileIdx].name + '</li>');
                    $("#multiUploadFailed").show();
                    currentFileIdx++;
                    uploadCurrentFile();
                });
            };
            uploadCurrentFile();
        });
    });
});