diff --git a/resources/js/components/dropzone.js b/resources/js/components/dropzone.js index 1fdf824ae..2b8b35081 100644 --- a/resources/js/components/dropzone.js +++ b/resources/js/components/dropzone.js @@ -21,6 +21,7 @@ export class Dropzone extends Component { this.uploadLimitMessage = this.$opts.uploadLimitMessage; this.zoneText = this.$opts.zoneText; this.fileAcceptTypes = this.$opts.fileAccept; + this.allowMultiple = this.$opts.allowMultiple === 'true'; this.setupListeners(); } @@ -83,7 +84,12 @@ export class Dropzone extends Component { } manualSelectHandler() { - const input = elem('input', {type: 'file', style: 'left: -400px; visibility: hidden; position: fixed;', accept: this.fileAcceptTypes}); + const input = elem('input', { + type: 'file', + style: 'left: -400px; visibility: hidden; position: fixed;', + accept: this.fileAcceptTypes, + multiple: this.allowMultiple ? '' : null, + }); this.container.append(input); input.click(); input.addEventListener('change', () => { diff --git a/resources/js/services/dom.js b/resources/js/services/dom.js index 786855748..d764a2ebe 100644 --- a/resources/js/services/dom.js +++ b/resources/js/services/dom.js @@ -10,7 +10,11 @@ export function elem(tagName, attrs = {}, children = []) { const el = document.createElement(tagName); for (const [key, val] of Object.entries(attrs)) { - el.setAttribute(key, val); + if (val === null) { + el.removeAttribute(key); + } else { + el.setAttribute(key, val); + } } for (const child of children) { diff --git a/resources/views/attachments/manager.blade.php b/resources/views/attachments/manager.blade.php index 4526172d4..6cbfd1aae 100644 --- a/resources/views/attachments/manager.blade.php +++ b/resources/views/attachments/manager.blade.php @@ -14,6 +14,7 @@ option:dropzone:upload-limit-message="{{ trans('errors.server_upload_limit') }}" option:dropzone:zone-text="{{ trans('entities.attachments_dropzone') }}" option:dropzone:file-accept="*" + option:dropzone:allow-multiple="true" class="px-l files">