-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpopup.js
More file actions
93 lines (83 loc) · 3.11 KB
/
Copy pathpopup.js
File metadata and controls
93 lines (83 loc) · 3.11 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
const statusEl = document.getElementById('status');
const checkBtn = document.getElementById('check');
const enabledEl = document.getElementById('enabled');
const disableHereEl = document.getElementById('disableHere');
const hostEl = document.getElementById('host');
let currentHost = '';
function setStatus(cls, text) {
statusEl.className = `status ${cls}`;
statusEl.textContent = text;
}
async function getActiveTab() {
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
return tab;
}
function hostFromUrl(u) {
try { return new URL(u).hostname; } catch { return ''; }
}
async function loadToggles() {
const tab = await getActiveTab();
currentHost = hostFromUrl(tab && tab.url);
hostEl.textContent = currentHost || 'this site';
const { enabled = true, disabledHosts = [] } =
await chrome.storage.sync.get(['enabled', 'disabledHosts']);
enabledEl.checked = !!enabled;
disableHereEl.checked = !!currentHost && disabledHosts.includes(currentHost);
disableHereEl.disabled = !currentHost;
}
enabledEl.addEventListener('change', async () => {
await chrome.storage.sync.set({ enabled: enabledEl.checked });
});
disableHereEl.addEventListener('change', async () => {
if (!currentHost) return;
const { disabledHosts = [] } = await chrome.storage.sync.get('disabledHosts');
const set = new Set(disabledHosts);
if (disableHereEl.checked) set.add(currentHost);
else set.delete(currentHost);
await chrome.storage.sync.set({ disabledHosts: Array.from(set) });
});
async function checkStatus() {
setStatus('', 'Checking…');
try {
const tab = await getActiveTab();
if (!tab || !tab.id) {
setStatus('bad', 'No active tab.');
return;
}
const url = tab.url || '';
if (/^(chrome|chrome-extension|edge|about|devtools|view-source):/i.test(url)
|| url.startsWith('https://chrome.google.com/webstore')
|| url.startsWith('https://chromewebstore.google.com')) {
setStatus('warn', 'Open a regular web page (e.g. gmail.com); Chrome blocks scripting on browser pages.');
return;
}
const [{ result }] = await chrome.scripting.executeScript({
target: { tabId: tab.id },
world: 'MAIN',
func: async () => {
if (!('Proofreader' in self)) {
return { state: 'missing', reason: 'Proofreader API not in this Chrome.' };
}
try {
return { state: await Proofreader.availability() };
} catch (e) {
return { state: 'error', reason: e.message };
}
}
});
if (result.state === 'available') {
setStatus('ok', 'Ready — model is on-device.');
} else if (result.state === 'downloadable' || result.state === 'downloading') {
setStatus('warn', `Model ${result.state}. Type something on the page to start the download.`);
} else if (result.state === 'missing') {
setStatus('bad', result.reason);
} else {
setStatus('bad', `State: ${result.state}${result.reason ? ' — ' + result.reason : ''}`);
}
} catch (e) {
setStatus('bad', `Error: ${e.message}`);
}
}
checkBtn.addEventListener('click', checkStatus);
loadToggles();
checkStatus();