Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>TaskBot v1</title> | |
<script src="https://kit.fontawesome.com/cda0e70b18.js" crossorigin="anonymous"></script> | |
<link rel="Icon" href="TaskBot logo.png"> | |
<link rel="manifest" href="/static/manifest.json"> | |
</head> | |
<style> | |
body { | |
background-color: #2f2f2f; | |
font-family: Arial, sans-serif; | |
color: white; | |
margin: 0; | |
padding: 20px; | |
} | |
nav { | |
background-color: #444; | |
padding: 5px; | |
border-radius: 5px; | |
width: 100%; | |
height: auto; | |
top: 0; | |
} | |
.sticky { | |
position: absolute; | |
top: 20px; | |
right: 20px; | |
z-index: 1000; | |
} | |
.sticky2 { | |
position: absolute; | |
top: 20px; | |
right: 80px; | |
z-index: 1000; | |
} | |
/* Dropdown Styles */ | |
.dropdown { | |
position: relative; | |
display: inline-block; | |
} | |
.btn { | |
background-color: transparent; | |
color: white; | |
border: none; | |
cursor: pointer; | |
} | |
.btn:hover { | |
background-color: #494949; | |
} | |
.dropdown-content { | |
display: none; | |
position: absolute; | |
right: 0; | |
background-color: #343232; | |
border: 1px solid black; | |
min-width: 160px; | |
box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.2); | |
z-index: 1; | |
} | |
.dropdown-content h3 { | |
margin: 5px 0; | |
color: white; | |
text-align: center; | |
} | |
.dropdown-content a { | |
color: blue; | |
padding: 12px 16px; | |
text-decoration: none; | |
display: block; | |
border-top: 1px solid transparent; | |
} | |
.dropdown-content a:hover { | |
background-color: #494949; | |
} | |
.dropdown:hover .dropdown-content { | |
display: block; | |
} | |
main { | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
justify-content: center; | |
height: calc(100vh - 100px); /* adjust if header height changes */ | |
text-align: center; | |
} | |
/* Input and Button Styles */ | |
#question { | |
padding: 10px; | |
font-size: 16px; | |
border-radius: 5px; | |
border: 1px solid #ccc; | |
margin-right: 10px; | |
} | |
#userInput { | |
width: 50%; | |
padding: 10px; | |
border-radius: 5px; | |
border: 1px solid #ccc; | |
margin-right: 10px; | |
width: 200px; | |
color: black; | |
background-color: #fff; | |
color: white; | |
} | |
.ai,.user{ | |
background-color: #444; | |
padding: 10px; | |
padding-right: 10px; | |
border-radius: 5px; | |
border: solid #ccc; | |
margin: 10px; | |
text-align: center; | |
justify-content: right; | |
width: 40%; | |
color: rgb(227, 227, 227) | |
} | |
.text1{ | |
display: flex; | |
justify-content: right; | |
align-items: center; | |
margin: 10px; | |
} | |
.text2{ | |
display: flex; | |
justify-content: left; | |
align-items: center; | |
margin: 10px; | |
} | |
.chat-input-container { | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
margin-top: 20px; | |
} | |
#sendButton { | |
margin-left: 10px; | |
padding: 10px 20px; | |
border: none; | |
border-radius: 5px; | |
background-color: #fff; | |
cursor: pointer; | |
transition: background-color 0.3s; | |
} | |
#sendButton:hover { | |
background-color: #e0e0e0; | |
} | |
.inputWrapper { | |
position: fixed; | |
bottom: 20px; | |
left: 50%; | |
transform: translateX(-50%); | |
display: flex; | |
gap: 10px; | |
z-index: 1000; | |
align-items: center; | |
} | |
.inputWrapper input { | |
width: 300px; | |
padding: 10px; | |
} | |
.inputWrapper button { | |
font-size: 18px; | |
padding: 10px 20px; | |
border-radius: 50px; | |
cursor: pointer; | |
} | |
#welcomeMessage{ | |
text-align: center; | |
margin-top: 20%; | |
} | |
</style> | |
<body> | |
<header> | |
<h2>TaskBot v1</h2> | |
<hr color="white"> | |
<div class="sticky"> | |
<div class="dropdown"> | |
<button class="btn"> | |
<i class="fa-solid fa-bars fa-2xl"></i> | |
</button> | |
<div class="dropdown-content"> | |
<h3><u>Menu</u></h3> | |
<hr> | |
<a href="https://taskbot-ai-as.netlify.app/">Home</a> | |
<a href="https://taskbot-suggest.netlify.app/">Suggest</a> | |
<a href="https://taskbot-complain.netlify.app/">Complain</a> | |
<a href="https://taskbot-ai-as.netlify.app#contact">Contact</a> | |
<a href="https://taskbot-ai-as.netlify.app#versions">More Versions</a> | |
<a href="">Explore(Available soon)</a> | |
</div> | |
</div> | |
</div> | |
<div class="sticky2"> | |
<div class="dropdown"> | |
<button class="btn"> | |
<i class="fa-solid fa-exclamation fa-2xl"></i> | |
</button> | |
<div class="dropdown-content"> | |
<h3><u>Warnings</u></h3> | |
<hr> | |
<p>1. Don't share personal info, chats may be reviewed and reused to train our models.</p> | |
<hr> | |
<p>2. TaskBot can make mistakes, double check the answers for more accuracy.</p> | |
</div> | |
</div> | |
</div> | |
</header> | |
<H1 id="welcomeMessage">Hello π, what can I help with?</H1> | |
<div id="chatArea"> | |
<div class="text1"> | |
<div class="user" style="display: none;"></div> | |
</div> | |
<div class="text2"> | |
<div class="ai" style="display: none;"></div> | |
</div> | |
</div> | |
<main> | |
<div class="inputWrapper"> | |
<input type="text" id="userInput" placeholder="Type your message here..." style="border-radius: 50px; color: black;"><br> | |
<button id="sendButton" onclick=answer()>↑</button> | |
</div> | |
</main> | |
<script> | |
async function answer() { | |
const welcomeMessage = document.getElementById('welcomeMessage'); | |
welcomeMessage.style.display = 'none'; // Hide the welcome message | |
const userInput = document.getElementById('userInput').value; | |
if (userInput.trim() === '') return; | |
// Create wrapper for text1 (User message) | |
const text1 = document.createElement('div'); | |
text1.className = 'text1'; | |
const userMessage = document.createElement('div'); | |
userMessage.className = 'user'; | |
userMessage.textContent = userInput; | |
text1.appendChild(userMessage); | |
// Append user message to the chat area | |
document.getElementById('chatArea').appendChild(text1); | |
// Clear input | |
document.getElementById('userInput').value = ''; | |
const question = userInput; // Use the already retrieved value | |
// Send a POST request to the /ask route | |
const response = await fetch("/ask", { | |
method: "POST", | |
headers: { | |
"Content-Type": "application/x-www-form-urlencoded" | |
}, | |
body: new URLSearchParams({ question: question }) | |
}); | |
const data = await response.json(); | |
// Create wrapper for text2 (AI response) | |
const text2 = document.createElement('div'); | |
text2.className = 'text2'; | |
const aiResponse = document.createElement('div'); | |
aiResponse.className = 'ai'; | |
if (data.answer) { | |
aiResponse.textContent = data.answer; | |
} else if (data.error) { | |
aiResponse.textContent = "Error: " + data.error; | |
} | |
text2.appendChild(aiResponse); | |
// Append AI response to the chat area | |
document.getElementById('chatArea').appendChild(text2); | |
} | |
if ("serviceWorker" in navigator) { | |
navigator.serviceWorker | |
.register("/static/service-worker.js") | |
.then(() => console.log("Service Worker Registered")) | |
.catch((err) => console.error("SW registration failed:", err)); | |
} | |
</script> | |
</body> | |
</html> |