From ee66563717c16a960f393e06cae99b0cd025c9d3 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Sat, 4 Sep 2021 17:52:17 -0600 Subject: chat page kinda sorta works, needs lots of polish --- static/src/chat.md | 148 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 135 insertions(+), 13 deletions(-) (limited to 'static/src/chat.md') diff --git a/static/src/chat.md b/static/src/chat.md index c7471ef..56be112 100644 --- a/static/src/chat.md +++ b/static/src/chat.md @@ -8,6 +8,7 @@ layout: page #messages { max-height: 65vh; overflow: auto; + padding-right: 2rem; } #messages .message { @@ -43,14 +44,17 @@ layout: page const messagesEl = document.getElementById("messages"); -function renderMessages(msgs) { +let messagesScrolledToBottom = true; +messagesEl.onscroll = () => { + const el = messagesEl; + messagesScrolledToBottom = el.scrollHeight == el.scrollTop + el.clientHeight; +}; - msgs = [...msgs].reverse(); +function renderMessages(msgs) { messagesEl.innerHTML = ''; msgs.forEach((msg) => { - console.log(msg); const el = document.createElement("div"); el.className = "row message" @@ -97,15 +101,39 @@ function renderMessages(msgs) { (async () => { const failEl = document.getElementById("fail"); - setErr = (msg) => failEl.innerHTML = `${msg} (please refresh the page to retry)`; - const api = await import("/assets/api.js"); - try { + const api = await import("/assets/api.js"); + const history = await api.call("/api/chat/global/history"); - renderMessages(history.messages); + const msgs = history.messages; + + // history returns msgs in time descending, but we display them in time + // ascending. + msgs.reverse() + + const sinceID = (msgs.length > 0) ? msgs[msgs.length-1].id : ""; + + const ws = await api.ws("/api/chat/global/listen", { + params: { sinceID }, + }); + + while (true) { + renderMessages(msgs); + + // If the user was previously scrolled to the bottom then keep them + // there. + if (messagesScrolledToBottom) { + messagesEl.scrollTop = messagesEl.scrollHeight; + } + + const msg = await ws.next(); + msgs.push(msg.message); + renderMessages(msgs); + } + } catch (e) { e = `Failed to fetch message history: ${e}` @@ -114,13 +142,107 @@ function renderMessages(msgs) { return; } - //const ws = await api.ws("/api/chat/global/listen"); +})() - //while (true) { - // const msg = await ws.next(); - // console.log("got msg", msg); - //} + -})() + + +
+
New Message
+
+
+ + +
+
+

+ Your name is displayed alongside your message. + + Your name+secret is used to generate your userID, which is also + displayed alongside your message. + + Other users can validate two messages are from the same person + by comparing the messages' userID. +

+
+
+
+
+ +
+
+
+
+ +
+
+ +
+ + -- cgit v1.2.3