diff options
author | JakobDev <jakobdev@gmx.de> | 2025-01-01 20:43:20 +0100 |
---|---|---|
committer | JakobDev <jakobdev@gmx.de> | 2025-01-01 20:43:20 +0100 |
commit | e99bf7f16d4503c4d2f40b11ce69ca062a208e93 (patch) | |
tree | d9c6ce18c929c13f4f52ec553bf5b794cf06a8be | |
parent | Merge pull request 'Make new table modal work when editing a issue' (#6431) f... (diff) | |
download | forgejo-e99bf7f16d4503c4d2f40b11ce69ca062a208e93.tar.xz forgejo-e99bf7f16d4503c4d2f40b11ce69ca062a208e93.zip |
Rewrite OpenGraph Header
-rw-r--r-- | routers/web/home.go | 3 | ||||
-rw-r--r-- | routers/web/org/home.go | 6 | ||||
-rw-r--r-- | routers/web/repo/commit.go | 4 | ||||
-rw-r--r-- | routers/web/repo/issue.go | 3 | ||||
-rw-r--r-- | routers/web/repo/view.go | 4 | ||||
-rw-r--r-- | routers/web/repo/wiki.go | 3 | ||||
-rw-r--r-- | routers/web/user/profile.go | 6 | ||||
-rw-r--r-- | services/context/repo.go | 4 | ||||
-rw-r--r-- | templates/base/head_opengraph.tmpl | 75 |
9 files changed, 49 insertions, 59 deletions
diff --git a/routers/web/home.go b/routers/web/home.go index d4be0931e8..4ea961c055 100644 --- a/routers/web/home.go +++ b/routers/web/home.go @@ -61,6 +61,9 @@ func Home(ctx *context.Context) { ctx.Data["PageIsHome"] = true ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled + + ctx.Data["OpenGraphDescription"] = setting.UI.Meta.Description + ctx.HTML(http.StatusOK, tplHome) } diff --git a/routers/web/org/home.go b/routers/web/org/home.go index 9ebefa334c..1b58d8fde9 100644 --- a/routers/web/org/home.go +++ b/routers/web/org/home.go @@ -47,6 +47,12 @@ func Home(ctx *context.Context) { ctx.Data["PageIsUserProfile"] = true ctx.Data["Title"] = org.DisplayName() + ctx.Data["OpenGraphTitle"] = ctx.ContextUser.DisplayName() + ctx.Data["OpenGraphType"] = "profile" + ctx.Data["OpenGraphImageURL"] = ctx.ContextUser.AvatarLink(ctx) + ctx.Data["OpenGraphURL"] = ctx.ContextUser.HTMLURL() + ctx.Data["OpenGraphDescription"] = ctx.ContextUser.Description + var orderBy db.SearchOrderBy sortOrder := ctx.FormString("sort") if _, ok := repo_model.OrderByFlatMap[sortOrder]; !ok { diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index a06da71429..2feb898224 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -419,6 +419,10 @@ func Diff(ctx *context.Context) { } } + ctx.Data["OpenGraphTitle"] = commit.Summary() + " ยท " + base.ShortSha(commitID) + ctx.Data["OpenGraphURL"] = fmt.Sprintf("%s/commit/%s", ctx.Repo.Repository.HTMLURL(), commitID) + _, ctx.Data["OpenGraphDescription"], _ = strings.Cut(commit.Message(), "\n") + ctx.HTML(http.StatusOK, tplCommitPage) } diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 779cbd4b6a..b537afdab5 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -2070,6 +2070,9 @@ func ViewIssue(ctx *context.Context) { ctx.Data["RefEndName"] = git.RefName(issue.Ref).ShortName() ctx.Data["NewPinAllowed"] = pinAllowed ctx.Data["PinEnabled"] = setting.Repository.Issue.MaxPinned != 0 + ctx.Data["OpenGraphTitle"] = issue.Title + ctx.Data["OpenGraphURL"] = issue.HTMLURL() + ctx.Data["OpenGraphDescription"] = issue.Content ctx.Data["OpenGraphImageURL"] = issue.SummaryCardURL() ctx.Data["OpenGraphImageAltText"] = ctx.Tr("repo.issues.summary_card_alt", issue.Title, issue.Repo.FullName()) diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index fd8c1da058..9030b03a90 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -394,6 +394,10 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry) { ctx.Data["FileName"] = blob.Name() ctx.Data["RawFileLink"] = ctx.Repo.RepoLink + "/raw/" + ctx.Repo.BranchNameSubURL() + "/" + util.PathEscapeSegments(ctx.Repo.TreePath) + ctx.Data["OpenGraphTitle"] = ctx.Data["Title"] + ctx.Data["OpenGraphURL"] = fmt.Sprintf("%s%s", setting.AppURL, ctx.Data["Link"]) + ctx.Data["OpenGraphNoDescription"] = true + if entry.IsLink() { _, link, err := entry.FollowLinks() // Errors should be allowed, because this shouldn't diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go index 3d55afe294..070d07cdf3 100644 --- a/routers/web/repo/wiki.go +++ b/routers/web/repo/wiki.go @@ -535,6 +535,9 @@ func Wiki(ctx *context.Context) { } ctx.Data["Author"] = lastCommit.Author + ctx.Data["OpenGraphTitle"] = ctx.Data["Title"] + ctx.Data["OpenGraphURL"] = fmt.Sprintf("%s%s", setting.AppURL, ctx.Data["Link"]) + ctx.HTML(http.StatusOK, tplWikiView) } diff --git a/routers/web/user/profile.go b/routers/web/user/profile.go index 9cb392d878..de1c6850aa 100644 --- a/routers/web/user/profile.go +++ b/routers/web/user/profile.go @@ -63,6 +63,12 @@ func userProfile(ctx *context.Context) { ctx.Data["Title"] = ctx.ContextUser.DisplayName() ctx.Data["PageIsUserProfile"] = true + ctx.Data["OpenGraphTitle"] = ctx.ContextUser.DisplayName() + ctx.Data["OpenGraphType"] = "profile" + ctx.Data["OpenGraphImageURL"] = ctx.ContextUser.AvatarLink(ctx) + ctx.Data["OpenGraphURL"] = ctx.ContextUser.HTMLURL() + ctx.Data["OpenGraphDescription"] = ctx.ContextUser.Description + // prepare heatmap data if setting.Service.EnableUserHeatmap { data, err := activities_model.GetUserHeatmapDataByUser(ctx, ctx.ContextUser, ctx.Doer) diff --git a/services/context/repo.go b/services/context/repo.go index 462d843bfc..d294c00455 100644 --- a/services/context/repo.go +++ b/services/context/repo.go @@ -634,6 +634,10 @@ func RepoAssignment(ctx *Context) context.CancelFunc { } cardWidth, cardHeight := card.DefaultSize() + ctx.Data["OpenGraphTitle"] = repo.Name + ctx.Data["OpenGraphURL"] = repo.HTMLURL() + ctx.Data["OpenGraphType"] = "object" + ctx.Data["OpenGraphDescription"] = repo.Description ctx.Data["OpenGraphImageURL"] = repo.SummaryCardURL() ctx.Data["OpenGraphImageWidth"] = cardWidth ctx.Data["OpenGraphImageHeight"] = cardHeight diff --git a/templates/base/head_opengraph.tmpl b/templates/base/head_opengraph.tmpl index 692f1797b6..7f6eae3f49 100644 --- a/templates/base/head_opengraph.tmpl +++ b/templates/base/head_opengraph.tmpl @@ -1,12 +1,24 @@ -{{- /* og:description - a one to two sentence description of your object, maybe it only needs at most 300 bytes */ -}} +{{- /* See https://ogp.me for specification */ -}} {{if .OpenGraphTitle}} <meta property="og:title" content="{{.OpenGraphTitle}}"> +{{else if .Title}} + <meta property="og:title" content="{{.Title}}"> +{{else}} + <meta property="og:title" content="{{AppDisplayName}}"> {{end}} -{{if .OpenGraphDescription}} - <meta property="og:description" content="{{.OpenGraphDescription}}"> +{{- /* og:description - a one to two sentence description of your object, maybe it only needs at most 300 bytes */ -}} +{{if and .OpenGraphDescription (not .OpenGraphNoDescription)}} + <meta property="og:description" content="{{StringUtils.EllipsisString .OpenGraphDescription 300}}"> {{end}} {{if .OpenGraphURL}} <meta property="og:url" content="{{.OpenGraphURL}}"> +{{else}} + <meta property="og:url" content="{{AppUrl}}{{.Link}}"> +{{end}} +{{if .OpenGraphType}} + <meta property="og:type" content="{{.OpenGraphType}}"> +{{else}} + <meta property="og:type" content="website"> {{end}} {{if .OpenGraphImageURL}} <meta property="og:image" content="{{.OpenGraphImageURL}}"> @@ -19,62 +31,7 @@ {{if .OpenGraphImageAltText}} <meta property="og:image:alt" content="{{.OpenGraphImageAltText}}"> {{end}} -{{end}} -{{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}}"> - {{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}}"> - {{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 if .Pages}} - <meta property="og:title" content="{{.Title}}"> - <meta property="og:url" content="{{AppUrl}}{{.Link}}"> - {{if .Repository.Description}} - <meta property="og:description" content="{{StringUtils.EllipsisString .Repository.Description 300}}"> - {{end}} - {{else}} - {{if not .OpenGraphTitle}} - <meta property="og:title" content="{{.Repository.Name}}"> - {{end}} - {{if not .OpenGraphURL}} - <meta property="og:url" content="{{.Repository.HTMLURL}}"> - {{end}} - {{if and (.Repository.Description) (not .OpenGraphDescription)}} - <meta property="og:description" content="{{StringUtils.EllipsisString .Repository.Description 300}}"> - {{end}} - {{end}} - <meta property="og:type" content="object"> - {{if and (not .Issue) (not .OpenGraphImageURL)}} - {{if (.Repository.AvatarLink ctx)}} - <meta property="og:image" content="{{.Repository.AvatarLink ctx}}"> - {{else}} - <meta property="og:image" content="{{.Repository.Owner.AvatarLink ctx}}"> - {{end}} - {{end}} {{else}} - <meta property="og:title" content="{{AppDisplayName}}"> - <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}}"> + <meta property="og:image" content="{{AssetUrlPrefix}}/img/logo.png"> {{end}} <meta property="og:site_name" content="{{AppDisplayName}}"> |