summary refs log tree commit diff
path: root/pages/main
diff options
context:
space:
mode:
authorWlodekM <[email protected]>2024-11-30 18:11:32 +0200
committerWlodekM <[email protected]>2024-11-30 18:11:32 +0200
commit97157622be86c68f69e6e48f3746ca2c70b7e8a8 (patch)
tree32fe8069343d2b41f01b2d58325942fb43864056 /pages/main
initial commit
Diffstat (limited to 'pages/main')
-rw-r--r--pages/main/page.html7
-rw-r--r--pages/main/page.js74
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