Spaces:
Paused
Paused
HanningChen
commited on
Commit
·
11d6c56
1
Parent(s):
c5d818e
Fix js error
Browse files- webui/static/main.js +8 -18
webui/static/main.js
CHANGED
|
@@ -33,7 +33,6 @@ const dlSelected = $("#dlSelected");
|
|
| 33 |
const copyMetaBtn = $("#copyMetaBtn");
|
| 34 |
|
| 35 |
function setStatus(kind, text, logLine) {
|
| 36 |
-
// kind: idle | run | ok | bad
|
| 37 |
statusDot.className = `dot ${kind}`;
|
| 38 |
statusText.textContent = text;
|
| 39 |
if (logLine) statusLog.textContent = logLine + "\n" + statusLog.textContent;
|
|
@@ -101,10 +100,8 @@ dropzone.addEventListener("drop", (e) => {
|
|
| 101 |
const file = e.dataTransfer.files && e.dataTransfer.files[0];
|
| 102 |
if (!file) return;
|
| 103 |
|
| 104 |
-
// Set preview
|
| 105 |
setPreview(file);
|
| 106 |
|
| 107 |
-
// Safely assign to input (works across browsers)
|
| 108 |
const dt = new DataTransfer();
|
| 109 |
dt.items.add(file);
|
| 110 |
fileInput.files = dt.files;
|
|
@@ -142,40 +139,33 @@ form.addEventListener("submit", async (e) => {
|
|
| 142 |
|
| 143 |
try {
|
| 144 |
const resp = await fetch("/api/run", { method: "POST", body: fd });
|
| 145 |
-
|
| 146 |
-
|
|
|
|
| 147 |
let data;
|
| 148 |
try {
|
| 149 |
data = JSON.parse(text);
|
| 150 |
-
} catch
|
| 151 |
-
|
| 152 |
-
throw new Error(`Server returned non-JSON (${res.status}): ${text.slice(0, 300)}`);
|
| 153 |
}
|
| 154 |
|
| 155 |
-
if (!
|
| 156 |
-
|
| 157 |
-
}
|
| 158 |
-
|
| 159 |
-
if (!resp.ok || !data.ok) {
|
| 160 |
-
throw new Error(data?.error || `HTTP ${resp.status}`);
|
| 161 |
}
|
| 162 |
|
| 163 |
jobPill.textContent = `job: ${data.job_id}`;
|
| 164 |
setStatus("ok", "Done", `Inference finished. job_id=${data.job_id}`);
|
| 165 |
|
| 166 |
-
// Update images (cache-bust)
|
| 167 |
const bust = `t=${Date.now()}`;
|
| 168 |
imgInput.src = `${data.image_urls.input}?${bust}`;
|
| 169 |
imgYolo.src = `${data.image_urls.yolo}?${bust}`;
|
| 170 |
imgSelected.src = `${data.image_urls.selected}?${bust}`;
|
| 171 |
|
| 172 |
-
// Open links
|
| 173 |
dlInput.href = data.image_urls.input;
|
| 174 |
dlYolo.href = data.image_urls.yolo;
|
| 175 |
dlSelected.href = data.image_urls.selected;
|
| 176 |
[dlInput, dlYolo, dlSelected].forEach(a => a.classList.remove("hidden"));
|
| 177 |
|
| 178 |
-
// Meta
|
| 179 |
meta.textContent = JSON.stringify({
|
| 180 |
task_id: data.task_id,
|
| 181 |
task_name: data.task_name,
|
|
@@ -188,4 +178,4 @@ if (!res.ok || data.ok === false) {
|
|
| 188 |
} finally {
|
| 189 |
setRunning(false);
|
| 190 |
}
|
| 191 |
-
});
|
|
|
|
| 33 |
const copyMetaBtn = $("#copyMetaBtn");
|
| 34 |
|
| 35 |
function setStatus(kind, text, logLine) {
|
|
|
|
| 36 |
statusDot.className = `dot ${kind}`;
|
| 37 |
statusText.textContent = text;
|
| 38 |
if (logLine) statusLog.textContent = logLine + "\n" + statusLog.textContent;
|
|
|
|
| 100 |
const file = e.dataTransfer.files && e.dataTransfer.files[0];
|
| 101 |
if (!file) return;
|
| 102 |
|
|
|
|
| 103 |
setPreview(file);
|
| 104 |
|
|
|
|
| 105 |
const dt = new DataTransfer();
|
| 106 |
dt.items.add(file);
|
| 107 |
fileInput.files = dt.files;
|
|
|
|
| 139 |
|
| 140 |
try {
|
| 141 |
const resp = await fetch("/api/run", { method: "POST", body: fd });
|
| 142 |
+
|
| 143 |
+
// Read as text first so we can show raw errors if not JSON
|
| 144 |
+
const text = await resp.text();
|
| 145 |
let data;
|
| 146 |
try {
|
| 147 |
data = JSON.parse(text);
|
| 148 |
+
} catch {
|
| 149 |
+
throw new Error(`Server returned non-JSON (HTTP ${resp.status}): ${text.slice(0, 300)}`);
|
|
|
|
| 150 |
}
|
| 151 |
|
| 152 |
+
if (!resp.ok || data.ok === false) {
|
| 153 |
+
throw new Error(data.error || `Request failed: HTTP ${resp.status}`);
|
|
|
|
|
|
|
|
|
|
|
|
|
| 154 |
}
|
| 155 |
|
| 156 |
jobPill.textContent = `job: ${data.job_id}`;
|
| 157 |
setStatus("ok", "Done", `Inference finished. job_id=${data.job_id}`);
|
| 158 |
|
|
|
|
| 159 |
const bust = `t=${Date.now()}`;
|
| 160 |
imgInput.src = `${data.image_urls.input}?${bust}`;
|
| 161 |
imgYolo.src = `${data.image_urls.yolo}?${bust}`;
|
| 162 |
imgSelected.src = `${data.image_urls.selected}?${bust}`;
|
| 163 |
|
|
|
|
| 164 |
dlInput.href = data.image_urls.input;
|
| 165 |
dlYolo.href = data.image_urls.yolo;
|
| 166 |
dlSelected.href = data.image_urls.selected;
|
| 167 |
[dlInput, dlYolo, dlSelected].forEach(a => a.classList.remove("hidden"));
|
| 168 |
|
|
|
|
| 169 |
meta.textContent = JSON.stringify({
|
| 170 |
task_id: data.task_id,
|
| 171 |
task_name: data.task_name,
|
|
|
|
| 178 |
} finally {
|
| 179 |
setRunning(false);
|
| 180 |
}
|
| 181 |
+
});
|