Refactor settings.js to replace shorthand DOM lookups with explicit element references for improved readability and maintainability.
This commit is contained in:
@@ -1,62 +1,75 @@
|
|||||||
// settings.js
|
// settings.js
|
||||||
const $ = (id) => document.getElementById(id);
|
|
||||||
|
// DOM refs
|
||||||
|
const memosUrlInput = document.getElementById("memos-url");
|
||||||
|
const apiTokenInput = document.getElementById("api-token");
|
||||||
|
const visibilitySelect = document.getElementById("visibility");
|
||||||
|
const clipModeSelect = document.getElementById("clip-mode");
|
||||||
|
const includeImagesCheck = document.getElementById("include-images");
|
||||||
|
const includeTagsCheck = document.getElementById("include-tags");
|
||||||
|
const saveBtn = document.getElementById("save-btn");
|
||||||
|
const saveDefaultsBtn = document.getElementById("save-defaults-btn");
|
||||||
|
const testBtn = document.getElementById("test-btn");
|
||||||
|
const statusEl = document.getElementById("status");
|
||||||
|
const defaultsStatusEl = document.getElementById("defaults-status");
|
||||||
|
|
||||||
async function load() {
|
async function load() {
|
||||||
const s = await chrome.storage.sync.get([
|
const s = await chrome.storage.sync.get([
|
||||||
"memosUrl", "apiToken", "visibility", "clipMode", "includeImages", "includeTags"
|
"memosUrl", "apiToken", "visibility", "clipMode", "includeImages", "includeTags"
|
||||||
]);
|
]);
|
||||||
if (s.memosUrl) $("memos-url").value = s.memosUrl;
|
if (s.memosUrl) memosUrlInput.value = s.memosUrl;
|
||||||
if (s.apiToken) $("api-token").value = s.apiToken;
|
if (s.apiToken) apiTokenInput.value = s.apiToken;
|
||||||
if (s.visibility) $("visibility").value = s.visibility;
|
if (s.visibility) visibilitySelect.value = s.visibility;
|
||||||
if (s.clipMode) $("clip-mode").value = s.clipMode;
|
if (s.clipMode) clipModeSelect.value = s.clipMode;
|
||||||
if (s.includeImages !== undefined) $("include-images").checked = s.includeImages;
|
if (s.includeImages !== undefined) includeImagesCheck.checked = s.includeImages;
|
||||||
if (s.includeTags !== undefined) $("include-tags").checked = s.includeTags;
|
if (s.includeTags !== undefined) includeTagsCheck.checked = s.includeTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
function showStatus(el, ok, msg) {
|
function showStatus(el, ok, msg) {
|
||||||
el.textContent = msg;
|
el.textContent = msg;
|
||||||
el.className = `status ${ok ? "ok" : "err"}`;
|
el.className = `status ${ok ? "ok" : "err"}`;
|
||||||
|
el.classList.remove("hidden");
|
||||||
}
|
}
|
||||||
|
|
||||||
$("save-btn").addEventListener("click", async () => {
|
saveBtn.addEventListener("click", async () => {
|
||||||
const url = $("memos-url").value.trim().replace(/\/$/, "");
|
const url = memosUrlInput.value.trim().replace(/\/$/, "");
|
||||||
const token = $("api-token").value.trim();
|
const token = apiTokenInput.value.trim();
|
||||||
if (!url || !token) {
|
if (!url || !token) {
|
||||||
showStatus($("status"), false, "URL and token are required.");
|
showStatus(statusEl, false, "URL and token are required.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await chrome.storage.sync.set({ memosUrl: url, apiToken: token });
|
await chrome.storage.sync.set({ memosUrl: url, apiToken: token });
|
||||||
showStatus($("status"), true, "✓ Saved.");
|
showStatus(statusEl, true, "✓ Saved.");
|
||||||
});
|
});
|
||||||
|
|
||||||
$("save-defaults-btn").addEventListener("click", async () => {
|
saveDefaultsBtn.addEventListener("click", async () => {
|
||||||
await chrome.storage.sync.set({
|
await chrome.storage.sync.set({
|
||||||
visibility: $("visibility").value,
|
visibility: visibilitySelect.value,
|
||||||
clipMode: $("clip-mode").value,
|
clipMode: clipModeSelect.value,
|
||||||
includeImages: $("include-images").checked,
|
includeImages: includeImagesCheck.checked,
|
||||||
includeTags: $("include-tags").checked,
|
includeTags: includeTagsCheck.checked,
|
||||||
});
|
});
|
||||||
showStatus($("defaults-status"), true, "✓ Defaults saved.");
|
showStatus(defaultsStatusEl, true, "✓ Defaults saved.");
|
||||||
});
|
});
|
||||||
|
|
||||||
$("test-btn").addEventListener("click", async () => {
|
testBtn.addEventListener("click", async () => {
|
||||||
const url = $("memos-url").value.trim().replace(/\/$/, "");
|
const url = memosUrlInput.value.trim().replace(/\/$/, "");
|
||||||
const token = $("api-token").value.trim();
|
const token = apiTokenInput.value.trim();
|
||||||
$("test-btn").textContent = "Testing…";
|
testBtn.textContent = "Testing…";
|
||||||
try {
|
try {
|
||||||
const res = await fetch(`${url}/api/v1/memos?pageSize=1`, {
|
const res = await fetch(`${url}/api/v1/memos?pageSize=1`, {
|
||||||
headers: { Authorization: `Bearer ${token}` }
|
headers: { Authorization: `Bearer ${token}` }
|
||||||
});
|
});
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
showStatus($("status"), true, `✓ Connected! (HTTP ${res.status})`);
|
showStatus(statusEl, true, `✓ Connected! (HTTP ${res.status})`);
|
||||||
} else {
|
} else {
|
||||||
const txt = await res.text();
|
const txt = await res.text();
|
||||||
showStatus($("status"), false, `✗ HTTP ${res.status}: ${txt.slice(0, 120)}`);
|
showStatus(statusEl, false, `✗ HTTP ${res.status}: ${txt.slice(0, 120)}`);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showStatus($("status"), false, `✗ ${e.message}`);
|
showStatus(statusEl, false, `✗ ${e.message}`);
|
||||||
} finally {
|
} finally {
|
||||||
$("test-btn").textContent = "Test Connection";
|
testBtn.textContent = "Test Connection";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user