Skip to content

Commit a1b3d2d

Browse files
committed
chore: added javascript to check correct file size limitations for form
1 parent e989c90 commit a1b3d2d

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,54 @@
11
import 'jquery';
2+
import 'input/file'; // make sure core file init is registered first
23
import i18n from 'elgg/i18n';
4+
5+
function updateFileLimits() {
6+
var $form = $(this).parents('.elgg-form-forms-submit').eq(0);
7+
var $all_files = $form.find('input[type=file]');
8+
var form_max_size = $form.data().maxFileSize;
9+
var running_total = 0;
10+
11+
$all_files.each(function(index, file) {
12+
if (file.files.length === 0) {
13+
return;
14+
}
15+
16+
running_total += file.files[0].size;
17+
});
18+
19+
var total_bytes_left = form_max_size - running_total;
20+
21+
$all_files.each(function(index, file) {
22+
var $file = $(file);
23+
var max_size = $file.data().originalMaxSize;
24+
25+
var bytes_left = total_bytes_left;
26+
if (file.files.length > 0) {
27+
bytes_left += file.files[0].size;
28+
}
29+
30+
max_size = Math.min(max_size, bytes_left);
31+
32+
var readable_max_size = formatBytes(max_size);
33+
$file.data().maxSize = max_size;
34+
$file.data().maxSizeMessage = i18n.echo('upload:error:ini_size') + ' ' + i18n.echo('input:file:upload_limit', [readable_max_size]);
35+
$file.parent().next('.elgg-field-help').find('.elgg-input-file-size-helper').text(i18n.echo('input:file:upload_limit', [readable_max_size]))
36+
});
37+
}
38+
39+
function formatBytes(size) {
40+
if (size < 0) {
41+
return size;
42+
}
43+
44+
if (size === 0) {
45+
return '0 B';
46+
}
47+
48+
var base = Math.log(size) / Math.log(1024);
49+
var suffixes = ['B', 'kB', 'MB', 'GB', 'TB'];
50+
51+
return Math.round(Math.pow(1024, base - Math.floor(base)), 2) + ' ' + suffixes[Math.floor(base)];
52+
}
53+
54+
$(document).on('change', '.elgg-form-forms-submit input[type=file]', updateFileLimits);

0 commit comments

Comments
 (0)