The official discord link if you wish to join the discord: https://discord.gg/j5RKwCvAFu

Support the wiki on our official Ko-Fi page or Patreon page!

MediaWiki:Gadget-uploadMultipleFiles.js

From The Codex
Revision as of 17:04, 29 January 2024 by GiverOfThePeace (talk | contribs) (Created page with "→‎Modified version of https://dev.fandom.com/wiki/UploadMultipleFiles * from https://terraria.wiki.gg/wiki/MediaWiki:Gadget-uploadMultipleFiles.js: mw.loader.using(["site", "mediawiki.util"]).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[$la...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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.
/* Modified version of https://dev.fandom.com/wiki/UploadMultipleFiles
 * from https://terraria.wiki.gg/wiki/MediaWiki:Gadget-uploadMultipleFiles.js */
mw.loader.using(["site", "mediawiki.util"]).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(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();
			} else {
				$(".regularFileSelect").show();
				$(".multipleFileSelect").hide();
			}
		});

		$("#multiFileSubmit").click(function() {
			var files = $("#multiupload")[0].files;

			// Cancel upload if no files are selected
			if (files.length === 0) {
				alert(l10n("nofiles"));
				return false;
			}
			// Cancel upload if no license is selected
			if ($("#wpLicense option:selected").val() === "" && !mw.config.get("UMFBypassLicenseCheck")) {
				alert(l10n("nolicense"));
				return false;
			}

			// Description is summary + license + category
			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("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();
		});
	});
});