From a0215f7810e2552a3537aed16136ad16364025cd Mon Sep 17 00:00:00 2001 From: Adam French Date: Tue, 17 Mar 2026 00:53:37 +0000 Subject: [PATCH] Make images and video smaller in chat --- nginx/vue/src/components/util/Chat.vue | 191 ++++++++++++------------- 1 file changed, 92 insertions(+), 99 deletions(-) diff --git a/nginx/vue/src/components/util/Chat.vue b/nginx/vue/src/components/util/Chat.vue index d799650..cd4b9db 100644 --- a/nginx/vue/src/components/util/Chat.vue +++ b/nginx/vue/src/components/util/Chat.vue @@ -13,136 +13,129 @@ const messagesContainer = ref(null); const fileInput = ref(null); function scrollToBottom() { - nextTick(() => { - if (messagesContainer.value) { - messagesContainer.value.scrollTop = - messagesContainer.value.scrollHeight; - } - }); + nextTick(() => { + if (messagesContainer.value) { + messagesContainer.value.scrollTop = messagesContainer.value.scrollHeight; + } + }); } watch(messages, scrollToBottom, { deep: true }); function sendMessage() { - const text = messageInput.value.trim(); - if (!text) return; - messagesStore.sendMessage(text); - messageInput.value = ""; + const text = messageInput.value.trim(); + if (!text) return; + messagesStore.sendMessage(text); + messageInput.value = ""; } async function onFileSelected(e) { - const file = e.target.files[0]; - if (!file) return; - await messagesStore.uploadAndSendFile(file); - fileInput.value.value = ""; + const file = e.target.files[0]; + if (!file) return; + await messagesStore.uploadAndSendFile(file); + fileInput.value.value = ""; } function isImageUrl(url) { - return /\.(jpg|jpeg|png|gif|webp)$/i.test(url); + return /\.(jpg|jpeg|png|gif|webp)$/i.test(url); } function isVideoUrl(url) { - return /\.(mp4|webm|ogg|mov)$/i.test(url); + return /\.(mp4|webm|ogg|mov)$/i.test(url); } function isSafeFileUrl(url) { - return typeof url === "string" && url.startsWith("/uploads/"); + return typeof url === "string" && url.startsWith("/uploads/"); } const urlRegex = /(https?:\/\/[^\s<]+)/g; function parseMessageParts(text) { - const parts = []; - let lastIndex = 0; - let match; - while ((match = urlRegex.exec(text)) !== null) { - if (match.index > lastIndex) { - parts.push({ - type: "text", - value: text.slice(lastIndex, match.index), - }); - } - parts.push({ type: "link", value: match[1] }); - lastIndex = urlRegex.lastIndex; + const parts = []; + let lastIndex = 0; + let match; + while ((match = urlRegex.exec(text)) !== null) { + if (match.index > lastIndex) { + parts.push({ + type: "text", + value: text.slice(lastIndex, match.index), + }); } - if (lastIndex < text.length) { - parts.push({ type: "text", value: text.slice(lastIndex) }); - } - return parts; + parts.push({ type: "link", value: match[1] }); + lastIndex = urlRegex.lastIndex; + } + if (lastIndex < text.length) { + parts.push({ type: "text", value: text.slice(lastIndex) }); + } + return parts; } onMounted(() => { - messagesStore.connect(); + messagesStore.connect(); }); onUnmounted(() => { - messagesStore.disconnect(); + messagesStore.disconnect(); });