comparison src/save_icons.js.luan @ 0:8f4df159f06b

start public repo
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 11 Jul 2025 20:57:49 -0600
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:8f4df159f06b
1 local Luan = require "luan:Luan.luan"
2 local error = Luan.error
3 local pairs = Luan.pairs or error()
4 local String = require "luan:String.luan"
5 local trim = String.trim or error()
6 local Parsers = require "luan:Parsers.luan"
7 local json_string = Parsers.json_string 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 show_user_icons = Shared.show_user_icons or error()
12 local User = require "site:/lib/User.luan"
13 local Db = require "site:/lib/Db.luan"
14 local run_in_transaction = Db.run_in_transaction or error()
15 local Icon = require "site:/lib/Icon.luan"
16 local icon_names = Icon.icon_names or error()
17 local get_user_icons = Icon.get_user_icons or error()
18 local icon_from_doc = Icon.from_doc or error()
19
20
21 return function()
22 local user = User.current() or error()
23 local user_id = user.id
24 run_in_transaction( function()
25 local order
26 do
27 local icons = get_user_icons(user_id)
28 order = #icons > 0 and icons[#icons].order or 0
29 end
30 for name, info in pairs(icon_names) do
31 local url = Http.request.parameters[name] or error()
32 url = trim(url)
33 if url == '' then
34 Db.delete("+icon_user_id:"..user_id.." +icon_name:"..name)
35 else
36 if info.type == "email" then
37 url = "mailto:"..url
38 end
39 local doc = Db.get_document("+icon_user_id:"..user_id.." +icon_name:"..name)
40 if doc == nil then
41 order = order + 1
42 local icon = Icon.new{
43 name = name
44 url = url
45 user_id = user_id
46 order = order
47 }
48 icon.save()
49 else
50 local icon = icon_from_doc(doc)
51 icon.url = url
52 icon.save()
53 end
54 end
55 end
56 end )
57 local html = ` show_user_icons(user) `
58 Io.stdout = Http.response.text_writer()
59 %>
60 document.querySelector('div[icons]').innerHTML = <%= json_string(html) %>;
61 document.querySelector('h2[icons]').scrollIntoViewIfNeeded(false);
62 dragInit();
63 <%
64 end