diff options
author | WlodekM <[email protected]> | 2024-11-30 18:11:32 +0200 |
---|---|---|
committer | WlodekM <[email protected]> | 2024-11-30 18:11:32 +0200 |
commit | 97157622be86c68f69e6e48f3746ca2c70b7e8a8 (patch) | |
tree | 32fe8069343d2b41f01b2d58325942fb43864056 /pages/main |
initial commit
Diffstat (limited to 'pages/main')
-rw-r--r-- | pages/main/page.html | 7 | ||||
-rw-r--r-- | pages/main/page.js | 74 |
2 files changed, 81 insertions, 0 deletions
diff --git a/pages/main/page.html b/pages/main/page.html new file mode 100644 index 0000000..8b16e26 --- /dev/null +++ b/pages/main/page.html @@ -0,0 +1,7 @@ +<div class="channel"> + <div class="messages" id="messages"></div> + <div class="messageInput disabled" id="messageForm"> + <textarea name="message input" id="messageInput"></textarea> + <button id="send">Send</button> + </div> +</div> \ No newline at end of file diff --git a/pages/main/page.js b/pages/main/page.js new file mode 100644 index 0000000..c337888 --- /dev/null +++ b/pages/main/page.js @@ -0,0 +1,74 @@ +import { shiftHeld } from "../../lib/key.js" +import html from "../../lib/htmlbuilder.js" + +async function fetchJSON(url, opts) { + let resp = await fetch(url, opts); + return await resp.json() +} + +function scrollToBottomOfElement(element) { + element.scrollTo(0, element.scrollHeight); +} + +export function onload() { + const msgArea = document.getElementById("messages"); + + function createMessage(msg) { + let elem = html('div') + .class('message') + .child('div') + .class('message-header') + .child('span') + .class('username') + .text(msg.author.display_name ? `${msg.author.display_name} (${msg.author.username})` : msg.author.username) + .up() + .child('div') + .class('action-buttons') + .child('button').text('reply').up() + .up() + .up() + .child('span') + .class('post-content') + .text(msg?.content) + .up() + msgArea.appendChild(elem) + } + document.getElementById("messageForm").classList.remove('disabled') + msgArea.innerHTML = ""; + // :+1: + + for (const msg of window.stores.sdlib.messages.reverse()) { + createMessage(msg) + } + scrollToBottomOfElement(msgArea.parentElement); + + stores.sdlib.wsEvents.on("new_post", post => { + console.debug('posting of the poster', post) + let scrolledToBottom = msgArea.parentElement.scrollTopMax == msgArea.parentElement.scrollTop; + createMessage(post.data) + if(scrolledToBottom) scrollToBottomOfElement(msgArea.parentElement); + }) + + const submitBtn = document.getElementById("send") + + submitBtn.onclick = function (event) { // using on(event) = ... instead of addEventListener("(event)", ...) because i cant be bothered to clear the event on channel change lol + let msg = document.getElementById("messageInput").value; + stores.sdlib.ws.send(JSON.stringify({ + command: "post", + content: msg, + replies: [], + attachments: [] + })) + document.getElementById("messageInput").value = "" + } + + document.getElementById('messageInput').addEventListener('keydown', event => { + if ( + event.key == "Enter" && + !shiftHeld + ) { + event.preventDefault(); + if (!submitBtn.disabled) submitBtn.click(); + } + }) +} \ No newline at end of file |