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