57 lines
1.9 KiB
JavaScript
57 lines
1.9 KiB
JavaScript
importScripts("clipper-core.js");
|
|
|
|
const COMMAND_NAME = "clip-current-page";
|
|
let badgeTimer;
|
|
let clipInFlight = false;
|
|
|
|
async function setBadge(text, color, title, clearAfterMs = 0) {
|
|
clearTimeout(badgeTimer);
|
|
await chrome.action.setBadgeBackgroundColor({ color });
|
|
await chrome.action.setBadgeText({ text });
|
|
if (title) await chrome.action.setTitle({ title });
|
|
if (clearAfterMs > 0) {
|
|
badgeTimer = setTimeout(() => {
|
|
void chrome.action.setBadgeText({ text: "" });
|
|
void chrome.action.setTitle({ title: "LLM Wiki Clipper" });
|
|
}, clearAfterMs);
|
|
}
|
|
}
|
|
|
|
async function clipCurrentPage(commandTab) {
|
|
if (clipInFlight) {
|
|
await setBadge("…", "#4f46e5", "A page clip is already in progress");
|
|
return;
|
|
}
|
|
clipInFlight = true;
|
|
const core = globalThis.LLMWikiClipper;
|
|
try {
|
|
await setBadge("…", "#4f46e5", "Clipping current page...");
|
|
const settings = await core.loadSettings();
|
|
const connection = {
|
|
serverUrl: settings.serverUrl,
|
|
accessToken: settings.accessToken,
|
|
};
|
|
const { projects, baseUrl } = await core.loadProjects(connection);
|
|
connection.serverUrl = baseUrl;
|
|
const project = core.selectProject(projects, settings.preferredProjectPath);
|
|
if (!project) throw new Error("No LLM Wiki project is available");
|
|
|
|
const page = await core.extractActiveTab(commandTab);
|
|
const submitted = await core.submitClip(page, project.path, connection);
|
|
await chrome.storage.local.set({
|
|
serverUrl: submitted.baseUrl,
|
|
});
|
|
await setBadge("✓", "#059669", `Saved to ${project.name || "LLM Wiki"}`, 4000);
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : String(error);
|
|
console.error("[LLM Wiki Clipper] shortcut failed:", error);
|
|
await setBadge("!", "#dc2626", `Clip failed: ${message}`, 7000);
|
|
} finally {
|
|
clipInFlight = false;
|
|
}
|
|
}
|
|
|
|
chrome.commands.onCommand.addListener((command, tab) => {
|
|
if (command === COMMAND_NAME) void clipCurrentPage(tab);
|
|
});
|