-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathelement.js
More file actions
50 lines (50 loc) · 2.7 KB
/
Copy pathelement.js
File metadata and controls
50 lines (50 loc) · 2.7 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
(function() {
'use strict';
let session;
let saving = false;
const note = document.getElementById('note');
const status = document.getElementById('status');
const save = document.getElementById('save');
const saveNext = document.getElementById('save-next');
const cancel = document.getElementById('cancel');
save.disabled = saveNext.disabled = true;
chrome.runtime.sendMessage({ action:'get-capture-session' }).then(result => {
if (!result?.ok || !result.session) throw new Error(result?.reason || 'Capture session expired.');
session = result.session;
document.getElementById('source').textContent = session.snapshot.selector;
document.getElementById('target').textContent = JSON.stringify(session.snapshot, null, 2);
save.disabled = saveNext.disabled = false;
note.focus();
}).catch(error => { status.textContent = error.message; });
document.getElementById('capture-form').addEventListener('submit', async event => {
event.preventDefault();
if (!session || saving || !note.value.trim()) return;
const pickNext = event.submitter === saveNext;
saving = true; save.disabled = saveNext.disabled = true; cancel.disabled = true;
status.textContent = 'Saving locally...';
try {
const result = await chrome.runtime.sendMessage({ action:'add-feedback-item', item:{
note:note.value.trim(), acceptance:document.getElementById('acceptance').value.split(/\r?\n/).map(value=>value.trim()).filter(Boolean), timestamp:new Date().toISOString()
}});
if (!result?.ok) throw new Error(result?.reason || 'Could not save.');
status.textContent = 'Saved to History.';
await chrome.runtime.sendMessage({ action:'clear-capture-session', pickNext }).catch(()=>{});
if (!session?.embedded) window.close();
} catch (error) {
status.textContent = error.message + ' Your note is still here; retry when ready.';
saving = false; save.disabled = saveNext.disabled = false; cancel.disabled = false;
}
});
window.addEventListener('keydown', event => {
if ((event.metaKey || event.ctrlKey) && event.key === 'Enter' && !saving) {
event.preventDefault(); document.getElementById('capture-form').requestSubmit(event.shiftKey ? saveNext : save);
}
if (event.key === 'Escape' && !document.querySelector('dialog[open]')) { event.preventDefault(); cancel.click(); }
});
cancel.addEventListener('click', async()=> {
if (saving) return;
if ((note.value.trim() || document.getElementById('acceptance').value.trim()) && !await DevFeedbackDialog({message:'Discard this unsaved note?'})) return;
await chrome.runtime.sendMessage({ action:'clear-capture-session' }).catch(()=>{});
if (!session?.embedded) window.close();
});
})();