comparison src/lib/Shared.luan @ 91:76baf48ea36b

add translation
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 02 May 2025 17:17:52 -0600
parents c385a4f75b10
children 7a56c17befab
comparison
equal deleted inserted replaced
90:0dced626778b 91:76baf48ea36b
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()
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()
4 10
5 11
6 local Shared = {} 12 local Shared = {}
13
14 Http.not_found_handler = Site_translator.not_found_handler or error()
15
16 local started = Time.now()
7 17
8 function Shared.head() 18 function Shared.head()
9 %> 19 %>
10 <meta name="viewport" content="width=device-width, initial-scale=1"> 20 <meta name="viewport" content="width=device-width, initial-scale=1">
11 <style> 21 <style>
12 @import "/site.css"; 22 @import "/site.css?s=<%=started%>";
13 </style> 23 </style>
24 <script src="/site.js?s=<%=started%>"></script>
14 <% 25 <%
15 end 26 end
16 27
17 local function header(crumbs) 28 local function header(crumbs)
29 local lang = get_lang()
30 local home
31 if lang == "en" then
32 home = "/"
33 else
34 home = "/"..lang.."/"
35 end
18 %> 36 %>
19 <div header> 37 <div header>
20 <span breadcrumbs> 38 <span breadcrumbs>
21 <a href="/">Reactionary Software</a> 39 <a href="<%=home%>">Reactionary Software</a>
22 <% for _, crumb in ipairs(crumbs or {}) do %> 40 <% for _, crumb in ipairs(crumbs or {}) do %>
23 / <%=crumb%> 41 / <%=crumb%>
24 <% end %> 42 <% end %>
43 - <select onchange="setLanguage(value)">
44 <% for code, name in pairs(languages) do
45 local selected = code==lang and "selected" or ""
46 %>
47 <option value="<%=code%>" <%=selected%> ><%=name%></option>
48 <% end %>
49 </select>
25 </span> 50 </span>
26 <span>by <a href="https://linkmy.style/fschmidt">fschmidt</a></span> 51 <span>by <a href="https://linkmy.style/fschmidt">fschmidt</a></span>
27 </div> 52 </div>
28 <% 53 <%
29 end 54 end
30 Shared.header = header 55 Shared.header = header
31 56
32 function Shared.existing_header() 57 function Shared.existing_header()
33 header{[[<a href="/existing.html">Existing</a>]]} 58 header{[[<a href="existing.html">Existing</a>]]}
34 end 59 end
35 60
36 function Shared.needed_header() 61 function Shared.needed_header()
37 header{[[<a href="/needed.html">Needed</a>]]} 62 header{[[<a href="needed.html">Needed</a>]]}
63 end
64
65 function Shared.luan_url()
66 local url = "https://www.luan.software"
67 local lang = get_lang()
68 if lang ~= "en" then
69 url = url.."/"..lang
70 end
71 return url
38 end 72 end
39 73
40 return Shared 74 return Shared