0
|
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
|