bibliogram/src/site/pug/user.pug

123 lines
5.2 KiB
Plaintext

//- Needs user, selectedTimeline, type, followerCountsAvailable, url, constants, settings
include includes/timeline_page.pug
include includes/next_page_button.pug
include includes/display_structured
include includes/feed_link
- const ll = lang.get(settings.language)
- const numberFormat = new Intl.NumberFormat().format
mixin selector-button(text, selectorType, urlSuffix)
a(href=(type !== selectorType && `/u/${user.data.username}${urlSuffix}`) class=(type === selectorType && "active")).selector= text
mixin verified-badge(classes)
img.verified-badge(class=classes src=getStaticURL("html", "/static/img/verified.svg") width=19 height=19 alt=ll.verified_badge_alt title=ll.verified_badge_title)
doctype html
html
head
if user.data.full_name
title= `${user.data.full_name} (@${user.data.username}) | Bibliogram`
else
title= `@${user.data.username} | Bibliogram`
include includes/head
if settings.spa
script(src=getStaticURL("html", "/static/js/post_overlay.js") type="module")
else
script(src=getStaticURL("html", "/static/js/pagination.js") type="module")
meta(property="og:url" content=`${constants.website_origin}/u/${user.data.username}`)
meta(property="og:type" content="profile")
meta(property="og:title" content=(user.data.full_name || user.data.username))
if user.data.biography
meta(property="og:description" content=user.data.biography)
meta(property="og:image" content=`${constants.website_origin}${user.proxyProfilePicture}`)
meta(property="og:image:width" content=150)
meta(property="og:image:height" content=150)
meta(property="og:image:type" content="image/jpeg")
meta(property="og:site_name" content="Bibliogram")
body(class={"use-boring-font": !user.bioIsLatin()})
nav(class=(settings.display_top_nav ? "always-displayed" : "")).top-nav
//- Alt text guidelines from https://axesslab.com/alt-texts/
a(href="/").nav-icon-link
img(src="/static/img/logo-circle-min.svg" alt="Bibliogram").logo
a(href=settingsReferrer).nav-icon-link
img(src="/static/img/settings.svg" alt=ll.t_settings).settings
.main-divider
header.profile-overview
.profile-sticky
section
img(src=user.proxyProfilePicture width=150 height=150 alt=`${user.data.full_name || user.data.username}'s profile picture.`).pfp
//-
Instagram only uses the above URL, but an HD version is also available.
The alt text is pathetic, I know. I don't have much to work with.
if user.data.full_name
h1.full-name= user.data.full_name
h2.username
= `@${user.data.username}`
if user.data.is_verified
+verified-badge("as-username")
else
h1.full-name
= `@${user.data.username}`
if user.data.is_verified
+verified-badge("as-fullname")
p.structured-text.bio
- const bio = user.getStructuredBio()
if bio
+display_structured(bio)
- const userURL = user.getRewriteLink(settings)
if userURL
p.website
a(href=userURL)= userURL
if selectedTimeline.entryCount != undefined
div.profile-counter
| #[span(data-numberformat=selectedTimeline.entryCount).count #{numberFormat(selectedTimeline.entryCount)} ]
= ll.fn_post_counter_label ? ll.fn_post_counter_label(selectedTimeline.entryCount) : ll.post_counter_label
if followerCountsAvailable
if user.following != undefined
div.profile-counter
= ll.outgoing_follows_counter_label
span(data-numberformat=user.following).count #{numberFormat(user.following)}
if user.followedBy != undefined
div.profile-counter
= ll.incoming_follows_counter_label
span(data-numberformat=user.followedBy).count #{numberFormat(user.followedBy)}
else
div.profile-counter.not-available Followers not available.
.links
if constants.feeds.enabled && constants.feeds.display_links
+feed_link("RSS", "rss", user.data.username, "application/rss+xml", constants.feeds.display_validation_links)
+feed_link("Atom", "atom", user.data.username, "application/atom+xml", constants.feeds.display_validation_links)
a(rel="noreferrer noopener" href=`https://www.instagram.com/${user.data.username}` target="_blank") instagram.com
section.bibliogram-meta
.links
a(href="/")= ll.t_home
a(href=settingsReferrer)= ll.t_settings
if constants.quota.enabled
.quota
= ll.quota_left
| #[span#quota= remaining]
- const hasPosts = !user.data.is_private && selectedTimeline.pages.length && selectedTimeline.pages[0].length
.timeline-section(dir=ll.meta_direction)
.selector-container
+selector-button(ll.tab_timeline, "timeline", "")
if user.data.has_channel !== false || user.data.edge_felix_video_timeline.count !== 0
+selector-button(ll.tab_igtv, "igtv", "/channel")
main(class=hasPosts ? "" : "no-posts")#timeline.timeline
if hasPosts
each page, pageIndex in selectedTimeline.pages
+timeline_page(page, pageIndex)
+next_page_button(user, selectedTimeline, url, type)
else
div
div.page-number
span.number
if user.data.is_private
= ll.profile_is_private_notice
else
= ll.no_posts_notice