Spaces:
Sleeping
Sleeping
| // 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(); | |
| }); | |