diff src/theme.css.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/theme.css.luan	Fri Jul 11 20:57:49 2025 -0600
@@ -0,0 +1,138 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local parse = Luan.parse or error()
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local format_date = Http.format_date or error()
+local User = require "site:/lib/User.luan"
+local get_background_img_url = User.get_background_img_url or error()
+
+
+return function()
+	local user = Http.request.parameters.user or error()
+	user = User.get_by_id(user) or error()
+	local data = user.theme_data or error()
+	data = parse(data)
+	local date = user.theme_date or error()
+	Http.response.headers["Last-Modified"] = format_date(date)
+	Io.stdout = Http.response.text_writer()
+	local font_url = data.font_url
+	if font_url ~= nil then
+%>
+@import "<%=font_url%>";
+
+<%
+	end
+	local background_color = data.background_color
+	if background_color ~= nil then
+%>
+body[colored] {
+	background-color: <%=background_color%>;
+}
+<%
+	end
+	local background_img_url = get_background_img_url(data)
+	if background_img_url ~= nil then
+%>
+div[pub_background_img] {
+	z-index: -1;
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-size: cover;
+	background-repeat: no-repeat;
+	background-position: center;
+	background-image: url(<%=background_img_url%>);
+}
+<%
+	end
+	local link_background_color = data.link_background_color
+	if link_background_color ~= nil then
+%>
+a[link],
+span[select] select {
+	background-color: <%=link_background_color%>;
+}
+<%
+	end
+	local link_hover_background_color = data.link_hover_background_color
+	if link_hover_background_color ~= nil then
+%>
+a[link]:hover,
+span[select] select:hover {
+	background-color: <%=link_hover_background_color%>;
+}
+<%
+	end
+	local link_text_color = data.link_text_color
+	if link_text_color ~= nil then
+%>
+a[link],
+span[select] {
+	color: <%=link_text_color%>;
+}
+<%
+	end
+	local title_color = data.title_color
+	if title_color ~= nil then
+%>
+html[main] h1 {
+	color: <%=title_color%>;
+}
+html[main] div[home] a {
+	color: <%=title_color%>;
+}
+<%
+	end
+	local bio_color = data.bio_color
+	if bio_color ~= nil then
+%>
+html[main] div[bio] {
+	color: <%=bio_color%>;
+}
+<%
+	end
+	if data.icon_color == "white" then
+%>
+html[pic] div[hashtags] a,
+html[pic] div[back] img,
+html[main] div[icons] img {
+	filter: invert(100%);
+}
+<%
+	end
+	local link_border_radius = data.link_border_radius
+	if link_border_radius ~= nil then
+%>
+a[link] {
+	border-radius: <%=link_border_radius%>;
+}
+<%
+	end
+	local link_border_color = data.link_border_color
+	if link_border_color ~= nil then
+%>
+a[link] {
+	border: 2px solid <%=link_border_color%>;
+}
+<%
+	end
+	local link_shadow = data.link_shadow
+	if link_shadow ~= nil then
+%>
+a[link] {
+	box-shadow: <%=link_shadow%> <%= data.link_shadow_color or "" %>;
+}
+<%
+	end
+	local font = data.font
+	if font ~= nil then
+%>
+[pub_content] {
+	font-family: <%=font%>;
+}
+<%
+	end
+end