Files
memos-chrome-extension/settings.js
2026-03-14 21:21:53 +01:00

64 lines
2.2 KiB
JavaScript

// settings.js
const $ = (id) => document.getElementById(id);
async function load() {
const s = await chrome.storage.sync.get([
"memosUrl", "apiToken", "visibility", "clipMode", "includeImages", "includeTags"
]);
if (s.memosUrl) $("memos-url").value = s.memosUrl;
if (s.apiToken) $("api-token").value = s.apiToken;
if (s.visibility) $("visibility").value = s.visibility;
if (s.clipMode) $("clip-mode").value = s.clipMode;
if (s.includeImages !== undefined) $("include-images").checked = s.includeImages;
if (s.includeTags !== undefined) $("include-tags").checked = s.includeTags;
}
function showStatus(el, ok, msg) {
el.textContent = msg;
el.className = `status ${ok ? "ok" : "err"}`;
}
$("save-btn").addEventListener("click", async () => {
const url = $("memos-url").value.trim().replace(/\/$/, "");
const token = $("api-token").value.trim();
if (!url || !token) {
showStatus($("status"), false, "URL and token are required.");
return;
}
await chrome.storage.sync.set({ memosUrl: url, apiToken: token });
showStatus($("status"), true, "✓ Saved.");
});
$("save-defaults-btn").addEventListener("click", async () => {
await chrome.storage.sync.set({
visibility: $("visibility").value,
clipMode: $("clip-mode").value,
includeImages: $("include-images").checked,
includeTags: $("include-tags").checked,
});
showStatus($("defaults-status"), true, "✓ Defaults saved.");
});
$("test-btn").addEventListener("click", async () => {
const url = $("memos-url").value.trim().replace(/\/$/, "");
const token = $("api-token").value.trim();
$("test-btn").textContent = "Testing…";
try {
const res = await fetch(`${url}/api/v1/memos?pageSize=1`, {
headers: { Authorization: `Bearer ${token}` }
});
if (res.ok) {
showStatus($("status"), true, `✓ Connected! (HTTP ${res.status})`);
} else {
const txt = await res.text();
showStatus($("status"), false, `✗ HTTP ${res.status}: ${txt.slice(0, 120)}`);
}
} catch (e) {
showStatus($("status"), false, `${e.message}`);
} finally {
$("test-btn").textContent = "Test Connection";
}
});
load();