feat: capture text files for browser inbox

This commit is contained in:
2026-06-29 09:57:21 +08:00
parent f0b66c05ff
commit 8970333d13
9 changed files with 89 additions and 8 deletions
+7
View File
@@ -50,6 +50,7 @@ h1 {
}
.panel,
.file-picker,
.settings {
border: 1px solid #273244;
border-radius: 6px;
@@ -66,6 +67,7 @@ h1 {
}
.row span,
.file-picker label,
.settings label,
.hint {
color: #94a3b8;
@@ -124,6 +126,11 @@ input {
color: #e5e7eb;
}
input[type="file"] {
cursor: pointer;
font-size: 12px;
}
.hint {
margin: 0;
font-size: 12px;
+6
View File
@@ -32,9 +32,15 @@
<section class="actions">
<button id="capture-page">Send Page</button>
<button id="capture-file">Send File</button>
<button id="retry">Retry Pending</button>
</section>
<section class="file-picker">
<label for="file-input">Text file</label>
<input id="file-input" type="file">
</section>
<section class="settings">
<label for="receiver-input">Receiver URL</label>
<input id="receiver-input" type="url" spellcheck="false">
+27
View File
@@ -6,8 +6,10 @@
var receiverStateEl = document.getElementById('receiver-state');
var receiverUrlEl = document.getElementById('receiver-url');
var receiverInputEl = document.getElementById('receiver-input');
var fileInputEl = document.getElementById('file-input');
var pendingCountEl = document.getElementById('pending-count');
var statusDotEl = document.getElementById('status-dot');
var MAX_FILE_TEXT_LENGTH = 2 * 1024 * 1024;
function setStatus(text) {
statusEl.textContent = text;
@@ -67,6 +69,31 @@
send({ type: 'verstak.capture', kind: 'page' });
});
document.getElementById('capture-file').addEventListener('click', function () {
var file = fileInputEl.files && fileInputEl.files[0];
if (!file) {
setStatus('Choose a text file first');
return;
}
if (file.size > MAX_FILE_TEXT_LENGTH) {
setStatus('File is too large for text capture');
return;
}
setStatus('Reading file...');
file.text().then(function (content) {
send({
type: 'verstak.capture',
kind: 'file',
fileName: file.name,
fileMime: file.type || 'text/plain',
fileSize: file.size,
fileText: content
});
}).catch(function (err) {
setStatus(err && err.message ? err.message : String(err));
});
});
document.getElementById('retry').addEventListener('click', function () {
send({ type: 'verstak.capture', action: 'retryPending' });
});