mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-10-30 17:34:13 +01:00
147ae2c5be
Fixes https://codeberg.org/forgejo/forgejo/issues/4417 by adding a conditional branch to the `head_opengraph` template to match wiki pages. I tried to be consistent with the other types: - `og:title` is the wiki page title - `og:url` is built via `{{AppUrl}}{{.Link}}` like it is done for commit and file views. This has the caveat of doubling the slash (see test below). Should we `{{trimSuffix "/" AppUrl}}` to remove this, if sprig is available? - `og:description` is the repository description to match GH behaviour. Also, the first sentences of the page might not be descriptive enough. Should we prefix the repo description with the repo name? - `og:type` and `og:image` are common Added a `TestOpenGraphProperties` integration test using existing fixtures. Coverage is not 100% but can be improved later. ## Output on a test repo ```html <meta property="og:title" content="Project architecture"> <meta property="og:url" content="http://localhost:3000//xvello/wiki-test/wiki/Project-architecture"> <meta property="og:description" content="description for a test project"> <meta property="og:type" content="object"> <meta property="og:image" content="http://localhost:3000/avatars/3dd4d1e4eef065d1b4ad4bdb081ab6e7"> ``` Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4427 Co-authored-by: Xavier Vello <xavier.vello@gmail.com> Co-committed-by: Xavier Vello <xavier.vello@gmail.com>
53 lines
2.4 KiB
Go HTML Template
53 lines
2.4 KiB
Go HTML Template
{{- /* og:description - a one to two sentence description of your object, maybe it only needs at most 300 bytes */ -}}
|
|
{{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}}
|
|
<meta property="og:title" content="{{.Repository.Name}}">
|
|
<meta property="og:url" content="{{.Repository.HTMLURL}}">
|
|
{{if .Repository.Description}}
|
|
<meta property="og:description" content="{{StringUtils.EllipsisString .Repository.Description 300}}">
|
|
{{end}}
|
|
{{end}}
|
|
<meta property="og:type" content="object">
|
|
{{if (.Repository.AvatarLink ctx)}}
|
|
<meta property="og:image" content="{{.Repository.AvatarLink ctx}}">
|
|
{{else}}
|
|
<meta property="og:image" content="{{.Repository.Owner.AvatarLink ctx}}">
|
|
{{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}}">
|
|
{{end}}
|
|
<meta property="og:site_name" content="{{AppDisplayName}}">
|