Spaces:
Sleeping
Sleeping
File size: 2,660 Bytes
0533780 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | // popup.js
const selectBtn = document.getElementById("select-btn");
const dot = document.getElementById("dot");
const serverLabel = document.getElementById("server-label");
const offlineMsg = document.getElementById("offline-msg");
let selectedMode = "recognize";
// ββ Check server health βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
async function checkServer() {
try {
const r = await fetch("http://localhost:8000/health", {
signal: AbortSignal.timeout(3000),
});
const d = await r.json();
return d.status === "ok";
} catch {
return false;
}
}
async function updateServerStatus() {
const ok = await checkServer();
dot.className = `dot ${ok ? "ok" : "err"}`;
serverLabel.textContent = ok ? "server ready" : "offline";
selectBtn.disabled = !ok;
offlineMsg.classList.toggle("show", !ok);
}
updateServerStatus();
// ββ Mode toggle βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
document.querySelectorAll(".mode-opt").forEach(btn => {
btn.addEventListener("click", () => {
document.querySelectorAll(".mode-opt").forEach(b => b.classList.remove("active"));
btn.classList.add("active");
selectedMode = btn.dataset.mode;
chrome.storage.local.set({ ocrMode: selectedMode });
});
});
// Restore saved mode
chrome.storage.local.get(["ocrMode"], ({ ocrMode }) => {
if (ocrMode) {
selectedMode = ocrMode;
document.querySelectorAll(".mode-opt").forEach(btn => {
btn.classList.toggle("active", btn.dataset.mode === ocrMode);
});
}
});
// ββ Select button βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
selectBtn.addEventListener("click", async () => {
// Save current mode to storage so background can read it
await chrome.storage.local.set({ ocrMode: selectedMode });
// Get current tab and inject the selection
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
await chrome.scripting.executeScript({
target: { tabId: tab.id },
func: () => {
window.postMessage({ type: "GLMOCR_START" }, "*");
},
});
// Tell content script to start selection mode
chrome.tabs.sendMessage(tab.id, { type: "START_SELECTION" });
// Close popup so it doesn't obscure the page
window.close();
});
|