my-projects-website/app/application/resources/volt/js/image.js
Leonid Nikitin b7d0a2453e
Moved from "app/src" to "app/application".
Otherwise phpstorm doesn't understand the paths correctly. He thinks that this is not a complete application, but a package. And when creating a class, the namespace indicates “app” with a small letter, but should be “App”.
2024-04-11 19:52:37 +05:00

82 lines
3.1 KiB
JavaScript

import Dropzone from "dropzone";
let elementImage = document.querySelectorAll('.upload-image');
if (elementImage.length > 0) {
elementImage.forEach(addDropzoneImage);
}
function addDropzoneImage(element) {
let blockError = element.querySelector('.upload-image__error'),
blockProgressBar = element.querySelector('.progress-wrapper'),
progressBarText = blockProgressBar.querySelector('.upload-image__progressbar-text'),
progressBar = blockProgressBar.querySelector('.progress-bar'),
storageType = element.dataset.storageType,
morph = element.dataset.morph,
imageBlock = element.querySelector('.add-image');
imageBlock.querySelector('button.add-image__remove').addEventListener('click', (e) => {
element.querySelector('input.save').value = '';
element.querySelector('input.delete').value = 1;
imageBlock.style.display = 'none';
});
let myDropzone = new Dropzone(element.querySelector('button.upload-image__button'), {
url: "/storage/image/upload-resize",
uploadMultiple: false,
parallelUploads: 1,
maxFiles: 1,
acceptedFiles: element.dataset.acceptedFiles,
sending: function (file, response, formData) {
blockError.textContent = '';
blockError.style.display = 'none';
formData.append('_token', document.querySelector('meta[name="csrf-token"]').content);
formData.append('storage_type', storageType);
formData.append('morph', morph);
blockProgressBar.style.display = 'block';
},
thumbnail: function(file, dataUrl) {
},
addedfile: function(file) {
},
totaluploadprogress: function(progress) {
progressBarText.textContent = progress + '%';
progressBar.style.width = progress + '%';
progressBar.setAttribute('aria-valuenow', progress);
},
complete: function(file) {
this.removeFile(file);
progressBarText.textContent = '0%';
progressBar.style.width = '0%';
progressBar.setAttribute('aria-valuenow', 0);
blockProgressBar.style.display = 'none';
},
success: function (file, image) {
imageBlock.querySelector('img').setAttribute('src', image.url);
element.querySelector('input.save').value = image.id;
element.querySelector('input.delete').value = 0;
imageBlock.style.display = 'block';
},
error: function (file, response) {
let message = '';
if (response.errors) {
for (let errorKey in response.errors) {
message += response.errors[errorKey] + '<br>'
}
if(response.message) {
message += response.message + '<br>'
}
} else if(response.message) {
message += response.message + '<br>'
} else {
message += response + '<br>'
}
blockError.innerHTML = message;
blockError.style.display = 'block';
},
});
}