Mercurial Hosting > linkmystyle
view src/private/reports/users.html.luan @ 0:8f4df159f06b
start public repo
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 11 Jul 2025 20:57:49 -0600 |
parents | |
children |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local ipairs = Luan.ipairs or error() local String = require "luan:String.luan" local to_number = String.to_number or error() local Table = require "luan:Table.luan" local sort = Table.sort or error() local Html = require "luan:Html.luan" local html_encode = Html.encode or error() local Io = require "luan:Io.luan" local Http = require "luan:http/Http.luan" local User = require "site:/lib/User.luan" local Db = require "site:/lib/Db.luan" local Reporting = require "site:/lib/Reporting.luan" local owners_with_visits = Reporting.owners_with_visits or error() local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "reports/users.html" local function by_links(user1,user2) return user1.links > user2.links end return function() local n = Http.request.parameters.n n = n and to_number(n) local users = User.search("user_registered:*","user_registered desc",n) local has_visits = owners_with_visits() for _, user in ipairs(users) do user.links = Db.count("link_user_id:"..user.id) user.traffic = has_visits[user.id] and "yes" or "" end if Http.request.parameters.sort == "links" then sort(users,by_links) end Io.stdout = Http.response.text_writer() %> <!doctype html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> @import "/tools/tools.css"; div[source] { cursor: pointer; } </style> <script src="/site.js"></script> <script src="/admin.js"></script> <script> function showForm(td) { let divSource = td.querySelector('div[source]'); let span = divSource.querySelector('span'); let divForm = td.querySelector('div[form]'); let divHidden = document.querySelector('div[hidden]'); divSource.style.display = 'none'; divForm.innerHTML = divHidden.innerHTML; let form = divForm.querySelector('form'); form.onsubmit = function(){ submitted(td); } let input = divForm.querySelector('input'); input.value = span.textContent; input.onblur = function(){ hideForm(td); } input.focus(); } function hideForm(td) { let divSource = td.querySelector('div[source]'); let divForm = td.querySelector('div[form]'); divSource.style.display = 'block'; divForm.innerHTML = ''; } function submitted(td) { let input = td.querySelector('input'); let userId = td.getAttribute('user'); ajax( `save_source.js?user=${userId}&source=${input.value}` ); } function deleteUser(userId,userName) { if( !confirm(`Do you want to delete ${userName}?`) ) return; ajax( `delete_user.js?user=${userId}` ); console.log('qqq'); } </script> </head> <body> <h1>recent users</h1> <table> <tr> <th><a href="?">registered</a></th> <th><a href="?sort=links">links</a></th> <th>traffic</th> <th>name</th> <th>password</th> <th>email</th> <th>title</th> <th></th> </tr> <% for _, user in ipairs(users) do %> <tr> <td><script>date(<%= user.registered %>)</script></td> <td align=right><%= user.links %></td> <td><%= user.traffic %></td> <td><a href="/<%=user.name%>"><%=user.name%></a></td> <td><%= html_encode(user.password) %></td> <td><%= user.email %></td> <td><%= html_encode(user.title or user.name) %></td> <td><button onclick="deleteUser(<%=user.id%>,'<%=user.name%>')">delete</button></td> </tr> <% end %> </table> <div hidden=form> <form action="javascript:"> <input> </form> </div> </body> </html> <% end