mw.loader.load( '/MediaWiki:LastEdited.js?action=raw&ctype=text/javascript' );
window.FastDeleteNoConfirm = true;
alert(wgVisualEditorNamespaces);
if(wgPageName == "Project_New_America_(Earth-2:_Post-Crisis)"){
window.history.replaceState(null,null, "/wiki/Project:_New_America_(Earth-2:_Post-Crisis)");
}
if(wgPageName == "DC_Multiverse_Wiki:New_America_(Earth-2:_Post-Crisis)"){
window.location.replace("/wiki/Project_New_America_(Earth-2:_Post-Crisis)");
}
window.setInterval(function(){
$('li[title="Project New America (Earth-2: Post-Crisis)"]').attr("title", "Project: New America (Earth-2: Post-Crisis)");
$('li[title="Project: New America (Earth-2: Post-Crisis)"] a.wds-global-navigation__dropdown-link').html('<a class="wds-global-navigation__dropdown-link" style="color:black;">Project: New America (Earth-2: Post-Crisis)</a>');
},0);
$(function() {
var actions = mw.config.get("wgWikiaPageActions"),
oldbtn = $(".UserProfileActionButton"),
masthead = $(".user-identity-box-edit");
if ( $( '#mw-content .hgroup' ).length > 0 === true ) {
function getAction(id) {
mw.loader.load( '/MediaWiki:TagRightsManagement.js?action=raw&ctype=text/javascript' );
return actions.filter(function(action){return action.id === "page:"+id})[0]
}
function renderSVGs(wds) {
wds.render(".user-identity-box-edit .wds-button-group")
}
if(mw.config.get("wgNamespaceNumber") == 2 && oldbtn.length && masthead.length) {
importArticle({type: "style", article: "u:dev:MediaWiki:ModernProfile/EditButton.css"})
oldbtn.remove();
if(actions) {
var newbtn, drop, dropbtns = [];
var a_edit = getAction("Edit")
if(a_edit) {
newbtn = $("<a>").attr({
"class": "wds-button wds-is-secondary wds-is-squished",
"id": "ca-edit",
"href": a_edit.href
}).append(
$("<span>").attr({
"class": "dev-wds-icon",
"id": "dev-wds-icons-pencil-small"
}),
$("<span>").text(a_edit.caption)
)
}
["History", "Move", "Protect", "Delete"].forEach(function(id){
var a = getAction(id);
if(a) dropbtns.push($("<li>").append($("<a>").attr("href", a.href).text(a.caption)))
})
if(dropbtns.length) {
var dropcontent = $("<ul>").attr("class", "wds-list wds-is-linked")
drop = $("<div>").attr("class", "wds-dropdown").append(
$("<div>")
.attr("class", "wds-button wds-is-secondary wds-is-squished wds-dropdown__toggle")
.append(
$("<span>").attr({
"class": "dev-wds-icon",
"id": "dev-wds-icons-dropdown-tiny"
})
),
$("<div>")
.attr("class", "wds-dropdown__content wds-is-not-scrollable wds-is-right-aligned")
.append(dropcontent)
);
dropbtns.forEach(function(e){dropcontent.append(e)})
}
masthead.html(
$("<div>")
.attr("class", "wds-button-group")
.css({"float": "right"})
.append(newbtn, drop)
)
if(!window.dev || !window.dev.wds) {
mw.hook("dev.wds").add(renderSVGs);
importArticle({type: "script", articles: "u:dev:WDSIcons/code.js"})
} else renderSVGs(window.dev.wds)
}
}
});
/**
* @name MultiUpload
* @author Gguigui1, KhangND, Universal Omega
* @desc Allows selecting multiple files directly from the dialog box and upload them
* <nowiki>
*/
//License preview added by Universal Omega
wgAjaxLicensePreview=true;
window.MultiUploadLoaded = undefined;
function getLicensePreview(num) {
window.licenseSelectorCheck = function () {
var selector = document.getElementById("license" + num);
var selection = selector.options[selector.selectedIndex].value;
if (selector.selectedIndex > 0) {
if (selection == "") {
// Option disabled, but browser is broken and doesn't respect this
selector.selectedIndex = 0;
}
}
var wgUploadLicenseObj = {
'responseCache': {
'': ''
},
'fetchPreview': function (license) {
if (!mw.config.get('wgAjaxLicensePreview'))
return;
for (cached in this.responseCache) {
if (cached == license) {
this.showPreview(this.responseCache[license]);
return;
}
}
$('#license' + num).injectSpinner('license' + num);
var title = document.getElementById('imagename' + num).value;
if (!title)
title = 'File:Sample.jpg';
var url = mw.util.wikiScript('api')
+ '?action=parse&text={{' + encodeURIComponent(license) + '}}'
+ '&title=' + encodeURIComponent(title)
+ '&prop=text&pst&format=json';
var req = sajax_init_object();
req.onreadystatechange = function () {
if (req.readyState == 4 && req.status == 200) {
wgUploadLicenseObj.processResult(eval('(' + req.responseText + ')'), license);
}
};
req.open('GET', url, true);
req.send('');
},
'processResult': function (result, license) {
$.removeSpinner('license' + num);
this.responseCache[license] = result['parse']['text']['*'];
this.showPreview(this.responseCache[license]);
},
'showPreview': function (preview) {
var previewPanel = document.getElementById('mw-license-preview' + num);
if (previewPanel.innerHTML != preview)
previewPanel.innerHTML = preview;
}
};
// We might show a preview
wgUploadLicenseObj.fetchPreview(selection);
};
var wpLicense = document.getElementById('license' + num);
if (mw.config.get('wgAjaxLicensePreview') && wpLicense) {
// License selector check
wpLicense.onchange = licenseSelectorCheck;
// License selector table row
var wpLicenseRow = wpLicense.parentNode.parentNode;
var wpLicenseTbody = wpLicenseRow.parentNode;
var row = document.createElement('tr');
var td = document.createElement('td');
row.appendChild(td);
td = document.createElement('td');
td.id = 'mw-license-preview' + num;
row.appendChild(td);
wpLicenseTbody.insertBefore(row, wpLicenseRow.nextSibling);
}
}
if ( $( '#mw-content a[href*="/Special:UpdateProfile"]' ).length > 0 === true ) {
mw.loader.using([
$( '#profile-top, #mw-content #cosmos-articleHeader-actions' ).hover( function () {
'mediawiki',
$( '#mw-content #cosmos-articleHeader-actions' ).css( 'visibility', 'visible' );
'mediawiki.user',
}, function () {
'mediawiki.api',
$( '#mw-content #cosmos-articleHeader-actions' ).css( 'visibility', 'hidden' );
'jquery.client',
});
'jquery.spinner',
'ext.wikia.LinkSuggest'
], function() {
var groups = mw.config.get('wgUserGroups').join(),
config = mw.config.get([
'wgCanonicalSpecialPageName',
'wgNamespaceNumber',
'wgTitle',
'wgUserLanguage',
'wgUserName'
]);
// load protections
if(window.MultiUploadLoaded
|| config.wgUserName === null
|| !/autoconfirmed/.test(groups)) {
return;
} window.MultiUploadLoaded = true;
var storage = 'MultiUploadLicenses';
var content = $('#mw-content-text');
var allowTypes = $.map( mw.config.get("wgFileExtensions"), function(file_extensions) {
return('.' + file_extensions)
});
var style = {
block: {
display: 'inline-block',
margin: '0 8px'
},
textarea: {
width: '100%',
height: 150,
boxSizing: 'border-box',
resize: 'none'
}
};
function loadMWMessagesIfMissing(messages) {
var deferred = $.Deferred(),
missingMessages = messages.filter(function (message) { return !mw.messages.exists(message); });
if (!missingMessages.length) {
deferred.resolve();
} else {
$.get(mw.util.wikiScript('api'), {
format: 'json',
action: 'query',
meta: 'allmessages',
ammessages: missingMessages.join('|'),
amlang: config.wgUserLanguage
}).then(function (data) {
if ($.isArray(data.query.allmessages)) {
$.each(data.query.allmessages, function (_, message) {
if (message.missing !== '') {
mw.messages.set(message.name, message['*']);
}
});
}
deferred.resolve();
}, function () {
// Silently swallow failures; we don't want error reporting to stall just because we failed to fetch some messages.
deferred.resolve();
});
}
return deferred;
}
var MultiUpload = {
input: $(), // available on init
editor: $(), // available on init
button: $(), // available on init
fileCount: 0,// available on create
preload: function(i18n) {
$.extend(this, window.MultiUploadoption || {});
this.i18n = i18n;
// prepends a link in My Tools menu
$('<li>', {
'class': 'custom',
prependTo: '#my-tools-menu',
append: $('<a>', {
href: mw.util.getUrl('Special:MultiUpload'),
text: this.i18n.msg('title').plain()
})
});
// creates Special page
if(
(config.wgNamespaceNumber === -1 && config.wgTitle === 'MultiUpload') ||
(config.wgCanonicalSpecialPageName === 'Blankpage' && /MultiUpload/.test($.getUrlVar('blankspecial')))
) {
$('.page-header__title').text(this.i18n.msg('title').plain());
$('title').text(this.i18n.msg('title').plain());
this.init();
content.after(
$('<div>', {
id: 'mu-footer',
css: {
textAlign: 'center',
fontSize: 10,
borderTop: '1px solid',
marginTop: 10
},
text: this.i18n.msg('poweredby').plain() + ' ',
append: $('<a>', {
href: '//dev.fandom.com/wiki/MultiUpload',
text: 'MultiUpload'
})
})
);
}
},
init: function() {
content.empty().append([
$('<input>', {
id: 'fileinput',
type: 'file',
multiple: true,
accept: allowTypes.join(),
}),
$('<div>', {
id: 'editor',
css: { display: 'none' },
}),
$('<button>', {
id: 'go',
text: this.i18n.msg('update').plain(),
click: $.proxy(this.getLicenses, this)
})
]);
this.input = $('#fileinput');
this.editor = $('#editor');
this.button = $('#go');
},
notify: function(message, type) {
new BannerNotification(message, type, null).show();
},
getLicenses: function() {
var data = localStorage.getItem(storage);
if(data !== null) {
this.create(data);
var limit = this.max < this.fileCount ? this.max : this.fileCount;
for (i = 1; i <= limit; i++) {
getLicensePreview(i);
}
return;
}
$.get(mw.util.wikiScript('api'), {
action: 'query',
meta: 'allmessages',
ammessages: 'Licenses',
format: 'json'
}).success(
$.proxy(this.create, this)
).error($.proxy(function(data) {
this.notify(this.i18n.msg('errorapi').plain() + ' : ' + data.error.info, 'error');
}), this);
},
create: function(data) {
// conditions
var formatError = false;
this.fileCount = this.input[0].files.length;
$(this.input[0].files).each(function(i, file) {
if(!new RegExp(allowTypes.join('|\\'), 'i').test(file.name)) {
formatError = true;
return;
}
});
if (formatError) {
this.notify(this.i18n.msg('fileformat').plain(), 'warn');
return;
}
if (!this.input[0].files) {
this.notify(this.i18n.msg('browsersupport').plain(), 'notify');
return;
}
if (this.fileCount === 0) {
this.notify(this.i18n.msg('nofile').plain(), 'warn');
return;
}
if(!this.max
|| this.max < 0
|| this.max > 101
|| typeof this.max !== 'number') {
if (/staff|helper|util|bot-global/.test(groups)) {
this.max = 200;
} else if (/bureaucrat|bot/.test(groups)) {
this.max = 70;
} else if (/sysop/.test(groups)) {
this.max = 50;
} else if (/rollback/.test(groups)) {
this.max = 30;
} else {
this.max = 20;
}
}
if (!this.max) {
this.notify(this.i18n.msg('problem').plain(), 'error');
return;
}
// creates form
data = typeof data === 'object'
? data.query.allmessages[0]['*'].trim()
: data;
localStorage.setItem(storage, data); // retrieves licenses 1 time only
var licenses = data.split('\n');
var limit = this.max < this.fileCount ? this.max : this.fileCount;
for (i = 1; i <= limit; i++) {
$('<fieldset>', {
id: 'field' + i,
appendTo: this.editor,
append: [
$('<legend>', {
text: this.i18n.msg('imagename').plain() + ' ' + i
}),
$('<div>', {
css: style.block,
text: this.i18n.msg('filename').plain(),
append: $('<input>', {
type: 'text',
id: 'imagename' + i,
'class': 'imagename',
val: this.input[0].files[i - 1].name
})
}),
$('<div>', {
css: style.block,
text: this.i18n.msg('licensetext').plain(),
append: $('<select>', {
id: 'license' + i,
'class': 'license',
append: $('<option>', {
val: 'none',
text: this.i18n.msg('nolicence').plain()
})
})
}),
$('<div>', {
id: 'progress' + i,
css: style.block
}),
]
});
}
for (i = 0; i < licenses.length; i++) {
if (licenses[i].indexOf('**') === 0) {
var name = licenses[i].split('|')[0].replace('**', '').trim(),
text = licenses[i].split('|')[1];
$('<option>', {
val: name,
text: text,
selected: name == this.defaultlicense,
appendTo: $('.license').find('optgroup:last-child')
});
} else {
$('<optgroup>', {
label: licenses[i].replace('*', '').trim(),
appendTo: $('.license')
});
}
}
$('<div>', {
appendTo: this.editor,
text: this.i18n.msg('filedescription').plain()
}),
$('<textarea>', {
appendTo: this.editor,
id: 'UploadDescription',
css: style.textarea,
}).linksuggest();
$('.license option[value="none"').attr("disabled", "true");
$('<button>', {
'class': 'secondary',
id: 'reset',
css: style.block,
text: this.i18n.msg('reset').plain(),
click: $.proxy(this.init, this),
appendTo: content
}),
$('<input>', {
type: 'checkbox',
id: 'ignorewarnings',
name: 'ignorewarnings',
appendTo: content
}),
$('<label>', {
'for': 'ignorewarnings',
text: this.i18n.msg('ignorewarnings').plain(),
appendTo: content
});
jQuery(function ($) {
'use strict';
if(window.defaultMultiUploadDescription){
if ($('#UploadDescription').val()) {
return;
}
var params = {
action: 'parse',
page: window.defaultMultiUploadDescription,
format: 'json',
prop: 'wikitext'
};
var api = new mw.Api();
api.get(params).done(function(data) {
$('#UploadDescription').val(data.parse.wikitext['*']);
});
}
$('.license option[value="none"').attr("disabled", "true");
});
license = $('#license' + i).find('option:selected').val(),
this.input.attr('disabled', true);
this.editor.show();
this.button
.unbind('click')
.click($.proxy(this.upload, this))
.text(this.i18n.msg('uploadfiles').plain());
},
upload: function() {
content.find('*').attr('disabled', true);
$('#reset').removeAttr('disabled');
var obj = this;
var loop = function (i) {
if (i <= obj.fileCount) {
var file = obj.input[0].files[i - 1],
filename = $('#imagename' + i).val() || file.name,
license = $('#license' + i).find('option:selected').val(),
text = $('#UploadDescription').val();
if(license == "none" && window.requireMultiUploadLicensing === true){
alert('Licensing must be complete.');
$('*').removeAttr('disabled');
return;
}
if(license !== "none") text = '== Summary ==\n' + text + '\n\n== Licensing ==\n{{' + license + '}}\n';
obj.uploadFile(file, filename, text, i).always(function(){
loop(i+1);
});
}
};
loop(1);
},
uploadFile: function(fileToUpload, fileName, text, index) {
// https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects
formdata = new FormData();
formdata.append('action', 'upload');
formdata.append('format', 'json');
formdata.append('filename', fileName);
formdata.append('token', mw.user.tokens.get('editToken'));
formdata.append('file', fileToUpload);
formdata.append('text', text);
formdata.append(
$('#ignorewarnings').prop('checked') ? 'ignorewarnings' : '', ''
);
// https://stackoverflow.com/a/8244082
return $.ajax({
url: mw.util.wikiScript('api'),
contentType: false,
processData: false,
type: 'POST',
data: formdata,
dataType: 'json',
xhr: function() { // https://stackoverflow.com/a/27030092
myXhr = $.ajaxSettings.xhr();
myXhr.upload.addEventListener('progress', function(e) {
MultiUpload.progress(index, e);
});
return myXhr;
},
success: $.proxy(function(data) {
this.success(index, data);
}, this),
error: $.proxy(function(_, __, error) {
this.notify(error, 'error');
}, this)
});
},
progress: function(index, e) {
var progress = e.loaded / e.total * 100;
$('#progress' + index).text(progress.toFixed(0) + '%');
},
success: function(index, data) {
// Error
if (data.error) {
var errorInfo, errorDetails;
function displayError() {
$('#progress' + index).html([
$('<strong/>').text(errorInfo),
(errorDetails === undefined) ? null : $('<br/>'),
(errorDetails === undefined) ? null : $('<div/>').text(errorDetails)
]);
}
// Excluding variants of `unknownerror`, we're going to ignore `error.info` since it mightn't be localized.
// See <https://github.com/Wikia/app/blob/release-886.001/includes/upload/UploadBase.php> for special cases.
if (data.error.code.startsWith('unknownerror')) {
errorInfo = data.error.info;
displayError();
} else {
var messages = [data.error.code];
if (data.error.code === 'verification-error') {
messages.push(data.error.details[0]);
}
loadMWMessagesIfMissing(messages).then(function () {
errorInfo = mw.msg(data.error.code);
if (data.error.code === 'verification-error') {
errorDetails = mw.msg.apply(null, data.error.details);
} else if (data.error.code === 'hookaborted') {
errorDetails = data.error.error; // TODO: Determine whether it's safe to assume this'll always be properly escaped HTML.
}
displayError();
});
}
return;
}
// Success
if(data.upload.result === 'Success') {
$('#progress' + index).text(this.i18n.msg('success').plain());
return;
}
// Warnings
var msg;
if(data.upload.warnings.hasOwnProperty('was-deleted')) {
msg = this.i18n.msg('deleted').plain();
} else if(data.upload.warnings.hasOwnProperty('duplicate')) {
msg = this.i18n.msg('duplicate').plain();
} else if(data.upload.warnings.hasOwnProperty('exists')) {
msg = this.i18n.msg('exist').plain();
} else {
msg = this.i18n.msg('success').plain();
}
$('#progress' + index).text(msg);
}
};
mw.hook('dev.i18n').add(function(i18n) {
i18n.loadMessages('MultiUpload').then(
$.proxy(MultiUpload.preload, MultiUpload)
);
});
importArticle({
type: 'script',
article: 'u:dev:MediaWiki:I18n-js/code.js'
});
});
|