diff --git a/img/ellipse-spinner.png b/img/ellipse-spinner.png new file mode 100644 index 0000000..d38d34d Binary files /dev/null and b/img/ellipse-spinner.png differ diff --git a/img/menu-button-active.png b/img/menu-button-active.png new file mode 100644 index 0000000..319230a Binary files /dev/null and b/img/menu-button-active.png differ diff --git a/img/menu-button-nonactive.png b/img/menu-button-nonactive.png new file mode 100644 index 0000000..08cc8be Binary files /dev/null and b/img/menu-button-nonactive.png differ diff --git a/index.html b/index.html index f58473c..d3b08aa 100644 --- a/index.html +++ b/index.html @@ -83,12 +83,15 @@

How can I help you today?

- +
ChatGPT can make mistakes. Consider checking important information.
+ diff --git a/index.js b/index.js index 31d1627..e759585 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,7 @@ import config from "./apiKey.js"; -const button = document.querySelector("button"); +const chatButton = document.querySelector("#chat-button"); const chatText = document.querySelector("input"); const titleImage = document.querySelector("#title-image"); const title = document.querySelector("#title"); @@ -109,7 +109,7 @@ async function fetchAIResponse(prompt) { Authorization: `Bearer ${config.apikey}`, }, body: JSON.stringify({ - model: "gpt-4", + model: "gpt-3.5-turbo", messages: [ { role: "system", @@ -159,21 +159,21 @@ chatText.addEventListener("input", async (e) => { if (checker === 0) return; if (chatText.value === "") { // console.log(1); - button.innerHTML = ``; - button.style.pointerEvents = "none"; - button.style.userSelect = "none"; - button.disabled = true; + chatButton.innerHTML = ``; + chatButton.style.pointerEvents = "none"; + chatButton.style.userSelect = "none"; + chatButton.disabled = true; } // console.log(1); else { - button.innerHTML = ``; - button.style.pointerEvents = "auto"; - button.style.userSelect = "auto"; - button.disabled = false; + chatButton.innerHTML = ``; + chatButton.style.pointerEvents = "auto"; + chatButton.style.userSelect = "auto"; + chatButton.disabled = false; } }); -button.addEventListener("click", async (e) => { +chatButton.addEventListener("click", async (e) => { e.preventDefault(); if (chatText.value === "") { console.log(1); @@ -190,20 +190,60 @@ button.addEventListener("click", async (e) => { addMessage("나", message); chatText.value = ""; - button.innerHTML = ``; + chatButton.innerHTML = ``; // button.style.pointerEvents = "none"; // button.style.userSelect = "none"; // button.disabled = true; checker = 0; + const tempMessageElement = addTemporaryMessage(); + const aiResponse = await fetchAIResponse(message); // button.innerHTML = `Send`; - button.innerHTML = ``; - button.style.pointerEvents = "none"; - button.style.userSelect = "none"; - button.disabled = true; + chatButton.innerHTML = ``; + chatButton.style.pointerEvents = "none"; + chatButton.style.userSelect = "none"; + chatButton.disabled = true; checker = 1; + // 임시 메시지 요소를 제거하고, 실제 응답으로 메시지 추가 + chatContainer.removeChild(tempMessageElement); addMessage("금쪽이", aiResponse); }); + +const menuButton = document.querySelector("#menu-button"); + +menuButton.addEventListener("mouseover", async (e) => { + e.preventDefault(); + menuButton.innerHTML = ``; +}); + +menuButton.addEventListener("mouseleave", async (e) => { + e.preventDefault(); + menuButton.innerHTML = ``; +}); + +const addTemporaryMessage = () => { + const tempMessageElement = document.createElement("div"); + tempMessageElement.className = "chat gpt-chat"; + const imgElement = document.createElement("img"); + imgElement.src = "./img/gpt4-icon.png"; + imgElement.className = "profile"; + const nameElement = document.createElement("div"); + nameElement.textContent = "ChatGPT"; + nameElement.className = "chat-name"; + const logElement = document.createElement("div"); + logElement.className = "chat-log"; + const spinnerElement = document.createElement("img"); + spinnerElement.src = "./img/ellipse-spinner.png"; // 스피너 이미지 경로를 지정하세요 + spinnerElement.className = "spinner"; + + logElement.appendChild(spinnerElement); + tempMessageElement.appendChild(imgElement); + tempMessageElement.appendChild(nameElement); + tempMessageElement.appendChild(logElement); + + chatContainer.prepend(tempMessageElement); + return tempMessageElement; +}; diff --git a/style.css b/style.css index 6779cda..845f042 100644 --- a/style.css +++ b/style.css @@ -16,7 +16,7 @@ nav { width: 100%; top: 0px; margin-bottom: 4px; - background-color: rgba(255, 255, 255, 0.866); + background-color: rgba(255, 255, 255, 0.918); } ul { @@ -117,7 +117,7 @@ form { justify-content: center; } -button { +#chat-button { border: none; width: 24px; height: 24px; @@ -127,7 +127,7 @@ button { user-select: none; } -.button img { +#chat-button img { width: 24px; height: 24px; margin: 0px; @@ -258,6 +258,11 @@ img { flex-direction: column; justify-content: center; padding-left: 10px; + cursor: pointer; +} + +.section:hover { + background-color: #f1f1f1; } .section-title { @@ -301,3 +306,26 @@ pre { code { font-family: "Consolas", "Monaco", "Courier New", monospace; /* 모노스페이스 폰트 */ } + +#menu-button { + position: fixed; + left: 0px; + top: 45%; + width: 20px; + height: 50px; + cursor: pointer; + z-index: 9999; + border: none; + background-color: white; +} + +.menu-button-icon { + width: 5px; + margin: 0px; +} + +.spinner { + width: 8px; + margin: 0; + padding: 0; +}