From 0eba95a4028ab1158554ebc049fae77e0ca9be65 Mon Sep 17 00:00:00 2001 From: NigeParis Date: Fri, 28 Nov 2025 16:40:33 +0100 Subject: [PATCH] New look --- frontend/src/chat/chat.css | 4 ++ frontend/src/pages/chat/chat.html | 2 +- frontend/src/pages/chat/chat.ts | 68 +++++++++++++++---------------- src/chat/src/app.ts | 5 +-- 4 files changed, 40 insertions(+), 39 deletions(-) diff --git a/frontend/src/chat/chat.css b/frontend/src/chat/chat.css index 6204f43..95c2bb5 100644 --- a/frontend/src/chat/chat.css +++ b/frontend/src/chat/chat.css @@ -1,4 +1,8 @@ @import "tailwindcss"; +@font-face { + font-family: "Nimbus Mono L"; + src: url("/fonts/NimbusMonoL.woff2") format("woff2"); +} .btn-style { @apply diff --git a/frontend/src/pages/chat/chat.html b/frontend/src/pages/chat/chat.html index 7c31b84..dd8c5da 100644 --- a/frontend/src/pages/chat/chat.html +++ b/frontend/src/pages/chat/chat.html @@ -2,7 +2,7 @@

- ChatterBoxes + ChatterBox


diff --git a/frontend/src/pages/chat/chat.ts b/frontend/src/pages/chat/chat.ts index 6e5369c..1636c86 100644 --- a/frontend/src/pages/chat/chat.ts +++ b/frontend/src/pages/chat/chat.ts @@ -18,8 +18,6 @@ const color = { const machineHostName = window.location.hostname; console.log('connect to login at %chttps://' + machineHostName + ':8888/app/login',color.yellow); - - let __socket: Socket | undefined = undefined; document.addEventListener('ft:pageChange', () => { if (__socket !== undefined) @@ -28,10 +26,9 @@ document.addEventListener('ft:pageChange', () => { console.log("Page changed"); }) - function getSocket(): Socket { - let addressHost = `wss://${machineHostName}:8888`; - // let addressHost = `wss://localhost:8888`; + // let addressHost = `wss://${machineHostName}:8888`; + let addressHost = `wss://localhost:8888`; if (__socket === undefined) __socket = io(addressHost, { @@ -47,9 +44,6 @@ async function isLoggedIn() { return getUser() || null; } - - - async function windowStateHidden() { const socketId = __socket || undefined; let oldName = localStorage.getItem("oldName") || undefined; @@ -81,7 +75,6 @@ async function windowStateVisable() { } - async function listBuddies(buddies: HTMLDivElement, listBuddies: string ) { if (!buddies) return; @@ -94,6 +87,16 @@ async function listBuddies(buddies: HTMLDivElement, listBuddies: string ) { } +function waitSocketConnected(socket: Socket): Promise { + return new Promise(resolve => { + if (socket.connected) return resolve(); // already connected + socket.on("connect", () => resolve()); + }); +} +const bconnected = document.getElementById('b-help') as HTMLButtonElement; +if (bconnected) { + bconnected.click(); +} @@ -103,7 +106,9 @@ function handleChat(_url: string, _args: RouteHandlerParams): RouteHandlerReturn // Listen for the 'connect' event - socket.on("connect", () => { + socket.on("connect", async () => { + + await waitSocketConnected(socket); console.log("I AM Connected to the server:", socket.id); const user = getUser()?.name; // Ensure we have a user AND socket is connected @@ -157,7 +162,6 @@ function handleChat(_url: string, _args: RouteHandlerParams): RouteHandlerReturn color?: { default: string, hover: string }, }; - // function handleChat(_url: string, _args: RouteHandlerParams): RouteHandlerReturn { setTitle('Chat Page'); // Listen for the 'connect' event @@ -173,10 +177,10 @@ function handleChat(_url: string, _args: RouteHandlerParams): RouteHandlerReturn const username = document.getElementById('username') as HTMLDivElement; const buddies = document.getElementById('div-buddies') as HTMLDivElement; - const value = await client.chatTest(); - if (value.kind === "success") { - console.log(value.payload); - + chatWindow.textContent = ''; + chatWindow.innerHTML = ''; + buddies.textContent = ''; + buddies.innerHTML = ''; const addMessage = (text: string) => { @@ -191,27 +195,32 @@ function handleChat(_url: string, _args: RouteHandlerParams): RouteHandlerReturn if (window.location.pathname === "/app/chat") { window.addEventListener("focus", () => { - bconnected.click(); windowStateVisable(); + bconnected.click(); console.log("%cWindow is focused on /chat", color.green); }); window.addEventListener("blur", () => { windowStateHidden(); + bconnected.click(); console.log("%cWindow is not focused on /chat", color.red); }); } socket.once('welcome', (data) => { + chatWindow.textContent = ''; + chatWindow.innerHTML = ''; + buddies.textContent = ''; + buddies.innerHTML = ''; bconnected.click(); addMessage (`${data.msg} ` + getUser()?.name); }); // Send button sendButton?.addEventListener("click", () => { - bconnected.click(); if (sendtextbox && sendtextbox.value.trim()) { const msgText = sendtextbox.value.trim(); + bconnected.click(); addMessage(msgText); const user = getUser(); if (user && socket?.connected) { @@ -233,14 +242,16 @@ function handleChat(_url: string, _args: RouteHandlerParams): RouteHandlerReturn // Clear Text button clearText?.addEventListener("click", () => { if (chatWindow) { + bconnected.click(); chatWindow.innerHTML = ''; } }); - // setInterval(async () => { - // bconnected.click(); - // }, 5000); // every 1 second + bconnected.click(); + setInterval(async () => { + bconnected.click(); + }, 50000); // every 1 second // Help Text button bconnected?.addEventListener("click", async () => { @@ -253,9 +264,8 @@ function handleChat(_url: string, _args: RouteHandlerParams): RouteHandlerReturn let user = await updateUser(); localStorage.setItem("oldName", oldUser); buddies.textContent = ""; - console.log('USER ', user?.name); if (chatWindow) { - //addMessage('@list - lists all connected users in the chat'); + // addMessage('@list - lists all connected users in the chat'); socket.emit('list', { oldUser: oldUser, user: user?.name, @@ -317,21 +327,9 @@ function handleChat(_url: string, _args: RouteHandlerParams): RouteHandlerReturn showError('Failed to login: Unknown error'); } }); - - } else if (value.kind === "notLoggedIn") { - - if (!chatWindow) return; - const messageElement = document.createElement('div-notlog'); - messageElement.textContent = "Not Logged in ...."; - chatWindow.appendChild(messageElement); - chatWindow.scrollTop = chatWindow.scrollHeight; - console.log('not logged in'); - - } else { - console.log('unknown response: ', value); - } } } }; addRoute('/chat', handleChat, { bypass_auth: true }); addRoute('/chat/', handleChat, { bypass_auth: true }); + diff --git a/src/chat/src/app.ts b/src/chat/src/app.ts index 2b03457..c4e6677 100644 --- a/src/chat/src/app.ts +++ b/src/chat/src/app.ts @@ -157,15 +157,14 @@ async function onReady(fastify: FastifyInstance) { socketId, ); } - return count; } function broadcast(data: ClientMessage, sender?: string) { fastify.io.fetchSockets().then((sockets) => { for (const s of sockets) { - const clientName = clientChat.get(s.id)?.user; if (s.id !== sender) { + const clientName = clientChat.get(s.id)?.user; // Send REAL JSON object if (clientName !== undefined) { s.emit('MsgObjectServer', { message: data }); @@ -229,7 +228,7 @@ async function onReady(fastify: FastifyInstance) { if (userFromFrontend.oldUser !== userFromFrontend.user) { console.log(color.red, 'list activated', userFromFrontend.oldUser, color.reset); - if (client === null) { + if (client?.user === null) { console.log('ERROR: clientName is NULL'); return; };