User:Evad37/Covery/sandbox.js: Difference between revisions

Content deleted Content added
.
enough changed for minor version bump
 
(31 intermediate revisions by the same user not shown)
Line 1:
/* jshint esversion: 6, laxbreak: true, undef: true, eqnull: true, maxerr: 999 */
/* globals console, document, File, FileReader, fetch, window, $, mw, OO */
// <nowiki>
var setupCovery = function setupCovery() {
var SCRIPT = {
name: 'Covery',
version: '1.35.0',
ad: ' (using [[User:Evad37/Covery|Covery]])'
};
Line 123 ⟶ 125:
'Infobox computer game',
'Videogame infobox',
'Video game infobox',
'Infobox video game series',
'Infobox VG series',
'Infobox video game franchise'
];
var infoboxName = toSentanceCase(infobox.name);
Line 161 ⟶ 166:
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
ctx.drawImage(origImg, 0, 0, width, height);
 
Line 433 ⟶ 438:
this.content = new OO.ui.FieldsetLayout();
 
this.fileSelect = new OO.ui.SelectFileWidget();{
droppable: true,
showDropTarget: true,
// thumbnailSizeLimit: 0,
$element: $("<div style='background: #eee;'>")
});
// this.fileSelect.$element
// .find(".oo-ui-selectFileWidget-dropTarget").css({"height":"auto"});
// this.fileSelect.$element
// .find(".oo-ui-selectFileWidget-thumbnail").css({"display":"none"});
// this.fileSelect.$element
// .find(".oo-ui-selectFileInputWidget-info").css({"margin":"0"});
this.urlInput = new OO.ui.TextInputWidget({
type: 'url',
Line 452 ⟶ 469:
this.fileSelectField = new OO.ui.FieldLayout(this.fileSelect, {
label: 'Upload a file...',
align: 'lefttop'
});
this.fileSelect.field = this.fileSelectField;
Line 466 ⟶ 483:
this.titleInputField = new OO.ui.FieldLayout(this.titleInput, {
label: 'File name',
align: 'lefttop'
});
this.titleInputField.$element
.find(".oo-ui-fieldLayout-messages").css({"margin-top":"2em"}); // prevent errors overlapping input
this.captionInputField = new OO.ui.FieldLayout(this.captionInput, {
label: 'Caption',
Line 491 ⟶ 510:
this.content.addItems([
this.fileSelectField,
// this.urlInputField,
this.titleInputField,
//this.imagePreviewField,
this.captionInputField,
this.altTextInputField,
Line 542 ⟶ 561:
{ add: 'onPlatformInputAdd' }
);
(function(self) {
this.platformInput.$element.find('input').on('blur', this.onPlatformInputBlur);
self.platformInput.$element.find('input').on('blur', function() {
self.onPlatformInputBlur.call(self);
});
})(this);
};
 
Line 563 ⟶ 586:
self.updateSize();
widgetUsed.popPending();
if (widgetUsed.setIndicator('required'); {
widgetUsed.setIndicator('required');
}
otherWidget.setDisabled(false);
if (otherWidget.setIndicator(null); {
otherWidget.setIndicator(null);
}
self.titleInput.setValue(fileName);
self.onRequiredInputChange();
Line 575 ⟶ 602:
self.resizedFile = null;
widgetUsed.popPending();
if (widgetUsed.setIndicator('clear'); {
widgetUsed.setIndicator('clear');
}
widgetUsed.field.setErrors([errorMessage]);
otherWidget.setDisabled(false);
if (otherWidget.setIndicator(null); {
otherWidget.setIndicator(null);
}
self.onRequiredInputChange();
}
Line 584 ⟶ 615:
};
 
CoveryDialog.prototype.onFileSelectChange = function(filefiles) {
var file = files && files[0];
if (!file || !file.name) {
return;
}
this.onFileChosen(file, file.name, this.fileSelect, this.urlInput);
};
Line 598 ⟶ 633:
return;
}
var filePromise = fetch(value, {mode: 'no-cors'}).then(function(result) {
return result.blob();
});
Line 607 ⟶ 642:
CoveryDialog.prototype.onTitleInputFlag = function(flag) {
if (flag.invalid === true) {
if (this.titleInput.getValue().length) {
this.titleInputField.setErrors(['Invalid file name']);
}
this.actions.setAbilities({
upload: false
Line 613 ⟶ 651:
this.onRequiredInputChange();
}
};
 
CoveryDialog.prototype.checkMimes = function() {
var mimeLookup = {
'.bmp': 'image/bmp',
'.gif': 'image/gif',
'.jpeg': 'image/jpeg',
'.jpg': 'image/jpeg',
'.png': 'image/png',
'.svg': 'image/svg+xml',
'.tif': 'image/tiff',
'.tiff': 'image/tiff'
};
var fileMime = (this.resizedFile && this.resizedFile.type) || '';
var titleParts = this.titleInput
.getValue()
.toLowerCase()
.match(/.*(\..*)$/, '$1');
var titleExtension = titleParts && titleParts[1];
var impliedTitleMime = mimeLookup[titleExtension] || '';
return fileMime === impliedTitleMime;
};
 
Line 620 ⟶ 679:
$.when((change && change.titleIsValid) || this.titleInput.getValidity()).then(
function() {
// remove any old title input errors
self.titleInputField.setErrors([]);
// check file mime matches title mime
var titleHasCorrectExtension = self.checkMimes();
if (!titleHasCorrectExtension && self.resizedFile) {
self.titleInputField.setErrors([
'Invalid file extension (file is a ' +
self.resizedFile.type
.replace('image/', '')
.replace(/\+.*$/, '')
.toUpperCase() +
' image)'
]);
}
 
var requirementsMet =
!self.fileSelect.isPending() &&
Line 625 ⟶ 699:
!!self.resizedFile &&
!!self.titleInput.getValue().length &&
titleHasCorrectExtension &&
!!self.developerInput.getValue().length &&
!!self.publisherInput.getValue().length;
Line 632 ⟶ 707:
},
function() {
if (self.titleInput.getValue().length) {
self.titleInputField.setErrors(['Invalid file name']);
}
self.actions.setAbilities({
upload: false
Line 658 ⟶ 736:
CoveryDialog.prototype.onPlatformInputBlur = function() {
this.platformInput.doInputEnter();
};
 
// Specify the dialog height (or don't to use the automatically generated height).
Line 699 ⟶ 777:
});
});
var self = this;
data.api
.get({
action: 'query',
format: 'json',
list: 'categorymembers',
cmtitle: 'Category:Video game covers',
cmprop: 'title',
cmtype: 'subcat',
cmlimit: 'max'
})
.then(function(response) {
return response.query.categorymembers
.map(function(category) {
return category.title;
})
.map(function(categoryTitle) {
return {
data: categoryTitle.replace(/Category\:(.+) game covers/, '$1')
};
});
})
.then(function(platforms) {
self.platformInput.addOptions(platforms);
});
}, this);
};
Line 730 ⟶ 833:
var fileTitle = mw.Title.newFromFileName(this.titleInput.getValue());
return new OO.ui.Process(function() {
var platformValues = this.platformInput.getItems().map(function(item) {
return item.getData();
});
return (
this.uploaded ||
Line 739 ⟶ 845:
this.developerInput.getValue(),
this.publisherInput.getValue(),
platformValues
this.platformInput.getValue()
),
fileTitle
Line 893 ⟶ 999:
function(data) {
if (data && data.sucess) {
window.___location.reload();
}
},
Line 979 ⟶ 1,085:
) {
$.when(setupForTesting(), $.ready()).then(function() {
mw.loader.load('https://codeen.jquerywikipedia.comorg/qunitw/index.php?title=User:Evad37/qunit-2.68.20.css&action=raw&ctype=text/css', 'text/css');
$.getScript('https://codeen.jquerywikipedia.comorg/qunitw/index.php?title=User:Evad37/qunit-2.68.20.js&action=raw&ctype=text/javascript', function() {
/* globals QUnit */
QUnit.module('Get parameters from a template');
QUnit.test('Single unnamed param', function(assert) {
Line 1,516 ⟶ 1,623:
'{{Videogame infobox}}',
'{{Video game infobox}}',
'{{Infobox video game series}}',
'{{Infobox VG series}}',
'{{Infobox video game franchise}}',
'{{infobox video game}}',
'{{infobox Arcade Game}}',
Line 1,534 ⟶ 1,644:
'{{infobox computer game}}',
'{{videogame infobox}}',
'{{video game infobox}}',
'{{infobox video game series}}',
'{{infobox VG series}}',
'{{infobox video game franchise}}'
];
infoboxesExpectedToPass.forEach(infobox => {
for (let infobox of infoboxesExpectedToPass) {
QUnit.test(infobox, function(assert) {
let infoboxObject = getInfoboxTemplate(infobox);
Line 1,542 ⟶ 1,655:
assert.deepEqual(checkedInfobox, infoboxObject, infobox + ' passes check');
});
});
QUnit.module('Infobox check (expected fail)');
var infoboxesExpectedToFail = [
Line 1,552 ⟶ 1,665:
'{{infobox foo}}'
];
infoboxesExpectedToFail.forEach(infobox => {
for (let infobox of infoboxesExpectedToFail) {
QUnit.test(infobox, function(assert) {
let infoboxObject = getInfoboxTemplate(infobox);
Line 1,559 ⟶ 1,672:
}, infobox + ' throws an error');
});
});
 
QUnit.module('Make infobox wikitext');
Line 1,660 ⟶ 1,773:
'mediawiki.util',
'mediawiki.api',
'mediawiki.RegExp',
'oojs-ui-core',
'oojs-ui-widgets',