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();
});