Brickshelf

Login | Sign up

File uploaded: 2007/08/11 07:25:52

File updated: 2007/08/11 07:25:52

System Stats:

4,900,000+ Files 430,000+ Folders

Connect with us on…
Bluesky | Discord | Instagram | TikTok | Twitter

const fileInput = form.querySelector("input[type='file'][name='file']"); const descInput = form.querySelector("input[name='file_description']"); const keywordsInput = form.querySelector("input[name='file_keywords']"); const folderIdInput = form.querySelector("input[name='folder_id']"); const usernameInput = form.querySelector("input[name='username']"); const errorEl = form.querySelector('.upload__error'); const submitBtn = form.querySelector("button[type='submit']"); const progressContainer = form.querySelector('.upload__progress'); const progressBar = form.querySelector('.upload__progress_bar'); const progressText = form.querySelector('.upload__progress_text'); function setMessage(message, isError) { if (!errorEl) return; errorEl.textContent = message || ''; errorEl.style.display = message ? 'block' : 'none'; errorEl.style.color = isError ? '#c00000' : '#006000'; } // Hooks required by classic/js/user_file_upload.js window.updateProgress = function(percent) { if (progressContainer) progressContainer.style.display = 'block'; if (progressBar) progressBar.style.width = percent + '%'; if (progressText) { progressText.style.display = 'block'; progressText.textContent = Math.round(percent) + '%'; } }; window.updatePartStatus = function() { // No per-part UI on gallery. return; }; // Drag-and-drop onto the upload form. (function() { let dragDepth = 0; function onDragEnter(e) { e.preventDefault(); dragDepth++; form.classList.add('upload__drop--active'); } function onDragOver(e) { e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; } function onDragLeave() { dragDepth--; if (dragDepth <= 0) { dragDepth = 0; form.classList.remove('upload__drop--active'); } } function onDrop(e) { e.preventDefault(); dragDepth = 0; form.classList.remove('upload__drop--active'); if (!fileInput) return; const files = e.dataTransfer.files; if (!files || files.length === 0) return; try { const dt = new DataTransfer(); dt.items.add(files[0]); fileInput.files = dt.files; } catch (ex) { // DataTransfer not supported — fall back to nothing; // the browser already won't allow programmatic assignment. } // Dispatch change so any listeners know a file was chosen. fileInput.dispatchEvent(new Event('change', { bubbles: true })); } form.addEventListener('dragenter', onDragEnter); form.addEventListener('dragover', onDragOver); form.addEventListener('dragleave', onDragLeave); form.addEventListener('drop', onDrop); })(); // Ensure the uploader has a state object to read/write. window.uploadState = window.uploadState || { isUploading: false, abortController: null, fileId: null, totalParts: 0, uploadedParts: 0 }; form.addEventListener('submit', async function(e) { const file = fileInput && fileInput.files ? fileInput.files[0] : null; const username = usernameInput ? String(usernameInput.value || '') : ''; const folderId = folderIdInput ? (parseInt(folderIdInput.value, 10) || 0) : 0; const fileDescription = descInput ? String(descInput.value || '') : ''; const fileKeywords = keywordsInput ? String(keywordsInput.value || '') : ''; const SMALL_UPLOAD_LIMIT = 10 * 1024 * 1024; if (!file) { e.preventDefault(); setMessage('Please choose a file.', true); return; } if (!username) { e.preventDefault(); setMessage('Missing username.', true); return; } // For <=10MB files, use the existing non-multipart handler. // This avoids B2 large-file finish errors for single-part uploads. if (file.size <= SMALL_UPLOAD_LIMIT) { setMessage('', true); return; } e.preventDefault(); setMessage('', true); // Init upload state (used by user_file_upload.js for cancellation and progress). window.uploadState.isUploading = true; window.uploadState.abortController = new AbortController(); window.uploadState.fileId = null; window.uploadState.totalParts = Math.ceil(file.size / (10 * 1024 * 1024)); window.uploadState.uploadedParts = 0; // Show progress bar only while uploading. window.updateProgress(0); if (submitBtn) submitBtn.disabled = true; try { await uploadLargeFileToB2(file, username, folderId, fileDescription, fileKeywords); // Refresh so the newly uploaded file appears in the folder listing. window.location.reload(); } catch (err) { const name = err && err.name ? String(err.name) : ''; if (name === 'AbortError') { setMessage('Upload cancelled.', true); } else { const msg = err && err.message ? String(err.message) : 'Unknown error'; setMessage('Upload failed: ' + msg, true); } } finally { window.uploadState.isUploading = false; if (submitBtn) submitBtn.disabled = false; if (progressContainer) progressContainer.style.display = 'none'; if (progressBar) progressBar.style.width = '0%'; if (progressText) { progressText.style.display = 'none'; progressText.textContent = '0%'; } } }); })();