Mercurial Hosting > linkmystyle
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/save_icons.js.luan Fri Jul 11 20:57:49 2025 -0600 @@ -0,0 +1,64 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +local pairs = Luan.pairs or error() +local String = require "luan:String.luan" +local trim = String.trim or error() +local Parsers = require "luan:Parsers.luan" +local json_string = Parsers.json_string or error() +local Io = require "luan:Io.luan" +local Http = require "luan:http/Http.luan" +local Shared = require "site:/lib/Shared.luan" +local show_user_icons = Shared.show_user_icons or error() +local User = require "site:/lib/User.luan" +local Db = require "site:/lib/Db.luan" +local run_in_transaction = Db.run_in_transaction or error() +local Icon = require "site:/lib/Icon.luan" +local icon_names = Icon.icon_names or error() +local get_user_icons = Icon.get_user_icons or error() +local icon_from_doc = Icon.from_doc or error() + + +return function() + local user = User.current() or error() + local user_id = user.id + run_in_transaction( function() + local order + do + local icons = get_user_icons(user_id) + order = #icons > 0 and icons[#icons].order or 0 + end + for name, info in pairs(icon_names) do + local url = Http.request.parameters[name] or error() + url = trim(url) + if url == '' then + Db.delete("+icon_user_id:"..user_id.." +icon_name:"..name) + else + if info.type == "email" then + url = "mailto:"..url + end + local doc = Db.get_document("+icon_user_id:"..user_id.." +icon_name:"..name) + if doc == nil then + order = order + 1 + local icon = Icon.new{ + name = name + url = url + user_id = user_id + order = order + } + icon.save() + else + local icon = icon_from_doc(doc) + icon.url = url + icon.save() + end + end + end + end ) + local html = ` show_user_icons(user) ` + Io.stdout = Http.response.text_writer() +%> + document.querySelector('div[icons]').innerHTML = <%= json_string(html) %>; + document.querySelector('h2[icons]').scrollIntoViewIfNeeded(false); + dragInit(); +<% +end