2
0
Files
gitcaddy-server/templates/base/head_opengraph.tmpl
logikonline e8b6303971
Some checks failed
Build and Release / Create Release (push) Successful in 0s
Build and Release / Integration Tests (PostgreSQL) (push) Successful in 4m1s
Build and Release / Unit Tests (push) Successful in 4m35s
Build and Release / Lint (push) Failing after 5m58s
Build and Release / Build Binaries (amd64, linux, linux-latest) (push) Has been skipped
Build and Release / Build Binaries (amd64, windows, windows-latest) (push) Has been skipped
Build and Release / Build Binaries (amd64, darwin, macos) (push) Has been skipped
Build and Release / Build Binaries (arm64, darwin, macos) (push) Has been skipped
Build and Release / Build Binary (linux/arm64) (push) Has been skipped
feat(pages): serve social preview on custom domains
Add /social-preview.png endpoint for custom domain/subdomain landing pages. Generates social card using same logic as repo social preview but accessible on custom domains. Adds .png extension to social preview URLs for better compatibility with social media crawlers. Updates og:image and twitter:image meta tags to use domain-relative URLs on custom domains. Includes ETag caching with 30min max-age.
2026-03-16 02:46:41 -04:00

83 lines
3.9 KiB
Handlebars

{{- /* og:description - a one to two sentence description of your object, maybe it only needs at most 300 bytes */ -}}
{{if .BlogPost}}
<meta property="og:title" content="{{.BlogPost.Title}}">
<meta property="og:type" content="article">
{{if .BlogPost.Subtitle}}
<meta property="og:description" content="{{StringUtils.EllipsisString .BlogPost.Subtitle 300}}">
<meta name="description" content="{{StringUtils.EllipsisString .BlogPost.Subtitle 300}}">
{{end}}
{{if .BlogPost.FeaturedImage}}
<meta property="og:image" content="{{.BlogPost.FeaturedImage.DownloadURL}}">
<meta name="twitter:image" content="{{.BlogPost.FeaturedImage.DownloadURL}}">
<meta name="twitter:card" content="summary_large_image">
{{else if .BlogPost.Author}}
<meta property="og:image" content="{{.BlogPost.Author.AvatarLink ctx}}">
<meta name="twitter:card" content="summary">
{{end}}
{{if .BlogPost.Author}}
<meta property="article:author" content="{{.BlogPost.Author.DisplayName}}">
<meta name="author" content="{{.BlogPost.Author.DisplayName}}">
{{end}}
{{if .BlogPublishedISO}}
<meta property="article:published_time" content="{{.BlogPublishedISO}}">
{{end}}
{{if .BlogTags}}
{{range .BlogTags}}<meta property="article:tag" content="{{.}}">
{{end}}
{{end}}
{{if .RepoLink}}
<meta property="og:url" content="{{AppUrl}}blog/{{.BlogPost.ID}}">
{{end}}
{{else if .PageIsUserProfile}}
<meta property="og:title" content="{{.ContextUser.DisplayName}}">
<meta property="og:type" content="profile">
<meta property="og:image" content="{{.ContextUser.AvatarLink ctx}}">
<meta property="og:url" content="{{.ContextUser.HTMLURL ctx}}">
{{if .ContextUser.Description}}
<meta property="og:description" content="{{StringUtils.EllipsisString .ContextUser.Description 300}}">
{{end}}
{{else if .Repository}}
{{if .Issue}}
<meta property="og:title" content="{{.Issue.Title}}">
<meta property="og:url" content="{{.Issue.HTMLURL ctx}}">
{{if .Issue.Content}}
<meta property="og:description" content="{{StringUtils.EllipsisString .Issue.Content 300}}">
{{end}}
{{else if or .PageIsDiff .IsViewFile}}
<meta property="og:title" content="{{.Title}}">
<meta property="og:url" content="{{AppUrl}}{{.Link}}">
{{if and .PageIsDiff .Commit}}
{{- $commitMessageParts := StringUtils.Cut .Commit.Message "\n" -}}
{{- $commitMessageBody := index $commitMessageParts 1 -}}
{{- if $commitMessageBody -}}
<meta property="og:description" content="{{StringUtils.EllipsisString $commitMessageBody 300}}">
{{- end -}}
{{end}}
{{else}}
<meta property="og:title" content="{{if .Repository.DisplayTitle}}{{.Repository.DisplayTitle}}{{else}}{{.Repository.Name}}{{end}}">
<meta property="og:url" content="{{.Repository.HTMLURL ctx}}">
{{if .Repository.Description}}
<meta property="og:description" content="{{StringUtils.EllipsisString .Repository.Description 300}}">
{{end}}
{{end}}
<meta property="og:type" content="object">
<meta property="og:image" content="{{AppUrl}}{{.Repository.OwnerName}}/{{.Repository.Name}}/social-preview.png">
{{if or (eq .Repository.SocialCardTheme "solid") (eq .Repository.SocialCardTheme "image")}}
<meta property="og:image:width" content="1080">
<meta property="og:image:height" content="1350">
{{else}}
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
{{end}}
<meta property="og:image:type" content="image/png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="{{AppUrl}}{{.Repository.OwnerName}}/{{.Repository.Name}}/social-preview.png">
{{else}}
<meta property="og:title" content="{{AppName}}">
<meta property="og:type" content="website">
<meta property="og:image" content="{{AssetUrlPrefix}}/img/logo.png">
<meta property="og:url" content="{{AppUrl}}">
<meta property="og:description" content="{{MetaDescription}}">
{{end}}
<meta property="og:site_name" content="{{AppName}}">