×
Create a new article
Write your page title here:
We currently have 98 articles on DC Comics Wiki. Type your article name above or create one of the articles listed here!



    DC Comics Wiki
    Revision as of 00:57, 15 May 2024 by TheDemon08 (talk | contribs)

    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)
    • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
    • Opera: Press Ctrl-F5.
    /**
     * Name:        MultiUploadJS
     * Author:      Fujimaru-kun
     * Based on:    MultiUpload (by Gguigui1 and KhangND), Gadget-multiupload.js (by Pcj)
     * Description: Allows upload of multiple files at the same time
     */
    mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function () {
        'use strict';
        var config = mw.config.get([
                'wgCanonicalSpecialPageName',
                'wgUserLanguage',
                'wgUserGroups',
                'wgVersion'
            ]);
    
            if (
                window.MultiUploadJSLoaded ||
                config.wgCanonicalSpecialPageName !== "Upload" ||
                $("#wpForReUpload").val() || //Disabling for Reupload
                !/confirmed/.test(config.wgUserGroups.join())
            ) {
                return;
            }
            window.MultiUploadJSLoaded = true;
    
            var api = new mw.Api(),
                i18n,
                token = mw.user.tokens.get('csrfToken'),
                files = [],
                stdmsgs = ['filedesc', 'license-header', 'fileexists-no-change', 'fileexists-duplicate-version', 'verification-error', 'fileexists-shared-forbidden', 'permissiondenied', 'watchthisupload', 'ignorewarnings', 'filewasdeleted'].join('|'),
                limit = (window.MultiUploadoption && window.MultiUploadoption.max) ? window.MultiUploadoption.max : -1,
                defaultlicense = (window.MultiUploadoption && window.MultiUploadoption.defaultlicense) ? window.MultiUploadoption.defaultlicense : '',
                curFile = 0;
    
            function init() {
                setLimit();
    
                i18n = getMessages();
                $("#wpUploadFile").parent().parent().addClass("regularFileSelect");
                $("tr.regularFileSelect").after('<tr class="multipleFileSelect"><td class="mw-label">&nbsp;</td><td class="mw-input"><input type="file" id="multiupload" multiple /></td></tr>');
                $("#mw-htmlform-source > tbody > tr.mw-htmlform-field-UploadSourceField.regularFileSelect").remove();
                $("#mw-upload-form > fieldset:nth-of-type(3)").remove();
                $("#mw-upload-form > span > input.mw-htmlform-submit").remove();
                $("#mw-upload-form > fieldset:nth-of-type(2)").hide();
                $("span.mw-htmlform-submit-buttons").append('<input type="button" value="' + i18n['uploadfiles'] + '" class="multipleFileSelect" id="multiFileSubmit" />');
                $("span.mw-htmlform-submit-buttons").append('<input type="button" value="' + 'reset' + '" class="multipleFileSelect" id="multiFileReset" />');
                $("#multiupload").change(addFields);
                $("#multiFileSubmit").click(uploadFiles);
                $("#multiFileReset").click(reset);
            }
            
            /*
            * Set Maximum number of file the user can import at one time (can be overriden by a config var but its value is capped at 100)
            */
            function setLimit() {
                if (limit < 0 ||
                    limit > 100 ||
                    typeof limit !== 'number') {
                    if (/staff|util|bot-global|wiki-specialist/.test(config.wgUserGroups.join())) {
                        limit = 200;
                    } else if (/bureaucrat|bot/.test(config.wgUserGroups.join())) {
                        limit = 70;
                    } else if (/sysop/.test(config.wgUserGroups.join())) {
                        limit = 50;
                    } else if (/rollback|content-moderator/.test(config.wgUserGroups.join())) {
                        limit = 30;
                    } else {
                        limit = 20;
                    }
                }
            }
    
            /*
            * Add Fields to change the filename, description and license of each file to DOM
            */
            function addFields() {
                reset();
                files = $("#multiupload")[0].files;
                if (files.length <= limit) {
                	var watchuploads = mw.user.options.get('watchuploads') == "1" ? 'checked=\"checked\"' : '';
                    for (var index = 0; index < files.length; index++) {
                        var element = files[index];
                        var filedesc = $("#mw-upload-form > fieldset:nth-of-type(2)").clone();
                        filedesc.attr("id", "file-" + index);
                        filedesc.children("legend").text('imagename' + (index + 1));
                        filedesc.find("#mw-htmlform-description > tbody > tr.mw-htmlform-field-HTMLTextField > td.mw-label > label").attr("for", "wpDestFile" + index);
                        filedesc.find("#mw-htmlform-description > tbody > tr.mw-htmlform-field-HTMLTextAreaField > td.mw-label > label").attr("for", "wpUploadDescription" + index);
                        filedesc.find("#wpDestFile").attr("name", "wpDestFile" + index).attr("id", "wpDestFile" + index).val(element.name);
                        filedesc.find("#wpUploadDescription").attr("name", "wpUploadDescription" + index).attr("id", "wpUploadDescription" + index);
                        filedesc.find("#wpLicense").attr("name", "wpLicense" + index).attr("id", "wpLicense" + index).val(defaultlicense);
                        filedesc.append("<hr />");
                        filedesc.append("<td class=\"mw-input\"><input name=\"wpWatchthis" + index + "\" type=\"checkbox\" value=\"1\" " + watchuploads + " id=\"wpWatchthis" + index + "\">&nbsp;<label for=\"wpWatchthis" + index + "\">" + 'watchthisupload' + "</label></td>");
                        filedesc.append("<td class=\"mw-input\"><input name=\"wpIgnoreWarning" + index + "\" type=\"checkbox\" value=\"1\" id=\"wpIgnoreWarning" + index + "\">&nbsp;<label for=\"wpIgnoreWarning" + index + "\">" + 'ignorewarnings' + "</label></td>");
                        $("#mw-upload-form > span").before(filedesc.show());
                    }
                } else {
                    alert('limit');
                    $("#multiupload").val("");
                    reset();
                }
            }
    
            /*
            * Reset form to its initial state
            */
            function reset() {
                files = [];
                $("#mw-upload-form > fieldset:nth-of-type(2) ~ fieldset").remove();
            }
    
            /*
            * Get standard messages for supported errors 
            */
            function getMessages() {
                var i18n = [];
                api.get({
                    action: 'query',
                    meta: 'allmessages',
                    amlang: config.wgUserLanguage,
                    ammessages: stdmsgs
                }).then(function (data) {
                    var msg = data.query.allmessages;
                    msg.forEach(function (message) {
                        i18n[message.name] = message['*'];
                    });
                });
    
                return i18n;
            }
    
            /* 
            * Initiate uploading process
            */
            function uploadFiles() {
    
                if (files.length === 0) {
                    alert('nofile');
                    return false;
                } else if (files.length > limit) {
                    alert('limit');
                    return false;
                }
    
                $("#firstHeading").text('uploading');
                $("#mw-content-text").hide();
                $("<h3>" + 'successful' + "</h3><ul id='multiUploadDone'></ul><div style='display:none;' id='multiUploadFailed'><h3>" + 'failed' + "</h3><ul></ul></div>").prependTo("#content");
                apiUpload();
            }
            
            /*
            * Make API Requests to upload files
            */
            function apiUpload() {
                if (curFile > files.length) {
                    $("<h3>" + 'done' + "</h3>").appendTo("#content");
                    return;
                }
                if (files[curFile] === undefined) {
                    curFile++;
                    apiUpload();
                    return;
                }
                var filename = $("#wpDestFile" + curFile).val() || files[curFile].name;
                var license = $("#wpLicense" + curFile + " option:selected").prop("title") !== "{{}}" ? "== " + 'license-header' + " ==\n" + $("#wpLicense" + curFile + " option:selected").prop("title") : "";
                var description = $("#wpUploadDescription" + curFile).val() ? "== " + i18n['filedesc'] + " ==\n" + $("#wpUploadDescription" + curFile).val() : "";
                var watch = $("#wpWatchthis" + curFile).is(":checked") ? 'watch' : 'nochange';
                var warning = $("#wpIgnoreWarning" + curFile).is(":checked");
                var params = {
                    token: token,
                    filename: filename,
                    text: description + "\n" + license,
                    watchlist: watch,
                    ignorewarnings: '1',
                    format: 'json'
                };
                if (!warning) {
                    delete params.ignorewarnings;
                }
    
                api.upload(files[curFile], params).done(function (d) {
                    console.log(d);
                    $("#multiUploadDone").append('<li><a href="' + d.upload.imageinfo.descriptionurl + '" target="_blank">' + d.upload.filename + '</a></li>');
                    curFile++;
                    apiUpload();
                }).fail(function (d) {
                    if (!warning || stdmsgs.includes(d)) {
                        $("#multiUploadFailed ul").append('<li>' + filename + ': ' + d + "File:"+filename + '</li>');
                        $("#multiUploadFailed").show();
                    } else {
                        $("#multiUploadDone").append('<li>' + filename + ': ' + d + '</li>');
                    }
                    curFile++;
                    apiUpload();
                });
            }
    init();
    });
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.