lupt/static/js/images.js

61 lines
2.1 KiB
JavaScript

let Images = class {
static setupImages() {
$('#file-input')[0].addEventListener('change', function(e) {
const file = e.target.files[0];
if (!file) {
return;
}
$('#progress_clip').removeClass('is-hidden');
$('#action_clip').addClass('is-hidden');
Images.compressImage(file, 0.1, 'image/webp');
});
}
static compressImage(file, qual, mime) {
var compressor = null;
var sendingTimeout = setTimeout(function() {
compressor.abort();
}, 5000);
compressor = new Compressor(file, {
quality: qual,
width: 320,
mimeType: mime,
success(result) {
clearTimeout(sendingTimeout);
var reader = new FileReader();
reader.readAsDataURL(result);
reader.onloadend = function() {
var base64data = reader.result;
if(base64data.length > 63488 && mime != 'image/jpeg') {
base64data = null;
result = null;
compressor = null;
Images.compressImage(file, 0.7, 'image/jpeg');
return;
} else if(base64data.length > 63488 && mime == 'image/jpeg') {
var prop = {
title: 'Warning',
text: 'file is too large!',
check: false
}; dialog(prop, function() {});
return;
}
socket.send(JSON.stringify({
cmd: "img",
src: base64data
}));
$('#progress_clip').addClass('is-hidden');
}
},
error(err) {
clearTimeout(sendingTimeout);
$('#progress_clip').addClass('is-hidden');
var prop = {
title: 'Warning',
text: "Failed to send image. Taking too long to compress.",
check: false
}; dialog(prop, function() {});
},
});
}
}