comparison src/private/tools/users.html.luan @ 88:7b339b1ccd11

add tools/users.html
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 13 Mar 2025 16:18:39 -0600
parents src/private/tools/index.html.luan@e22a1ba4b2ed
children 3053a4fc10be
comparison
equal deleted inserted replaced
87:246a792adedf 88:7b339b1ccd11
1 local Luan = require "luan:Luan.luan"
2 local error = Luan.error
3 local ipairs = Luan.ipairs or error()
4 local Time = require "luan:Time.luan"
5 local time_now = Time.now or error()
6 local Table = require "luan:Table.luan"
7 local sort = Table.sort or error()
8 local Io = require "luan:Io.luan"
9 local Http = require "luan:http/Http.luan"
10 local Shared = require "site:/lib/Shared.luan"
11 local head = Shared.head or error()
12 local header = Shared.private_header or error()
13 local User = require "site:/lib/User.luan"
14 local Online = require "site:/lib/Online.luan"
15 local get_online = Online.get_user or error()
16 local Logging = require "luan:logging/Logging.luan"
17 local logger = Logging.logger "tools/users.html"
18
19
20 local function sorter(u1,u2)
21 local o1 = u1.online
22 local o2 = u2.online
23 if o1 == nil then
24 return false
25 elseif o2 == nil then
26 return true
27 else
28 return o1 > o2
29 end
30 end
31
32 return function()
33 local users = User.search("type:user")
34 for _, user in ipairs(users) do
35 user.online = get_online(user)
36 end
37 sort(users,sorter)
38 local now = time_now()
39 Io.stdout = Http.response.text_writer()
40 %>
41 <!doctype html>
42 <html>
43 <head>
44 <% head() %>
45 <style>
46 table {
47 border-collapse: collapse;
48 }
49 th, td {
50 border: 1px solid;
51 padding: 4px;
52 }
53 </style>
54 </head>
55 <body>
56 <% header() %>
57 <div content>
58 <h1>users</h1>
59 <table>
60 <tr>
61 <th>ID</th>
62 <th>name</th>
63 <th>last seen</th>
64 </tr>
65 <%
66 for _, user in ipairs(users) do
67 local online = user.online
68 local ago
69 if online == nil then
70 ago = ""
71 else
72 ago = `%><script>document.write(ago(<%= now - online %>))</script><%`
73 end
74 %>
75 <tr>
76 <td><%= user.id %></td>
77 <td><a href="<%=user.login_url()%>"><%= user.name_html() %></a></td>
78 <td><%= ago %></td>
79 </tr>
80 <%
81 end
82 %>
83 </table>
84 </div>
85 </body>
86 </html>
87 <%
88 end