Skip to content

Commit d957c1c

Browse files
committed
fix dropzone numbers
1 parent 4a72cba commit d957c1c

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

web_src/js/features/dropzone.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {clippie} from 'clippie';
44
import {showTemporaryTooltip} from '../modules/tippy.js';
55
import {GET, POST} from '../modules/fetch.js';
66
import {showErrorToast} from '../modules/toast.js';
7-
import {createElementFromHTML, createElement} from '../utils/dom.js';
7+
import {createElementFromHTML, createElement, elemGetAttributeNumber} from '../utils/dom.js';
88

99
const {csrfToken, i18n} = window.config;
1010

@@ -52,8 +52,8 @@ export async function initDropzone(dropzoneEl) {
5252
const dzInst = await createDropzone(dropzoneEl, {
5353
url: dropzoneEl.getAttribute('data-upload-url'),
5454
headers: {'X-Csrf-Token': csrfToken},
55-
maxFiles: dropzoneEl.getAttribute('data-max-file'),
56-
maxFilesize: dropzoneEl.getAttribute('data-max-size'),
55+
maxFiles: elemGetAttributeNumber('data-max-file', null), // match dropzone default value, no limit
56+
maxFilesize: elemGetAttributeNumber('data-max-size', 256), // match dropzone default value: 256 MiB
5757
acceptedFiles: ['*/*', ''].includes(dropzoneEl.getAttribute('data-accepts')) ? null : dropzoneEl.getAttribute('data-accepts'),
5858
addRemoveLinks: true,
5959
dictDefaultMessage: dropzoneEl.getAttribute('data-default-message'),

web_src/js/utils/dom.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,3 +318,18 @@ export function createElement(tagName, attrs) {
318318
}
319319
return el;
320320
}
321+
322+
/**
323+
* Get a number from an element attribute. If the attribute doesn't exist, return the default value.
324+
* If the attribute exists but is not a number, throw an error.
325+
* @param {HTMLElement} el
326+
* @param {string} attr
327+
* @param {number|null} def
328+
* @returns {number|null}
329+
*/
330+
export function elemGetAttributeNumber(el, attr, def = null) {
331+
if (!el.hasAttribute(attr)) return def; // getAttribute also returns null for non-existing attribute
332+
const v = parseInt(el.getAttribute(attr));
333+
if (Number.isNaN(v)) throw new Error(`Attribute "${attr}" is not a number`);
334+
return v;
335+
}

web_src/js/utils/dom.test.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {createElement, createElementFromHTML} from './dom.js';
1+
import {createElement, createElementFromHTML, elemGetAttributeNumber} from './dom.js';
22

33
test('createElementFromHTML', () => {
44
expect(createElementFromHTML('<a>foo<span>bar</span></a>').outerHTML).toEqual('<a>foo<span>bar</span></a>');
@@ -14,3 +14,12 @@ test('createElement', () => {
1414
});
1515
expect(el.outerHTML).toEqual('<button id="the-id" class="cls-1 cls-2" data-foo="the-data" disabled=""></button>');
1616
});
17+
18+
test('elemGetAttributeNumber', () => {
19+
expect(elemGetAttributeNumber(createElementFromHTML('<a>foo</a>'), `data-key`)).toEqual(null);
20+
expect(elemGetAttributeNumber(createElementFromHTML('<a>foo</a>'), `data-key`, 1)).toEqual(1);
21+
expect(elemGetAttributeNumber(createElementFromHTML('<a data-key="2">foo</a>'), `data-key`)).toEqual(2);
22+
expect(() => {
23+
elemGetAttributeNumber(createElementFromHTML('<a data-key="abc">foo</a>'), `data-key`);
24+
}).toThrowError('Attribute "data-key" is not a number');
25+
});

0 commit comments

Comments
 (0)