194 lines
6.6 KiB
HTML
194 lines
6.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<link rel="stylesheet" href="/static/styles.css" />
|
|
<title>AI Assistant</title>
|
|
</head>
|
|
|
|
<body>
|
|
<header>
|
|
<div class="header-menu">
|
|
<ul>
|
|
<li>
|
|
<a href="/">
|
|
<img src="/static/img/logo.png" alt="logo" />
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/documentation">Documentation</a>
|
|
</li>
|
|
<li>
|
|
<a href="/faq">FAQ</a>
|
|
</li>
|
|
<li>
|
|
<button id="toggleButton">Show Divs</button>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Main container for the layout -->
|
|
<div class="container">
|
|
<!-- History section -->
|
|
<div class="history-background hidden">
|
|
<div class="history">
|
|
<ul>
|
|
<!-- Populate with history items -->
|
|
<li><a href="#">history1</a></li>
|
|
<li><a href="#">history2</a></li>
|
|
<li><a href="#">history3</a></li>
|
|
<li><a href="#">history4</a></li>
|
|
<li><a href="#">history5</a></li>
|
|
<li><a href="#">history6</a></li>
|
|
<li><a href="#">history7</a></li>
|
|
<li><a href="#">history8</a></li>
|
|
<li><a href="#">history9</a></li>
|
|
<li><a href="#">history10</a></li>
|
|
<li><a href="#">history11</a></li>
|
|
<li><a href="#">history12</a></li>
|
|
<li><a href="#">history13</a></li>
|
|
<li><a href="#">history14</a></li>
|
|
<li><a href="#">history15</a></li>
|
|
<li><a href="#">history16</a></li>
|
|
<li><a href="#">history17</a></li>
|
|
<li><a href="#">history18</a></li>
|
|
<li><a href="#">history19</a></li>
|
|
<li><a href="#">history20</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Models section -->
|
|
<div class="model-background hidden">
|
|
<div class="models">
|
|
<div class="titel">
|
|
<h1>Different AI models</h1>
|
|
</div>
|
|
<form action="">
|
|
<div class="grid">
|
|
<button class="code-model model-box">
|
|
<div class="overlay">
|
|
<h3>Code</h3>
|
|
<img src="/static/img/wifi.svg" alt="Wi-Fi" />
|
|
</div>
|
|
</button>
|
|
<button class="math-model model-box">
|
|
<div class="overlay">
|
|
<h3>Math</h3>
|
|
<img src="/static/img/nowifi.svg" alt="No Wi-Fi" />
|
|
</div>
|
|
</button>
|
|
<button class="language-model model-box">
|
|
<div class="overlay">
|
|
<h3>Language</h3>
|
|
</div>
|
|
</button>
|
|
<button class="default-model model-box">
|
|
<div class="overlay">
|
|
<h3>Default</h3>
|
|
</div>
|
|
</button>
|
|
<button class="default-model model-box">
|
|
<div class="overlay">
|
|
<h3>Default</h3>
|
|
</div>
|
|
</button>
|
|
<button class="default-model model-box">
|
|
<div class="overlay">
|
|
<h3>Default</h3>
|
|
</div>
|
|
</button>
|
|
<button class="default-model model-box">
|
|
<div class="overlay">
|
|
<h3>Default</h3>
|
|
</div>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Output section -->
|
|
<!-- Output section -->
|
|
<div class="output">
|
|
<div class="conversation resize" id="conversation">
|
|
{% for message in messages %} {% if message.startswith('User:') %}
|
|
<div class="user-message">{{ message }}</div>
|
|
{% else %}
|
|
<div class="ai-message">{{ message }}</div>
|
|
{% endif %} {% endfor %}
|
|
<form method="POST" action="" id="buttonForm">
|
|
<button type="button" name="option" value="chat">
|
|
<img src="/static/img/resend.svg" alt="resend" />
|
|
</button>
|
|
<button type="button" name="option" value="chat">
|
|
<img src="/static/img/edit.svg" alt="edit" />
|
|
</button>
|
|
<button type="button" name="option" value="answer">
|
|
<img src="/static/img/copy.svg" alt="copy" />
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Input section -->
|
|
<form class="input" method="POST" action="" id="inputForm">
|
|
<input
|
|
type="text"
|
|
name="user_message"
|
|
placeholder="Type your message here..."
|
|
/>
|
|
<button type="submit" name="option" value="chat">
|
|
<img src="/static/img/send.svg" alt="send" />
|
|
</button>
|
|
<button type="submit" name="option" value="voice">
|
|
<img src="/static/img/microphone.svg" alt="microphone" />
|
|
</button>
|
|
</form>
|
|
</div>
|
|
|
|
<script>
|
|
function scrollToBottom() {
|
|
const conversation = document.getElementById("conversation");
|
|
conversation.scrollTop = conversation.scrollHeight;
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
scrollToBottom(); // Scroll to the bottom when the page loads
|
|
|
|
const conversation = document.getElementById("conversation");
|
|
|
|
// Use MutationObserver to efficiently observe changes in the conversation element
|
|
const observer = new MutationObserver(() => {
|
|
scrollToBottom(); // Scroll to the bottom when a new message is added
|
|
});
|
|
|
|
observer.observe(conversation, {
|
|
childList: true,
|
|
subtree: true,
|
|
});
|
|
|
|
const button = document.getElementById("toggleButton");
|
|
|
|
button.addEventListener("click", function () {
|
|
const hiddenDivs = document.querySelectorAll("div.hidden");
|
|
const areDivsHidden = Array.from(hiddenDivs).every(div =>
|
|
getComputedStyle(div).display === "none" || getComputedStyle(div).display === ""
|
|
);
|
|
|
|
hiddenDivs.forEach((div) => {
|
|
if (getComputedStyle(div).display === "none" || getComputedStyle(div).display === "") {
|
|
div.style.display = "block"; // Show the div
|
|
div.style.width = ""; // Reset width to default
|
|
} else {
|
|
div.style.display = "none"; // Hide the div
|
|
div.style.width = ""; // Reset width to default
|
|
}
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|