class CustomFileUpload extends HTMLElement { connectedCallback() { this.attachShadow({ mode: 'open' }); this.shadowRoot.innerHTML = `

Glissez-déposez vos fichiers ici ou cliquez pour sélectionner

`; const dropArea = this.shadowRoot.getElementById('dropArea'); const fileInput = this.shadowRoot.getElementById('fileInput'); const fileList = this.shadowRoot.getElementById('fileList'); const uploadButton = this.shadowRoot.getElementById('uploadButton'); let files = []; dropArea.addEventListener('click', () => fileInput.click()); fileInput.addEventListener('change', (e) => { files = Array.from(e.target.files); updateFileList(); }); ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { dropArea.addEventListener(eventName, preventDefaults, false); }); ['dragenter', 'dragover'].forEach(eventName => { dropArea.addEventListener(eventName, highlight, false); }); ['dragleave', 'drop'].forEach(eventName => { dropArea.addEventListener(eventName, unhighlight, false); }); dropArea.addEventListener('drop', handleDrop, false); uploadButton.addEventListener('click', uploadFiles); function preventDefaults(e) { e.preventDefault(); e.stopPropagation(); } function highlight() { dropArea.classList.add('highlight'); } function unhighlight() { dropArea.classList.remove('highlight'); } function handleDrop(e) { const dt = e.dataTransfer; files = Array.from(dt.files); updateFileList(); } function updateFileList() { fileList.innerHTML = ''; files.forEach(file => { const fileItem = document.createElement('div'); fileItem.className = 'file-item'; fileItem.innerHTML = ` ${file.name} (${formatFileSize(file.size)}) `; fileList.appendChild(fileItem); }); feather.replace(); } async function uploadFiles() { if (files.length === 0) return; const formData = new FormData(); files.forEach(file => formData.append('files', file)); try { const response = await fetch('/api/files/upload', { method: 'POST', body: formData }); const data = await response.json(); if (data.ok) { alert(`${data.files.length} fichiers envoyés avec succès à Rosalinda`); files = []; updateFileList(); } } catch (error) { console.error('Error uploading files:', error); alert('Erreur lors de l\'envoi des fichiers'); } } function formatFileSize(bytes) { if (bytes === 0) return '0 Bytes'; const k = 1024; const sizes = ['Bytes', 'KB', 'MB', 'GB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; } } } customElements.define('custom-file-upload', CustomFileUpload);