/** * Test script for JavaScript upload functionality */ import uploadManager, { FileValidator } from './utils/upload.js'; // Wait for DOM to be ready document.addEventListener('DOMContentLoaded', () => { const fileInput = document.getElementById('test-upload'); const uploadButton = document.getElementById('upload-button'); const progressBar = document.getElementById('progress-bar'); const progressText = document.getElementById('progress-text'); const results = document.getElementById('results'); if (!fileInput || !uploadButton) { console.log('Upload test elements not found on this page'); return; } uploadButton.addEventListener('click', async () => { const files = Array.from(fileInput.files); if (files.length === 0) { showMessage('Please select at least one file', 'error'); return; } // Validate files for (const file of files) { const errors = FileValidator.validateImage(file); if (errors.length > 0) { showMessage(`File ${file.name}: ${errors.join(', ')}`, 'error'); return; } } try { uploadButton.disabled = true; showMessage('Starting upload...', 'info'); if (files.length === 1) { // Single file upload await uploadSingleFile(files[0]); } else { // Multiple file upload await uploadMultipleFiles(files); } } catch (error) { showMessage(`Upload failed: ${error.message}`, 'error'); } finally { uploadButton.disabled = false; progressBar.style.width = '0%'; progressText.textContent = ''; } }); async function uploadSingleFile(file) { const result = await uploadManager.uploadImage(file, { altText: `Uploaded image: ${file.name}`, onProgress: (percent, loaded, total) => { updateProgress(percent, `Uploading ${file.name}...`); } }); showUploadResult(result, file.name); } async function uploadMultipleFiles(files) { const results = await uploadManager.uploadMultipleImages(files, { onProgress: (overallPercent, currentIndex, totalFiles) => { updateProgress(overallPercent, `Uploading file ${currentIndex + 1} of ${totalFiles}...`); }, onFileComplete: (result, index, total) => { showMessage(`Completed ${index + 1}/${total}: ${files[index].name}`, 'success'); } }); showMessage(`Upload completed. ${results.filter(r => r.success).length}/${results.length} files successful`, 'info'); results.forEach(result => { showUploadResult(result.success ? result.data : null, result.file, result.error); }); } function updateProgress(percent, text) { progressBar.style.width = `${percent}%`; progressText.textContent = `${text} (${Math.round(percent)}%)`; } function showMessage(message, type = 'info') { const messageDiv = document.createElement('div'); messageDiv.className = `message message-${type}`; messageDiv.textContent = message; results.insertBefore(messageDiv, results.firstChild); // Remove after 5 seconds setTimeout(() => { if (messageDiv.parentNode) { messageDiv.remove(); } }, 5000); } function showUploadResult(uploadData, fileName, error = null) { const resultDiv = document.createElement('div'); resultDiv.className = 'upload-result'; if (error) { resultDiv.innerHTML = `
Error: ${error}
`; } else { resultDiv.innerHTML = `ULID: ${uploadData.ulid}
Filename: ${uploadData.filename}
Size: ${uploadData.file_size.human_readable}
Dimensions: ${uploadData.dimensions.width}x${uploadData.dimensions.height}
MIME Type: ${uploadData.mime_type}