From b5d688ec0d43338773a3c3d3b401dfb91f466004 Mon Sep 17 00:00:00 2001 From: Kibi Kelburton Date: Tue, 14 Jul 2026 21:05:02 +0200 Subject: [PATCH] url upload better --- public/s/css/upload.css | 36 --------------------------- public/s/js/upload.js | 55 ++++++----------------------------------- 2 files changed, 8 insertions(+), 83 deletions(-) diff --git a/public/s/css/upload.css b/public/s/css/upload.css index 0544dd6..b36643e 100644 --- a/public/s/css/upload.css +++ b/public/s/css/upload.css @@ -1652,39 +1652,3 @@ } @keyframes uutShimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } } - -/* ── Completion states (inline, auto-dismiss) ────── */ -.uut-ok { color: #51cf66; font-size: 10px; flex-shrink: 0; } -.uut-err { color: #ff5050; font-size: 10px; flex-shrink: 0; } - -.uut-job-row--done { align-items: center; } - -.uut-job--success .uut-bar-fill, -.uut-bar-fill--ok { - background: #51cf66; - background-image: none; - animation: none; -} - -.uut-job--error .uut-bar-fill, -.uut-bar-fill--err { - background: #ff5050; - background-image: none; - animation: none; -} - -.uut-stage--ok { color: #51cf66; } -.uut-stage--err { color: #ff5050; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 180px; display: block; } - -.uut-link { - font-size: 0.69rem; - color: var(--accent); - text-decoration: none; - opacity: 0.85; - white-space: nowrap; - transition: opacity 0.15s; - margin-left: 5px; -} -.uut-link:hover { opacity: 1; text-decoration: underline; } - - diff --git a/public/s/js/upload.js b/public/s/js/upload.js index 6635a6a..b212c97 100644 --- a/public/s/js/upload.js +++ b/public/s/js/upload.js @@ -113,41 +113,6 @@ window.escapeHtmlUpload = window.escapeHtmlUpload || ((unsafe) => { } }; - const _renderDone = (jobId, success, itemId, errMsg) => { - const list = _$('uut-active-list'); - if (!list) return; - const row = list.querySelector(`[data-jid="${CSS.escape(jobId)}"]`); - if (!row) return; - const t = i18n(); - const url = window.escapeHtmlUpload(_active.get(jobId)?.url || ''); - - if (success) { - row.classList.add('uut-job--success'); - const linkText = t.url_tracker_view || 'View →'; - const link = itemId ? ` ${window.escapeHtmlUpload(linkText)}` : ''; - const completeText = t.url_tracker_complete || 'Complete!'; - row.innerHTML = ` -
-
- ${url} -
${window.escapeHtmlUpload(completeText)}${link}
-
-
- `; - } else { - row.classList.add('uut-job--error'); - const safeErr = window.escapeHtmlUpload(errMsg || t.url_tracker_failed || 'Upload failed'); - row.innerHTML = ` -
-
- ${url} -
${safeErr}
-
-
- `; - } - }; - // ── Polling ─────────────────────────────────────────────────────────────── const _stopPoll = (jobId) => { const j = _active.get(jobId); @@ -179,7 +144,7 @@ window.escapeHtmlUpload = window.escapeHtmlUpload || ((unsafe) => { data: state.error ? { msg: state.error } : null }); } - }, 2000); + }, 500); return; } } catch {} @@ -196,12 +161,10 @@ window.escapeHtmlUpload = window.escapeHtmlUpload || ((unsafe) => { _stopPoll(jobId); _broadcast({ type: 'job_resolved', jobId, notif }); - const success = notif.type === 'upload_success'; - const itemId = notif.item_id || null; - const errMsg = notif.data?.msg || 'Upload failed'; - - _renderDone(jobId, success, itemId, errMsg); - _sync(); // update badge count + // Fade row out and remove — no lingering done state + const row = _$('uut-active-list')?.querySelector(`[data-jid="${CSS.escape(jobId)}"]`); + if (row) { row.classList.add('uut-job--fading'); setTimeout(() => row.remove(), 300); } + setTimeout(() => { _active.delete(jobId); _sync(); }, 350); }; // ── Public API ──────────────────────────────────────────────────────────── @@ -209,8 +172,6 @@ window.escapeHtmlUpload = window.escapeHtmlUpload || ((unsafe) => { if (!jobId) jobId = `local_${Date.now()}`; _ensurePanel(); _closed = false; - // Clean up any stale resolved entries from a previous session - for (const [id, j] of _active) { if (j.resolved) _active.delete(id); } _active.set(jobId, { url, percent: 0, stage: 'queued', speed: null, eta: null, resolved: false, pollTimer: null }); _renderJob(jobId); _sync(); @@ -259,9 +220,9 @@ window.escapeHtmlUpload = window.escapeHtmlUpload || ((unsafe) => { const job = _active.get(data.jobId); if (!job?._remote) break; job.resolved = true; - const n = data.notif || {}; - _renderDone(data.jobId, n.type === 'upload_success', n.item_id || null, n.data?.msg || 'Upload failed'); - _sync(); + const row = _$('uut-active-list')?.querySelector(`[data-jid="${CSS.escape(data.jobId)}"]`); + if (row) { row.classList.add('uut-job--fading'); setTimeout(() => row.remove(), 300); } + setTimeout(() => { _active.delete(data.jobId); _sync(); }, 350); break; } }