MediaWiki:Common.js

From Infinity Wars Wiki
Jump to navigation Jump to search

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.
/* Any JavaScript here will be loaded for all users on every page load. */

$(function() {
	if (!mw.config.get('wgUserGroups').includes('sysop') ||
		mw.config.get('wgPageName') !== 'Special:UploadCards') return;
	$('#firstHeading,title').text('Upload Cards');
	$('#mw-content-text').html('<p>Upload new or update existing cards here</p><p><input type="file" id="cardsJson" /> <button id="uploadCards">Upload Cards</button></p>');
	$('#uploadCards').click(function() {
		var file = document.getElementById('cardsJson').files[0];	
		if (file == undefined) {
			alert("You haven't specified a file yet!");
			return;
		}
		var reader = new FileReader();
		reader.readAsText(file);
		reader.onload = function() {
			function findPage(pageName) {
				for (var p in pages) {
					if (pages[p].pagename == pageName) return p;
				}
				return -1;
			}
			
			var data;
			try {
				data = JSON.parse(reader.result);
			}
			catch (error) {
				alert("Error:\n"+error);
				return;
			}
			$('#mw-content-text').append('<h3 id="cardsStatus">Processing...</h3>');
			var pages = [];
			var a = new mw.Api();
			for (var c in data.IW_Cards) {
				var card = data.IW_Cards[c];
				var entries = Object.entries(card);
				var cardText = '{{Card';
				for (var e in entries) {
					var entry = entries[e];
					cardText += '\n|'+entry[0]+'='+entry[1];
				}
				cardText += '\n}}';
				var pageIdx = findPage(card.Cardname);
				if (pageIdx == -1) pages.push({pagename:card.Cardname,text:'[[File:'+card.Cardname+'.png|left]]\n'+cardText});
				else pages[pageIdx].text += cardText;
			}
			
			var p = 0;
			function eNP() {
				if (p == pages.length) {
					$('#cardsStatus').text('Done!');			
					return;
				}	
				var page = pages[p];
				a.postWithEditToken({action:'edit',title:page.pagename,text:page.text,summary:'Updating card pages',minor:1}).done(function(data){
					p++;
					eNP();
				}).fail(function(data) {
					if (!$('#cardsErrors').length) $('#cardsStatus').after('<p id="cardsErrors">(Errors encountered during processing</p>');	
					p++;
					eNP();
				});
			}
			eNP();
			
		}
	});
});

mw.loader.using(['site', 'mediawiki.util']).then(function() {
	i18n = {
		multiupload: "Upload multiple files:",
		yes: "Yes",
		no: "No",
		sourcefiles: "Source files:",
		uploadfiles: "Upload files",
		nofiles: "Please select some files first.",
		nolicense: "Please select a valid license first.",
		summary: "Summary",
		license: "License",
		uploading: "Uploading files...",
		uploaded: "Uploaded:",
		failed: "Failed:",
		done: "Done."
	};
	if (mw.config.get("wgCanonicalSpecialPageName")!=="Upload") return;	
	$("#wpUploadFile").parent().parent().addClass("regularFileSelect");
	$("tr.regularFileSelect").before('<tr><td class="mw-label">'+i18n.multiupload+'</td><td class="mw-input"><label><input type="radio" name="multipleFiles" value="'+i18n.yes+'" /> '+i18n.yes+'</label> &nbsp; <label><input type="radio" name="multipleFiles" value="'+i18n.no+'" checked="" /> '+i18n.no+'</label></td></tr>');
	$("tr.regularFileSelect").after('<tr class="multipleFileSelect" style="display:none;"><td class="mw-label">'+i18n.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");
	$("input[name='wpUpload']").after('<input type="button" value="'+i18n.uploadfiles+'" class="multipleFileSelect" style="display:none;" id="multiFileSubmit" />');
	$("input[name='multipleFiles']").change(function(){
		if (this.value===i18n.yes) {
			$(".regularFileSelect").hide();
			$(".multipleFileSelect").show();
		}
		else {
			$(".regularFileSelect").show();
			$(".multipleFileSelect").hide();
		}
	});
	$("#multiFileSubmit").click(function() {
		files = $("#multiupload")[0].files;
		if (files.length === 0) {
			alert(i18n.nofiles);
			return false;
		}/*
		if ($("#wpLicense option:selected").val() === "" && !mw.config.get('UMFBypassLicenseCheck')) {
			alert(i18n.nolicense);
			return false;
		}*/
		comment = $("#wpUploadDescription").val();
		license = ($("#wpLicense option:selected").val() === "")?"":"\n== "+i18n.license+" ==\n"+$("#wpLicense option:selected").prop("title");
		text = (comment !== "" ? "== " + i18n.summary + " ==\n" + comment : "") + license;
		watch = "preferences";
		if ($("#wpWatchthis").is(":checked")) watch = "watch";
		else watch = "nochange";
		curFile = 0;
		$("#firstHeading").text(i18n.uploading);
		$("#mw-content-text").html("<h3>"+i18n.uploaded+"</h3><ul></ul><div style='display:none;' id='multiUploadFailed'><h3>"+i18n.failed+"</h3><ul></ul></div>");
		function gNF() {
			if(curFile>files.length) {
				$("#mw-content-text").append("<h3>"+i18n.done+"</h3>");
				return;
			}
			if(files[curFile] === undefined) {
				curFile++;
				gNF();
				return;
			}
			fd = new FormData();
			fd.append("action","upload");
			fd.append("token",mw.user.tokens.get('csrfToken'));
			fd.append("filename",files[curFile].name);
			fd.append("file",files[curFile]);
			fd.append("comment",comment);
			fd.append("text",text);
			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[curFile].name+'</li>');
				$("#multiUploadFailed").show();
				}
				curFile++;
				gNF();
			}).fail(function(d) {
				$("#multiUploadFailed ul").append('<li>'+files[curFile].name+'</li>');
				$("#multiUploadFailed").show();
				curFile++;
				gNF();
			});
		}
		gNF();
	});
});