]> git.mar77i.info Git - chat/commitdiff
add logout button
authormar77i <mar77i@protonmail.ch>
Sun, 20 Oct 2024 21:24:06 +0000 (23:24 +0200)
committermar77i <mar77i@protonmail.ch>
Sun, 20 Oct 2024 21:24:06 +0000 (23:24 +0200)
chat/static/chat/chat.css
chat/static/chat/chat.html
chat/static/chat/chat.js
todo.txt

index 6eda701ab608f99d0e2c016170415cb6b9d1ee67..b4dabaf88fe7d07dbd9b3cdcb748f90699719240 100644 (file)
@@ -2,6 +2,10 @@ html, body, nav, main, .messages, .channels, .users {
     height: 100%;
 }
 
+button {
+    padding: .5em;
+}
+
 body, nav, main {
     display: flex;
 }
@@ -50,10 +54,29 @@ nav > div {
     border: 1px solid;
 }
 
+.messages_header > button:first-of-type {
+    position: fixed;
+    top: .5em;
+    right: 1em;
+}
+
 .messages {
     overflow-y: auto;
 }
 
+h1 {
+    margin: .5em 1em;
+}
+
 ul {
     list-style-position: inside;
 }
+
+li {
+    padding: .25em;
+}
+
+.messages > p {
+    padding: .25em;
+    border-bottom: 1px solid #444;
+}
index 891af213df7a17dbebb734b49d8bfc9263676336..e068dc4ef36e7a1d16325bc8814000656fcd0a4b 100644 (file)
@@ -31,6 +31,7 @@
                 <h1></h1>
                 <ul>
                 </ul>
+                <button>Log Out</button>
             </div>
             <div class="messages">
             </div>
index 267f888e53553d14d4ffff217dfe3767b6fff488..d7f93ac7f1ad40cd3c78c3a83f776cc9629ae33e 100644 (file)
                     add_msg(null, "xhr_error", msg);
                 },
                 "load": function () {
-                    data = JSON.parse(this.responseText);
+                    var response_data;
+                    try {
+                        response_data = JSON.parse(this.responseText);
+                    } catch {
+                        response_data = this.responseText;
+                    }
                     if (this.status === 401) {
-                        maybe_redirect(data);
+                        maybe_redirect(response_data);
                     } else if (callback) {
-                        callback(data);
+                        callback(response_data);
                     }
                 }
             },
         var messages_header = _.dgEBCN0("messages_header");
         _.clear_children(messages_header.children[0]);
         _.clear_children(messages_header.children[1]);
-        _.clear_after(messages_header.children[1]);
+        _.clear_after(messages_header.children[2]);
     }
 
     function clear_channel() {
         _.clear_children(_.dgEBCN0("messages"));
         clear_messages_header();
-        _.dgEBCN0("messages_header").style.display = "none";
+        _.dgEBCN0("messages_header").children[0].appendChild(_.dcTN("Chat"));
         _.dgEBCN0("messages_footer").children[0].disabled = true;
     }
 
             messages_header.children[0].appendChild(
                 this.item_to_tn(this.items_per_id[this.msg_data.recipient_id])
             );
-            messages_header.style.display = "block";
+            // messages_header.style.display = "block";
         };
         this.items_url = "/api/user/";
         this.items_classname = "users";
             });
             messages_header.appendChild(btn);
             messages_header.children[1].style.display = "none";
-            messages_header.style.display = "block";
+            // messages_header.style.display = "block";
         };
         this.items_url = "/api/channel/";
         this.items_classname = "channels";
         }
     }
 
+    function logout() {
+        window.location.href = "/logout/";
+    }
+
     window.addEventListener(
         "load",
         function (event) {
-            var messages_footer;
+            var messages_footer = _.dgEBCN0("messages_footer");
             var ws;
-            messages_footer = _.dgEBCN0("messages_footer");
             set_channel.call(window);
             event = event || window.event;
             if (event.target.readyState !== "complete") {
             );
             messages_footer.children[0].value = "";
             messages_footer.children[1].addEventListener("click", send_msg);
+            _.dgEBCN0("messages_header").children[2].addEventListener(
+                "click",
+                logout
+            );
         }
     );
 }());
index f24a7858a71d16d32b945ceb4204fbf086a32bb0..d4549ce1ebf3601aef368495c3b6db7d9ee0ae08 100644 (file)
--- a/todo.txt
+++ b/todo.txt
@@ -1,18 +1,18 @@
-[ ] logout button
+[ ] "load more" button
+[ ] reconnect ws button; reload current channel, channel list and user list on reconnect
 [ ] show message timestamps and message edit/delete menus
    - privileged users can edit / delete any message
 [ ] edit existing messages
-[ ] "load more" button
 [ ] new message(s) indicators in left panel
-[ ] update address bar for different views
+[ ] update address bar per channel (fragment for now?)
 [ ] channel management: channel admin
 [ ] write email to user
 
-[ ] ws client infrastructure: auto-reconnect, notify-throttle
-[ ] server-side throttling
+[ ] ws client infrastructure: repeated automatic reconnects, notify-throttle
+[ ] server-side throttling, but that needs to be accounted for on the client
 
 [ ] tests for pg-trigger→notify websocket
    - somehow test each trigger statement individually, that is 4 statements * 5 models
 [ ] ws and chat tests?
-[ ] media uploads: images, gifs, even video files?
-[ ] moderation functions: report messages to MANAGERS, including private ones
+[ ] media uploads and view methods: download, image, video/audio player...
+[ ] moderation: report messages to MANAGERS, including private ones