Skip to content

Commit 271bd21

Browse files
committed
refactor maxFiles/maxFilesize
1 parent 7150181 commit 271bd21

File tree

3 files changed

+7
-31
lines changed

3 files changed

+7
-31
lines changed

web_src/js/features/dropzone.js

Lines changed: 6 additions & 6 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, createElementFromAttrs, elemGetAttributeNumber} from '../utils/dom.js';
7+
import {createElementFromHTML, createElementFromAttrs} from '../utils/dom.js';
88

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

@@ -49,11 +49,9 @@ export async function initDropzone(dropzoneEl) {
4949

5050
let disableRemovedfileEvent = false; // when resetting the dropzone (removeAllFiles), disable the "removedfile" event
5151
let fileUuidDict = {}; // to record: if a comment has been saved, then the uploaded files won't be deleted from server when clicking the Remove in the dropzone
52-
const dzInst = await createDropzone(dropzoneEl, {
52+
const opts = {
5353
url: dropzoneEl.getAttribute('data-upload-url'),
5454
headers: {'X-Csrf-Token': csrfToken},
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
5755
acceptedFiles: ['*/*', ''].includes(dropzoneEl.getAttribute('data-accepts')) ? null : dropzoneEl.getAttribute('data-accepts'),
5856
addRemoveLinks: true,
5957
dictDefaultMessage: dropzoneEl.getAttribute('data-default-message'),
@@ -64,8 +62,10 @@ export async function initDropzone(dropzoneEl) {
6462
thumbnailMethod: 'contain',
6563
thumbnailWidth: 480,
6664
thumbnailHeight: 480,
67-
});
68-
65+
};
66+
if (dropzoneEl.hasAttribute('data-max-file')) opts.maxFiles = Number(dropzoneEl.getAttribute('data-max-file'));
67+
if (dropzoneEl.hasAttribute('data-max-size')) opts.maxFilesize = Number(dropzoneEl.getAttribute('data-max-size'));
68+
const dzInst = await createDropzone(dropzoneEl, opts);
6969
dzInst.on('success', (file, data) => {
7070
file.uuid = data.uuid;
7171
fileUuidDict[file.uuid] = {submitted: false};

web_src/js/utils/dom.js

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -318,18 +318,3 @@ export function createElementFromAttrs(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: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {createElementFromAttrs, createElementFromHTML, elemGetAttributeNumber} from './dom.js';
1+
import {createElementFromAttrs, createElementFromHTML} 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,12 +14,3 @@ test('createElementFromAttrs', () => {
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)