Mercurial Hosting > freedit
changeset 18:94e26bffd4fb
UI work
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 11 Jul 2022 12:14:05 -0600 |
parents | a602a5735a37 |
children | da006d1c1eba |
files | src/edit.js.luan src/images/profile.png src/lib/Config.luan src/lib/Post.luan src/site.css src/site.js src/thread.html.luan |
diffstat | 7 files changed, 94 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
diff -r a602a5735a37 -r 94e26bffd4fb src/edit.js.luan --- a/src/edit.js.luan Thu Jul 07 15:30:06 2022 -0600 +++ b/src/edit.js.luan Mon Jul 11 12:14:05 2022 -0600 @@ -29,5 +29,6 @@ let postDiv = document.querySelector('[post="<%=post.id%>"]'); postDiv.querySelector('[output]').style.display = 'none'; postDiv.querySelector('[edit]').innerHTML = <%= json_string(html) %>; +postDiv.querySelector('textarea').focus(); <% end
diff -r a602a5735a37 -r 94e26bffd4fb src/images/profile.png Binary file src/images/profile.png has changed
diff -r a602a5735a37 -r 94e26bffd4fb src/lib/Config.luan --- a/src/lib/Config.luan Thu Jul 07 15:30:06 2022 -0600 +++ b/src/lib/Config.luan Mon Jul 11 12:14:05 2022 -0600 @@ -15,9 +15,11 @@ Config.text = doc and doc.config or Config.default_text function Config.set(text) - local doc = Db.get_document("type:config") or {type="config"} - doc.config = text - Db.save(doc) + Db.run_in_transaction( function() + local doc = Db.get_document("type:config") or {type="config"} + doc.config = text + Db.save(doc) + end ) end return Config
diff -r a602a5735a37 -r 94e26bffd4fb src/lib/Post.luan --- a/src/lib/Post.luan Thu Jul 07 15:30:06 2022 -0600 +++ b/src/lib/Post.luan Mon Jul 11 12:14:05 2022 -0600 @@ -11,6 +11,29 @@ local Post = {} +local times = { + { + time = 1000*60*60*24*365 + unit = "year" + } + { + time = 1000*60*60*24*7 + unit = "week" + } + { + time = 1000*60*60*24 + unit = "day" + } + { + time = 1000*60*60 + unit = "hour" + } + { + time = 1000*60 + unit = "minute" + } +} + local function from_doc(doc) doc.type == "post" or error "wrong type" return Post.new { @@ -91,6 +114,21 @@ return user ~= nil and user.name == post.author_name end + function post.ago(now) + local diff = now - post.date + for _, t in ipairs(times) do + local n = diff // t.time + if n > 0 then + %><%=n%> <%=t.unit%><% + if n > 1 then + %>s<% + end + return + end + end + %>0 minutes<% + end + set_metatable(post,metatable) return post end
diff -r a602a5735a37 -r 94e26bffd4fb src/site.css --- a/src/site.css Thu Jul 07 15:30:06 2022 -0600 +++ b/src/site.css Mon Jul 11 12:14:05 2022 -0600 @@ -5,6 +5,7 @@ body { font-family: Sans-Serif; margin: 0; + background-color: #F8F8F8; } a { @@ -14,6 +15,12 @@ text-decoration: underline; } +textarea { + font: inherit; + xpadding: 7px; + xborder-color: #DDDDDD; +} + div[header], div[footer] { font-size: 14px; background-color: #ddd;
diff -r a602a5735a37 -r 94e26bffd4fb src/site.js --- a/src/site.js Thu Jul 07 15:30:06 2022 -0600 +++ b/src/site.js Mon Jul 11 12:14:05 2022 -0600 @@ -31,3 +31,7 @@ err += '\nstack = ' + error.stack; ajax( '/error_log.js', 'err='+encodeURIComponent(err) ); }; + +function time(time) { + document.write(new Date(time).toLocaleString()); +}
diff -r a602a5735a37 -r 94e26bffd4fb src/thread.html.luan --- a/src/thread.html.luan Thu Jul 07 15:30:06 2022 -0600 +++ b/src/thread.html.luan Mon Jul 11 12:14:05 2022 -0600 @@ -1,6 +1,8 @@ local Luan = require "luan:Luan.luan" local error = Luan.error local ipairs = Luan.ipairs or error() +local Time = require "luan:Time.luan" +local time_now = Time.now or error() local Io = require "luan:Io.luan" local Http = require "luan:http/Http.luan" local Shared = require "site:/lib/Shared.luan" @@ -27,6 +29,7 @@ local subject_html = posts[1].subject_html local user = User.current() local user_name = user and user.name + local now = time_now() Io.stdout = Http.response.text_writer() %> <!doctype html> @@ -35,9 +38,29 @@ <% head() %> <title><%=forum_title%>: <%=subject_html%></title> <style> + div[author] { + margin-bottom: 6px; + font-size: 10px; + } + div[author] img { + width: 28px; + vertical-align: middle; + border-radius: 50%; + } + div[author] a { + font-weight: bold; + } + span[ago] { + color: #888; + } [message] { white-space: pre-wrap; } + textarea { + width: 100%; + max-width: 450px; + height: 100px; + } </style> <script> function cancelEdit(post) { @@ -62,9 +85,19 @@ let post = span.getAttribute('delete'); ajax( '/delete.js?post=' + post ); } + + function init() { + let spans = document.querySelectorAll('span[ago]'); + for( let i=0; i<spans.length; i++ ) { + let span = spans[i]; + let date = span.getAttribute('date'); + date = parseInt(date); + span.title = new Date(date).toLocaleString(); + } + } </script> </head> - <body> + <body onload="init()"> <% header() %> <div content> <h1><%=subject_html%></h1> @@ -75,6 +108,11 @@ %> <hr> <div post="<%=post.id%>"> + <div author> + <img src="/images/profile.png"> + <a href="/whatever"><%= post.author_name %></a> + <span ago date="<%=post.date%>"><% post.ago(now) %> ago</span> + </div> <div output> <% bbcode_to_html(post.content) %> <p>