X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/61d2ea6ac794fc0dd970503a19252c3dae48c377..refs/pull/4252/head:/resources/js/components/dropzone.js diff --git a/resources/js/components/dropzone.js b/resources/js/components/dropzone.js index 56c576f29..1fdf824ae 100644 --- a/resources/js/components/dropzone.js +++ b/resources/js/components/dropzone.js @@ -12,6 +12,8 @@ export class Dropzone extends Component { this.dropTarget = this.$refs.dropTarget; this.selectButtons = this.$manyRefs.selectButton || []; + this.isActive = true; + this.url = this.$opts.url; this.successMessage = this.$opts.successMessage; this.errorMessage = this.$opts.errorMessage; @@ -23,6 +25,14 @@ export class Dropzone extends Component { this.setupListeners(); } + /** + * Public method to allow external disabling/enabling of this drag+drop dropzone. + * @param {Boolean} active + */ + toggleActive(active) { + this.isActive = active; + } + setupListeners() { onSelect(this.selectButtons, this.manualSelectHandler.bind(this)); this.setupDropTargetHandlers(); @@ -40,7 +50,7 @@ export class Dropzone extends Component { event.preventDefault(); depth += 1; - if (depth === 1) { + if (depth === 1 && this.isActive) { this.showOverlay(); } }); @@ -59,6 +69,11 @@ export class Dropzone extends Component { this.dropTarget.addEventListener('drop', event => { event.preventDefault(); reset(); + + if (!this.isActive) { + return; + } + const clipboard = new Clipboard(event.dataTransfer); const files = clipboard.getFiles(); for (const file of files) { @@ -158,7 +173,7 @@ export class Dropzone extends Component { } else if (this.readyState === XMLHttpRequest.DONE && this.status >= 400) { const content = this.responseText; const data = content.startsWith('{') ? JSON.parse(content) : {message: content}; - const message = data?.message || content; + const message = data?.message || data?.error || content; upload.markError(message); } },