comparison website/src/lib/Shared.luan @ 1929:31f006c64782

translation
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 01 May 2025 18:31:05 -0600
parents 50e570b598b2
children 047e4dde22b4
comparison
equal deleted inserted replaced
1928:e16f38f4fdfc 1929:31f006c64782
1 local Luan = require "luan:Luan.luan" 1 local Luan = require "luan:Luan.luan"
2 local error = Luan.error 2 local error = Luan.error
3 local ipairs = Luan.ipairs or error() 3 local ipairs = Luan.ipairs or error()
4 local pairs = Luan.pairs or error() 4 local pairs = Luan.pairs or error()
5 local Time = require "luan:Time.luan"
6 local Http = require "luan:http/Http.luan"
7 local Site_translator = require "luan:gpt/Site_translator.luan"
8 local get_lang = Site_translator.get_lang or error()
9 local languages = Site_translator.languages or error()
10 local Logging = require "luan:logging/Logging.luan"
11 local logger = Logging.logger "Shared"
5 12
6 13
7 local Shared = {} 14 local Shared = {}
15
16 Http.not_found_handler = Site_translator.not_found_handler or error()
17
18 local started = Time.now()
19 Shared.started = started
8 20
9 function Shared.head() 21 function Shared.head()
10 %> 22 %>
11 <meta name="viewport" content="width=device-width, initial-scale=1"> 23 <meta name="viewport" content="width=device-width, initial-scale=1">
12 <style> 24 <style>
13 @import "/site.css"; 25 @import "/site.css?s=<%=started%>";
14 </style> 26 </style>
27 <script src="/site.js?s=<%=started%>"></script>
15 <% 28 <%
16 end 29 end
17 30
18 local function header(crumbs) 31 local function header(crumbs)
32 local lang = get_lang()
33 local home
34 if lang == "en" then
35 home = "/"
36 else
37 home = "/"..lang.."/"
38 end
19 %> 39 %>
20 <div header> 40 <div header>
21 <span breadcrumbs> 41 <span breadcrumbs>
22 <a href="/">Luan</a> 42 <a href="<%=home%>">Luan</a>
23 <% for _, crumb in ipairs(crumbs or {}) do %> 43 <% for _, crumb in ipairs(crumbs or {}) do %>
24 / <%=crumb%> 44 / <%=crumb%>
25 <% end %> 45 <% end %>
46 - <select onchange="setLanguage(value)">
47 <% for code, name in pairs(languages) do
48 local selected = code==lang and "selected" or ""
49 %>
50 <option value="<%=code%>" <%=selected%> ><%=name%></option>
51 <% end %>
52 </select>
26 </span> 53 </span>
27 <span><a href="https://www.reactionary.software/">reactionary software</a> by <a href="https://linkmy.style/fschmidt">fschmidt</a></span> 54 <span><a href="https://www.reactionary.software/">reactionary software</a> by <a href="https://linkmy.style/fschmidt">fschmidt</a></span>
28 </div> 55 </div>
29 <% 56 <%
30 end 57 end
31 Shared.header = header 58 Shared.header = header
32 59
33 function Shared.docs_header() 60 function Shared.docs_header()
34 header{[[<a href="/docs.html">Documentation</a>]]} 61 header{[[<a href="docs.html">Documentation</a>]]}
35 end 62 end
36 63
37 local function show_toc(content) 64 local function show_toc(content)
38 %> 65 %>
39 <ul> 66 <ul>
56 end 83 end
57 Shared.show_toc = show_toc 84 Shared.show_toc = show_toc
58 85
59 local function nothing() end 86 local function nothing() end
60 87
61 local function show_content(content,h) 88 local show_content, show_content_info
62 for id, info in pairs(content) do 89
90 function show_content_info(id,info,h)
63 %> 91 %>
64 <div heading> 92 <div heading>
65 <h<%=h%>><a id="<%=id%>" href="#<%=id%>"><%=info.title%></a></h<%=h%>> 93 <h<%=h%>><a id="<%=id%>" href="#<%=id%>"><%=info.title%></a></h<%=h%>>
66 <a href="#c_<%=id%>">contents</a> 94 <a href="#c_<%=id%>">contents</a>
67 </div> 95 </div>
69 (info.content or nothing)() 97 (info.content or nothing)()
70 local subs = info.subs 98 local subs = info.subs
71 if subs ~= nil then 99 if subs ~= nil then
72 show_content(subs,h+1) 100 show_content(subs,h+1)
73 end 101 end
102 end
103 Shared.show_content_info = show_content_info
104
105 function show_content(content,h)
106 for id, info in pairs(content) do
107 show_content_info(id,info,h)
74 end 108 end
75 end 109 end
76 Shared.show_content = show_content 110 Shared.show_content = show_content
77 111
78 return Shared 112 return Shared