view 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 source

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