Update static/script.js
Browse files- static/script.js +22 -5
static/script.js
CHANGED
@@ -13,7 +13,7 @@ const MODEL_LIST = [
|
|
13 |
{ id: "deepseek/deepseek-r1:free", name: "DeepSeek R1" }
|
14 |
];
|
15 |
|
16 |
-
// ===
|
17 |
function createDropdown(dropdownId) {
|
18 |
const dropdown = document.getElementById(dropdownId);
|
19 |
const selected = dropdown.querySelector(".selected");
|
@@ -39,7 +39,6 @@ function createDropdown(dropdownId) {
|
|
39 |
options.classList.toggle("hidden");
|
40 |
});
|
41 |
|
42 |
-
// Close dropdowns if clicking outside
|
43 |
document.addEventListener("click", () => {
|
44 |
options.classList.add("hidden");
|
45 |
});
|
@@ -48,6 +47,7 @@ function createDropdown(dropdownId) {
|
|
48 |
// === Theme Toggle ===
|
49 |
const themeToggle = document.getElementById("themeToggle");
|
50 |
const toggleConfig = document.getElementById("toggleConfig");
|
|
|
51 |
const configPanel = document.getElementById("configPanel");
|
52 |
const html = document.documentElement;
|
53 |
|
@@ -55,12 +55,19 @@ function setInitialTheme() {
|
|
55 |
const savedTheme = localStorage.getItem("theme");
|
56 |
if (savedTheme === "dark") {
|
57 |
html.classList.add("dark");
|
|
|
58 |
} else if (savedTheme === "light") {
|
59 |
html.classList.remove("dark");
|
|
|
60 |
} else {
|
61 |
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
62 |
-
if (prefersDark)
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
64 |
}
|
65 |
}
|
66 |
|
@@ -69,21 +76,29 @@ setInitialTheme();
|
|
69 |
themeToggle.addEventListener("click", () => {
|
70 |
const isDark = html.classList.toggle("dark");
|
71 |
localStorage.setItem("theme", isDark ? "dark" : "light");
|
|
|
72 |
});
|
73 |
|
74 |
toggleConfig.addEventListener("click", () => {
|
75 |
configPanel.classList.toggle("hidden");
|
76 |
});
|
77 |
|
|
|
|
|
|
|
|
|
78 |
// === Chat Handling ===
|
79 |
const chatForm = document.getElementById("chatForm");
|
80 |
const userInput = document.getElementById("userInput");
|
81 |
const chatContainer = document.getElementById("chatContainer");
|
82 |
|
|
|
83 |
createDropdown("modelA");
|
84 |
createDropdown("modelB");
|
85 |
createDropdown("modelC");
|
|
|
86 |
|
|
|
87 |
function appendMessage(role, text) {
|
88 |
const div = document.createElement("div");
|
89 |
div.className = `p-3 rounded shadow max-w-2xl ${role === "user" ? "bg-blue text-fg0 self-end" : "bg-green text-fg0 self-start"}`;
|
@@ -92,6 +107,7 @@ function appendMessage(role, text) {
|
|
92 |
chatContainer.scrollTop = chatContainer.scrollHeight;
|
93 |
}
|
94 |
|
|
|
95 |
chatForm.addEventListener("submit", async (e) => {
|
96 |
e.preventDefault();
|
97 |
const prompt = userInput.value.trim();
|
@@ -107,7 +123,8 @@ chatForm.addEventListener("submit", async (e) => {
|
|
107 |
"LLM-A": document.getElementById("modelA").dataset.value,
|
108 |
"LLM-B": document.getElementById("modelB").dataset.value,
|
109 |
"LLM-C": document.getElementById("modelC").dataset.value,
|
110 |
-
}
|
|
|
111 |
};
|
112 |
|
113 |
const response = await fetch("/chat", {
|
|
|
13 |
{ id: "deepseek/deepseek-r1:free", name: "DeepSeek R1" }
|
14 |
];
|
15 |
|
16 |
+
// === Create Custom Dropdowns ===
|
17 |
function createDropdown(dropdownId) {
|
18 |
const dropdown = document.getElementById(dropdownId);
|
19 |
const selected = dropdown.querySelector(".selected");
|
|
|
39 |
options.classList.toggle("hidden");
|
40 |
});
|
41 |
|
|
|
42 |
document.addEventListener("click", () => {
|
43 |
options.classList.add("hidden");
|
44 |
});
|
|
|
47 |
// === Theme Toggle ===
|
48 |
const themeToggle = document.getElementById("themeToggle");
|
49 |
const toggleConfig = document.getElementById("toggleConfig");
|
50 |
+
const docsButton = document.getElementById("docsButton");
|
51 |
const configPanel = document.getElementById("configPanel");
|
52 |
const html = document.documentElement;
|
53 |
|
|
|
55 |
const savedTheme = localStorage.getItem("theme");
|
56 |
if (savedTheme === "dark") {
|
57 |
html.classList.add("dark");
|
58 |
+
themeToggle.textContent = "π";
|
59 |
} else if (savedTheme === "light") {
|
60 |
html.classList.remove("dark");
|
61 |
+
themeToggle.textContent = "βοΈ";
|
62 |
} else {
|
63 |
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
64 |
+
if (prefersDark) {
|
65 |
+
html.classList.add("dark");
|
66 |
+
themeToggle.textContent = "π";
|
67 |
+
} else {
|
68 |
+
html.classList.remove("dark");
|
69 |
+
themeToggle.textContent = "βοΈ";
|
70 |
+
}
|
71 |
}
|
72 |
}
|
73 |
|
|
|
76 |
themeToggle.addEventListener("click", () => {
|
77 |
const isDark = html.classList.toggle("dark");
|
78 |
localStorage.setItem("theme", isDark ? "dark" : "light");
|
79 |
+
themeToggle.textContent = isDark ? "π" : "βοΈ";
|
80 |
});
|
81 |
|
82 |
toggleConfig.addEventListener("click", () => {
|
83 |
configPanel.classList.toggle("hidden");
|
84 |
});
|
85 |
|
86 |
+
docsButton.addEventListener("click", () => {
|
87 |
+
window.location.href = "/docs";
|
88 |
+
});
|
89 |
+
|
90 |
// === Chat Handling ===
|
91 |
const chatForm = document.getElementById("chatForm");
|
92 |
const userInput = document.getElementById("userInput");
|
93 |
const chatContainer = document.getElementById("chatContainer");
|
94 |
|
95 |
+
// Create all dropdowns
|
96 |
createDropdown("modelA");
|
97 |
createDropdown("modelB");
|
98 |
createDropdown("modelC");
|
99 |
+
createDropdown("aggregator");
|
100 |
|
101 |
+
// Append Message Function
|
102 |
function appendMessage(role, text) {
|
103 |
const div = document.createElement("div");
|
104 |
div.className = `p-3 rounded shadow max-w-2xl ${role === "user" ? "bg-blue text-fg0 self-end" : "bg-green text-fg0 self-start"}`;
|
|
|
107 |
chatContainer.scrollTop = chatContainer.scrollHeight;
|
108 |
}
|
109 |
|
110 |
+
// Form Submit Event
|
111 |
chatForm.addEventListener("submit", async (e) => {
|
112 |
e.preventDefault();
|
113 |
const prompt = userInput.value.trim();
|
|
|
123 |
"LLM-A": document.getElementById("modelA").dataset.value,
|
124 |
"LLM-B": document.getElementById("modelB").dataset.value,
|
125 |
"LLM-C": document.getElementById("modelC").dataset.value,
|
126 |
+
},
|
127 |
+
aggregator: document.getElementById("aggregator").dataset.value,
|
128 |
};
|
129 |
|
130 |
const response = await fetch("/chat", {
|