undo the last 6 merges i fucked up
All checks were successful
ci/woodpecker/push/build-and-publish Pipeline was successful

This commit is contained in:
Twig 2025-07-10 16:10:55 +02:00
parent 0afb269788
commit 323178af6b
No known key found for this signature in database
14 changed files with 251 additions and 120 deletions

View file

@ -9,11 +9,28 @@
</div>
<div id="message-box" class="rounded-corners">
<form id="message-form" @submit="sendMessage">
<input v-model="messageInput" id="message-box-input" class="rounded-corners" type="text"
name="message-input" autocomplete="off">
<button id="submit-button" type="submit">
<Icon name="lucide:send" />
</button>
<div id="message-box-left-elements">
<span class="message-box-button">
<Icon name="lucide:file-plus-2" />
</span>
</div>
<div id="message-textarea">
<div id="message-textbox-input" class=""
role="textbox" ref="messageTextboxInput"
autocorrect="off" spellcheck="true" contenteditable="true"
@keydown="handleTextboxKeyDown" @input="handleTextboxInput">
</div>
</div>
<div id="message-box-right-elements">
<button class="message-box-button" type="submit">
<Icon name="lucide:send" />
</button>
<span class="message-box-button">
<Icon name="lucide:image-play" />
</span>
</div>
</form>
</div>
</div>
@ -106,11 +123,38 @@ function pushMessage(message: MessageResponse) {
messages.value.push(message);
}
function handleTextboxKeyDown(event: KeyboardEvent) {
if (event.key === "Enter" && event.shiftKey && messageTextboxInput.value) {
// this enters a newline, due to not preventing default
} else if (event.key === "Enter") {
event.preventDefault()
sendMessage(event)
}
adjustTextboxHeight()
}
function handleTextboxInput() {
if (messageTextboxInput.value) {
messageInput.value = messageTextboxInput.value.innerText;
}
adjustTextboxHeight()
}
// this technically uses pixel units, but it's still set using dynamic units
function adjustTextboxHeight() {
if (messageTextboxInput.value && messageTextboxDisplay.value) {
messageTextboxInput.value.style.height = "auto"
messageTextboxInput.value.style.height = `${messageTextboxInput.value.scrollHeight}px`
}
}
const messages = ref<MessageResponse[]>([]);
const messageInput = ref<string>();
const messageInput = ref<string>("");
const messagesElement = ref<HTMLDivElement>();
const messageTextboxInput = ref<HTMLDivElement>();
const messageTextboxDisplay = ref<HTMLDivElement>();
if (messagesRes) messages.value = messagesRes;
@ -158,14 +202,21 @@ if (accessToken && apiBase) {
function sendMessage(e: Event) {
e.preventDefault();
const message = {
message: messageInput.value
}
console.log("message:", message);
if (message.message) {
if (messageInput.value && messageInput.value.trim() !== "") {
const message = {
message: messageInput.value.trim().replace(/\n/g, "<br>") // trim, and replace \n with <br>
}
console.log("message:", message);
ws.send(JSON.stringify(message));
messageInput.value = "";
console.log("MESSAGE SENT!!!");
// reset input field
messageInput.value = ""
if (messageTextboxInput.value) {
messageTextboxInput.value.innerText = ""
}
adjustTextboxHeight()
}
}
@ -241,38 +292,63 @@ router.beforeEach((to, from, next) => {
<style scoped>
#message-area {
display: grid;
grid-template-rows: 8fr 1fr;
display: flex;
flex-direction: column;
padding-left: 1dvw;
padding-right: 1dvw;
overflow: hidden;
flex-grow: 1;
}
#message-box {
display: flex;
flex-direction: column;
justify-content: center;
align-content: center;
border: 1px solid var(--padding-color);
padding-bottom: 1dvh;
padding-top: 1dvh;
margin-bottom: 1dvh;
margin-bottom: 2dvh;
margin-left: 1dvw;
margin-right: 1dvw;
padding-left: 2%;
padding-right: 2%;
align-items: center;
color: var(--text-color);
border: 1px solid var(--padding-color);
background-color: var(--chatbox-background-color);
}
#message-form {
display: flex;
justify-content: center;
flex-direction: row;
gap: .55em;
}
#message-box-input {
width: 80%;
background-color: var(--sidebar-background-color);
#message-textarea {
flex-grow: 1;
min-height: 2.35em;
}
#message-textbox-input {
width: 100%;
max-height: 50dvh;
padding: 0.5em 0;
user-select: text;
font-family: inherit;
font-size: inherit;
line-height: normal;
border: none;
color: inherit;
padding-left: 1dvw;
padding-right: 1dvw;
background-color: #40404000; /* completely transparent colour */
text-align: left;
word-break: break-word;
overflow-wrap: break-word;
overflow-y: auto;
}
#message-box-left-elements, #message-box-right-elements {
display: flex;
align-items: center;
}
#messages {
@ -283,7 +359,7 @@ router.beforeEach((to, from, next) => {
padding-right: 1dvw;
}
#submit-button {
.message-box-button {
background-color: inherit;
border: none;
color: var(--primary-color);
@ -291,7 +367,7 @@ router.beforeEach((to, from, next) => {
font-size: 1.5em;
}
#submit-button:hover {
.message-box-button:hover {
color: var(--primary-highlighted-color);
cursor: pointer;
}