From 603f8492cbc1369a519800bd415b583cc1eb6a57 Mon Sep 17 00:00:00 2001 From: fretuks Date: Wed, 8 Apr 2026 09:35:49 +0200 Subject: [PATCH] fix some minor issues --- package.json | 3 ++- public/market.js | 9 +++++---- public/script.js | 34 +++++++++++++++++----------------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 104bdee..c511c39 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,11 @@ }, "dependencies": { "bcrypt": "^5.1.1", - "body-parser": "^1.20.2", "better-sqlite3": "^9.5.0", + "body-parser": "^1.20.2", "express": "^4.19.2", "express-session": "^1.17.3", + "qs": "^6.15.0", "session-file-store": "^1.5.0" } } diff --git a/public/market.js b/public/market.js index 81b76ea..13bfa94 100644 --- a/public/market.js +++ b/public/market.js @@ -139,19 +139,20 @@ async function collectMarketPersona(marketId, personaType) { setMarketStatus(personaType === "assistant" ? "AI persona collected." : "User persona collected.", "success"); } -refreshMarketBtn.addEventListener("click", loadMarketPersonas); +refreshMarketBtn.addEventListener("click", () => { void loadMarketPersonas(); }); marketSearchInput.addEventListener("input", applyMarketFilter); marketPreviewCancel.addEventListener("click", closeMarketPreview); marketPreviewClose.addEventListener("click", closeMarketPreview); marketPreviewModal.addEventListener("click", (event) => { if (event.target === marketPreviewModal) closeMarketPreview(); }); marketPreviewConfirm.addEventListener("click", async () => { if (!pendingMarketPersona) return; - const {id, persona_type} = pendingMarketPersona; + const marketId = pendingMarketPersona.id; + const personaType = pendingMarketPersona.persona_type; closeMarketPreview(); - await collectMarketPersona(id, persona_type); + await collectMarketPersona(marketId, personaType); }); window.addEventListener("load", () => { applyTheme(localStorage.getItem("krishd-theme") || "fakegpt"); - loadMarketPersonas(); + void loadMarketPersonas(); }); diff --git a/public/script.js b/public/script.js index 4747e11..96d1a3b 100644 --- a/public/script.js +++ b/public/script.js @@ -7,7 +7,7 @@ const registerUsernameInput = $("registerUsername"), registerPasswordInput = $(" const loginSubmit = $("loginSubmit"), registerSubmit = $("registerSubmit"); const chatList = $("chatList"), chatSearchInput = $("chatSearch"), newChatBtn = $("newChat"); const renameChatBtn = $("renameChat"), clearChatBtn = $("clearChat"), exportChatBtn = $("exportChat"); -const activeChatTitle = $("activeChatTitle"), workspaceSubline = $("workspaceSubline"), sessionUser = $("sessionUser"); +const activeChatTitle = $("activeChatTitle"), sessionUser = $("sessionUser"); const personaList = $("personaList"), userPersonaList = $("userPersonaList"); const personaForm = $("personaForm"), personaFormTitle = $("personaFormTitle"), personaTypeSelect = $("personaType"); const personaNameInput = $("personaName"), personaPronounsInput = $("personaPronouns"), personaAppearanceInput = $("personaAppearance"); @@ -58,8 +58,10 @@ function setPersonaFormNotice(message = "", state = "") { personaFormNotice.className = state ? `status ${state}` : "status"; } function setMessageContent(el, content) { - if (window.marked && window.DOMPurify) { - el.innerHTML = DOMPurify.sanitize(marked.parse(content, {breaks: true})); + const markdownParser = window.marked; + const purifier = window.DOMPurify; + if (markdownParser?.parse && purifier?.sanitize) { + el.innerHTML = purifier.sanitize(markdownParser.parse(content, {breaks: true})); } else { el.textContent = content; } @@ -110,10 +112,6 @@ function updateWorkspaceCopy() { } } -function updateSummaryStats() { - return currentSummary; -} - function updateContextRail() { return modelSelect?.selectedOptions[0]?.textContent || ""; } @@ -353,13 +351,14 @@ async function deleteChat(id) { async function displayModels() { const res = await get("/models"); - if (res.error || !Array.isArray(res.models)) { + const models = Array.isArray(res.models) ? res.models : null; + if (res.error || !models) { modelSelect.innerHTML = ""; updateContextRail(); return setNotice("Models could not be loaded.", "error"); } modelSelect.innerHTML = ""; - res.models.forEach((model, index) => { + models.forEach((model, index) => { const option = document.createElement("option"); option.value = model.model; option.textContent = model.name; option.selected = index === 0; modelSelect.appendChild(option); }); @@ -428,23 +427,24 @@ function togglePersonaPopover(event) { } toggleButtons.forEach((btn) => btn.addEventListener("click", () => showAuthScreen(btn.dataset.target))); -loginForm.addEventListener("submit", (event) => { event.preventDefault(); handleAuth("login", {username: loginUsernameInput.value.trim(), password: loginPasswordInput.value.trim()}); }); -registerForm.addEventListener("submit", (event) => { event.preventDefault(); handleAuth("register", {username: registerUsernameInput.value.trim(), password: registerPasswordInput.value.trim()}); }); +loginForm.addEventListener("submit", (event) => { event.preventDefault(); void handleAuth("login", {username: loginUsernameInput.value.trim(), password: loginPasswordInput.value.trim()}); }); +registerForm.addEventListener("submit", (event) => { event.preventDefault(); void handleAuth("register", {username: registerUsernameInput.value.trim(), password: registerPasswordInput.value.trim()}); }); $("logout").addEventListener("click", async () => { await post("/logout", {}); chatDiv.style.display = "none"; authDiv.style.display = "grid"; activeChatId = null; currentUsername = ""; currentSummary = null; chatSessions = []; currentMessages = []; assistantPersonas = []; userPersonas = []; activePersonaId = null; activeUserPersonaId = null; publishedPersonaIds = new Set(); messagesDiv.innerHTML = ""; renderChatList(); updateChatActionState(); showAuthScreen("login"); setAuthMessage("Logged out.", "success"); setNotice("Ready."); }); -sendBtn.addEventListener("click", sendMessage); -msgInput.addEventListener("keydown", (event) => { if (event.key === "Enter" && !event.shiftKey) { event.preventDefault(); sendMessage(); } }); +sendBtn.addEventListener("click", () => { void sendMessage(); }); +msgInput.addEventListener("keydown", (event) => { if (event.key === "Enter" && !event.shiftKey) { event.preventDefault(); void sendMessage(); } }); msgInput.addEventListener("input", function () { this.style.height = "auto"; this.style.height = `${Math.min(this.scrollHeight, 180)}px`; }); -newChatBtn.addEventListener("click", createNewChat); renameChatBtn.addEventListener("click", () => activeChatId && renameChat(activeChatId)); -clearChatBtn.addEventListener("click", () => activeChatId && clearChat(activeChatId)); exportChatBtn.addEventListener("click", exportCurrentChat); +newChatBtn.addEventListener("click", () => { void createNewChat(); }); +renameChatBtn.addEventListener("click", () => { if (activeChatId) void renameChat(activeChatId); }); +clearChatBtn.addEventListener("click", () => { if (activeChatId) void clearChat(activeChatId); }); exportChatBtn.addEventListener("click", exportCurrentChat); chatSearchInput.addEventListener("input", renderChatList); modelSelect.addEventListener("change", updateContextRail); newPersonaBtn.addEventListener("click", () => openPersonaForm()); newUserPersonaBtn.addEventListener("click", () => openPersonaForm(null, "user")); -clearPersonaBtn.addEventListener("click", () => clearPersona("assistant")); clearUserPersonaBtn.addEventListener("click", () => clearPersona("user")); -personaForm.addEventListener("submit", (event) => { event.preventDefault(); savePersona(); }); personaCloseBtn.addEventListener("click", closePersonaForm); +clearPersonaBtn.addEventListener("click", () => { void clearPersona("assistant"); }); clearUserPersonaBtn.addEventListener("click", () => { void clearPersona("user"); }); +personaForm.addEventListener("submit", (event) => { event.preventDefault(); void savePersona(); }); personaCloseBtn.addEventListener("click", closePersonaForm); personaModal.addEventListener("click", (event) => { if (event.target === personaModal) closePersonaForm(); }); personaMenuButton.addEventListener("click", togglePersonaPopover); personaPopover.addEventListener("click", (event) => event.stopPropagation()); document.addEventListener("click", closePersonaPopover); document.addEventListener("keydown", (event) => { if (event.key === "Escape") { closePersonaPopover(); closePersonaForm(); } });