MediaWiki:Common.js
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> <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();
});
});