view src/lib/Shared.luan @ 35:1ce75c5ab0f7

minor
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 03 Aug 2022 14:13:12 -0600
parents c8d47981c74f
children 0c1b820fff34
line wrap: on
line source

local Luan = require "luan:Luan.luan"
local error = Luan.error
local ipairs = Luan.ipairs or error()
local set_metatable = Luan.set_metatable or error()
local type = Luan.type or error()
local Http = require "luan:http/Http.luan"
local Io = require "luan:Io.luan"
local uri = Io.uri or error()
local Parsers = require "luan:Parsers.luan"
local json_parse = Parsers.json_parse or error()
local Forum = require "site:/lib/Forum.luan"
local forum_title = Forum.title or error()
local mailer_url = Forum.mailer_url or error()
local User = require "site:/lib/User.luan"
local Logging = require "luan:logging/Logging.luan"
local logger = Logging.logger "Shared"


local Shared = {}

function Shared.head()
%>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<style>
			@import "/site.css";
		</style>
		<script src="/site.js"></script>
<%
end

function Shared.header()
	local user = User.current()
%>
		<p style="text-align:center">Yes the aesthetics suck.  Will be fixed later.</p>
		<div header>
			<a href="/"><%=forum_title%></a>
<%	if user == nil then %>
			<a href="/login.html">login</a>
<%	else %>
			<a href="/account.html"><%=user.name_html%></a>
<%	end %>
		</div>
<%
end

function Shared.footer()
%>
		<div footer>
			<a href="/config.html">Configuration</a>
		</div>
<%
end

function Shared.admin_header()
%>
		<div header>
			<a href="/private/admin.html">Admin</a>
		</div>
<%
end

function Shared.base_url()
	return Http.request.scheme.."://"..Http.request.headers["host"]
end

function Shared.call_mail_api(cmd,parameters)
	local url = mailer_url.."/api/"..cmd..".json"
	local options = {
		parameters = parameters
	}
	local response = uri(url,options).read_text()
	return json_parse(response)
end

local set_mt = {}
function set_mt.__index(table,key)
	return false
end

function Shared.list_to_set(list)
	local set = {}
	for _, v in ipairs(list) do
		set[v] = true
	end
	set_metatable(set,set_mt)
	return set
end

function Shared.to_list(input)
	if input == nil then
		return {}
	elseif type(input) == "table" then
		return input
	else
		return {input}
	end
end

return Shared