]> BookStack Code Mirror - bookstack/blob - resources/assets/js/vues/components/dropzone.js
Fixes an issue with handling of large image files.
[bookstack] / resources / assets / js / vues / components / dropzone.js
1 const DropZone = require("dropzone");
2
3 const template = `
4     <div class="dropzone-container">
5         <div class="dz-message">{{placeholder}}</div>
6     </div>
7 `;
8
9 const props = ['placeholder', 'uploadUrl', 'uploadedTo'];
10
11 // TODO - Remove jQuery usage
12 function mounted() {
13    let container = this.$el;
14    let _this = this;
15    new DropZone(container, {
16         url: function() {
17             return _this.uploadUrl;
18         },
19         init: function () {
20             let dz = this;
21
22             dz.on('sending', function (file, xhr, data) {
23                 let token = window.document.querySelector('meta[name=token]').getAttribute('content');
24                 data.append('_token', token);
25                 let uploadedTo = typeof _this.uploadedTo === 'undefined' ? 0 : _this.uploadedTo;
26                 data.append('uploaded_to', uploadedTo);
27             });
28
29             dz.on('success', function (file, data) {
30                 _this.$emit('success', {file, data});
31                 $(file.previewElement).fadeOut(400, function () {
32                     dz.removeFile(file);
33                 });
34             });
35
36             dz.on('error', function (file, errorMessage, xhr) {
37                 _this.$emit('error', {file, errorMessage, xhr});
38                 console.log(errorMessage);
39                 console.log(xhr);
40                 function setMessage(message) {
41                     $(file.previewElement).find('[data-dz-errormessage]').text(message);
42                 }
43
44                 if (xhr.status === 413) setMessage(trans('errors.server_upload_limit'));
45                 else if (errorMessage.file) setMessage(errorMessage.file);
46             });
47         }
48    });
49 }
50
51 function data() {
52     return {}
53 }
54
55 module.exports = {
56     template,
57     props,
58     mounted,
59     data,
60 };