diff src/lib/main_html.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/lib/main_html.luan	Fri Jul 11 20:57:49 2025 -0600
@@ -0,0 +1,145 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local ipairs = Luan.ipairs or error()
+local String = require "luan:String.luan"
+local contains = String.contains or error()
+local Parsers = require "luan:Parsers.luan"
+local json_string = Parsers.json_string or error()
+local Html = require "luan:Html.luan"
+local html_encode = Html.encode or error()
+local Thread = require "luan:Thread.luan"
+local thread_run = Thread.run or error()
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Shared = require "site:/lib/Shared.luan"
+local pub_head = Shared.pub_head or error()
+local show_saved = Shared.show_saved or error()
+local call_mixpanel = Shared.call_mixpanel or error()
+local get_hashtags_list = Shared.get_hashtags_list or error()
+local has_facebook = not not Shared.has_facebook
+local User = require "site:/lib/User.luan"
+local Link = require "site:/lib/Link.luan"
+local get_owner_links = Link.get_owner_links or error()
+local Pic = require "site:/lib/Pic.luan"
+local get_user_pics = Pic.get_user_pics or error()
+local Icon = require "site:/lib/Icon.luan"
+local get_user_icons = Icon.get_user_icons or error()
+local Facebook = require "site:/lib/Facebook.luan"
+local fb_track_visit = Facebook.track_visit or error()
+local Reporting = require "site:/lib/Reporting.luan"
+local maybe_track_visit = Reporting.maybe_track_visit or error()
+local should_track_visit = Reporting.should_track_visit or error()
+local Logging = require "luan:logging/Logging.luan"
+local logger = Logging.logger "main_html"
+
+
+local function ad_tracking(user)
+	local referrer = Http.request.headers.referer
+	if referrer ~= nil and not contains(referrer,"linkmy.style") and maybe_track_visit(user) then
+		thread_run( function()
+			if should_track_visit(user) then
+				call_mixpanel{
+					event = "Visit"
+					properties = {
+						distinct_id = user.email
+					}
+				}
+				if has_facebook then
+					fb_track_visit(user)
+				end
+			end
+		end )
+	end
+end
+
+return function(user)
+	ad_tracking(user)
+	local user_id = user.id
+	local links = get_owner_links(user_id)
+	local pics = get_user_pics(user_id)
+	local icons = get_user_icons(user_id)
+	local title = user.html_title()
+	local pic_url = user.get_pic_url()
+	local bio = user.bio
+	local is_saved = Http.request.parameters.saved ~= nil
+	local saved = is_saved and "&saved" or ""
+	local hashtags_list, hashtags_set = get_hashtags_list(pics)
+	Http.response.headers["Content-Type"] = "text/html; charset=utf-8"
+	Io.stdout = Http.response.text_writer()
+%>
+<!doctype html>
+<html main>
+	<head>
+		<title>Link My Style | <%=title%></title>
+		<style hashtag></style>
+		<script>
+			'use strict';
+
+			window.Path = 'main';
+			window.Page = 'Home';
+
+			let hashtags = <%=json_string(hashtags_set)%>;
+		</script>
+<%		pub_head(user) %>
+		<script>
+			fbTrack('trackCustom', 'View', {owner:'<%=user.name%>'});
+		</script>
+	</head>
+	<body colored onload="mainInit()">
+<%	if is_saved then
+		show_saved("/"..user.name)
+	end %>
+	<div pub_background_img></div>
+	<div pub_content>
+		<div home><a href="/?source=organic">
+			<span lms>LinkMyStyle</span>
+			<br><span small>Increase Affiliate Sales</span>
+		</a></div>
+<%	if pic_url ~= nil then %>
+		<img user src="<%=pic_url%>">
+<%	end %>
+		<h1><%=title%></h1>
+<%	if bio ~= nil then %>
+		<div bio><%=html_encode(bio)%></div>
+<%	end
+	if #icons > 0 then %>
+		<div icons>
+<%		for _, icon in ipairs(icons) do %>
+			<a <%=icon.title_attr()%> href="<%=html_encode(icon.url)%>"><img src="/images/icons/<%=icon.name%>.svg"></a>
+<%		end %>
+		</div>
+<%	end %>
+		<div links>
+<%	for _, link in ipairs(links) do %>
+			<a link href="<%=html_encode(link.url)%>"><%=html_encode(link.title)%></a>
+<%	end %>
+		</div>
+<%	if #hashtags_list > 0 then %>
+		<div hashtags>
+			<span select>
+				<select onchange="mainSelectHashtag(value)">
+					<option value="">All Photos</option>
+<%		for _, hashtag in ipairs(hashtags_list) do %>
+					<option value="<%=hashtag%>">#<%=hashtag%></option>
+<%		end %>
+				</select>
+			</span>
+		</div>
+<%	end %>
+		<div pics>
+<%	for _, pic in ipairs(pics) do
+		if pic.is_hidden then
+			continue
+		end
+		local pic_id = pic.id
+%>
+			<span id="p-<%=pic_id%>" <%= pic.class or "" %> >
+				<a <%=pic.title_attr()%> href="/pic.html?pic=<%=pic_id%><%=saved%>"><img loading=lazy src="<%=pic.get_thumb_url()%>"></a>
+			</span>
+<%	end %>
+		</div>
+	</div>
+	</body>
+</html>
+<%
+end