comparison src/chat.html.luan @ 7:41d35b72c774

chat page
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 29 Oct 2024 22:11:40 -0600
parents a49866b52cc2
children d654e3471132
comparison
equal deleted inserted replaced
6:e22a1ba4b2ed 7:41d35b72c774
11 local Shared = require "site:/lib/Shared.luan" 11 local Shared = require "site:/lib/Shared.luan"
12 local head = Shared.head or error() 12 local head = Shared.head or error()
13 local header = Shared.header or error() 13 local header = Shared.header or error()
14 local User = require "site:/lib/User.luan" 14 local User = require "site:/lib/User.luan"
15 local current_user = User.current or error() 15 local current_user = User.current or error()
16 local get_user_by_id = User.get_by_id or error()
17 local get_user_by_email = User.get_by_email or error() 16 local get_user_by_email = User.get_by_email or error()
18 local Utils = require "site:/lib/Utils.luan" 17 local Utils = require "site:/lib/Utils.luan"
19 local to_set = Utils.to_set or error() 18 local to_set = Utils.to_set or error()
20 local Db = require "site:/lib/Db.luan" 19 local Db = require "site:/lib/Db.luan"
21 local run_in_transaction = Db.run_in_transaction or error() 20 local run_in_transaction = Db.run_in_transaction or error()
22 local Chat = require "site:/lib/Chat.luan" 21 local Chat = require "site:/lib/Chat.luan"
23 local chat_search = Chat.search or error() 22 local chat_search = Chat.search or error()
24 23
25
26 local function other_users(user,chat)
27 local my_id = user.id
28 local t = {}
29 for _, user_id in ipairs(chat.user_ids) do
30 if user_id ~= my_id then
31 local other_user = get_user_by_id(user_id) or error()
32 t[#t+1] = other_user.email
33 end
34 end
35 return concat( t, ", " )
36 end
37 24
38 local function get_chat(with) 25 local function get_chat(with)
39 local t = {} 26 local t = {}
40 local ids = {} 27 local ids = {}
41 for email in pairs(with) do 28 for email in pairs(with) do
89 %> 76 %>
90 <!doctype html> 77 <!doctype html>
91 <html> 78 <html>
92 <head> 79 <head>
93 <% head() %> 80 <% head() %>
81 <style>
82 body {
83 height: 100vh;
84 display: flex;
85 flex-direction: column;
86 }
87 div[content] {
88 margin-bottom: 0;
89 display: flex;
90 height: 100%;
91 margin-left: calc(3% - 8px);
92 }
93 div[chats] {
94 width: 250px;
95 padding-right: 8px;
96 }
97 div[chats] > div {
98 margin-top: 2px;
99 margin-bottom: 2px;
100 padding-top: 16px;
101 padding-bottom: 16px;
102 padding-left: 8px;
103 padding-right: 8px;
104 border-radius: 4px;
105 }
106 div[chats] > div:hover,
107 div[chats] > div[selected] {
108 background-color: LightBlue;
109 }
110 div[posts] {
111 padding-left: 8px;
112 border-left: 1px solid;
113 }
114 </style>
115 <script>
116 'use strict';
117
118 let currentChatId = null;
119
120 function selectChat(div) {
121 let chatId = div.getAttribute('chat');
122 if( chatId === currentChatId )
123 return;
124 let selected = div.parentNode.querySelector('[selected]');
125 if( selected ) selected.removeAttribute('selected');
126 div.setAttribute('selected','');
127 ajax(`chat.js?chat=${chatId}`);
128 }
129 </script>
94 </head> 130 </head>
95 <body> 131 <body>
96 <% header() %> 132 <% header() %>
97 <div content> 133 <div content>
98 <h1>Chat</h1> 134 <div chats>
99 <% for _, chat in ipairs(chats) do %> 135 <%
100 <p><%= other_users(user,chat) %></p> 136 for _, chat in ipairs(chats) do
101 <% end %> 137 %>
138 <div chat="<%=chat.id%>" onclick="selectChat(this)"><%= chat.other_users_email(user) %></div>
139 <%
140 end
141 %>
142 </div>
143 <div posts></div>
102 </div> 144 </div>
103 </body> 145 </body>
104 </html> 146 </html>
105 <% 147 <%
106 end 148 end