Skip to content

Commit 532e422

Browse files
zokkissilverwind
andauthored
Unify organizations header (#29248)
Unify organizations header before: ![image](https://github.com/go-gitea/gitea/assets/72873130/74474e0d-33c3-4bbf-9324-d130ea2c62f8) after: ![image](https://github.com/go-gitea/gitea/assets/72873130/1c65de0d-fa0f-4b17-ab8d-067de8c7113b) --------- Co-authored-by: silverwind <me@silverwind.io>
1 parent e044504 commit 532e422

File tree

15 files changed

+94
-153
lines changed

15 files changed

+94
-153
lines changed

modules/context/org.go

+15
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import (
1111
"code.gitea.io/gitea/models/perm"
1212
"code.gitea.io/gitea/models/unit"
1313
user_model "code.gitea.io/gitea/models/user"
14+
"code.gitea.io/gitea/modules/markup"
15+
"code.gitea.io/gitea/modules/markup/markdown"
1416
"code.gitea.io/gitea/modules/setting"
1517
"code.gitea.io/gitea/modules/structs"
1618
)
@@ -255,6 +257,19 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
255257
ctx.Data["CanReadProjects"] = ctx.Org.CanReadUnit(ctx, unit.TypeProjects)
256258
ctx.Data["CanReadPackages"] = ctx.Org.CanReadUnit(ctx, unit.TypePackages)
257259
ctx.Data["CanReadCode"] = ctx.Org.CanReadUnit(ctx, unit.TypeCode)
260+
261+
ctx.Data["IsFollowing"] = ctx.Doer != nil && user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID)
262+
if len(ctx.ContextUser.Description) != 0 {
263+
content, err := markdown.RenderString(&markup.RenderContext{
264+
Metas: map[string]string{"mode": "document"},
265+
Ctx: ctx,
266+
}, ctx.ContextUser.Description)
267+
if err != nil {
268+
ctx.ServerError("RenderString", err)
269+
return
270+
}
271+
ctx.Data["RenderedDescription"] = content
272+
}
258273
}
259274

260275
// OrgAssignment returns a middleware to handle organization assignment

routers/web/org/home.go

-18
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"code.gitea.io/gitea/models/db"
1212
"code.gitea.io/gitea/models/organization"
1313
repo_model "code.gitea.io/gitea/models/repo"
14-
user_model "code.gitea.io/gitea/models/user"
1514
"code.gitea.io/gitea/modules/base"
1615
"code.gitea.io/gitea/modules/context"
1716
"code.gitea.io/gitea/modules/git"
@@ -46,17 +45,6 @@ func Home(ctx *context.Context) {
4645

4746
ctx.Data["PageIsUserProfile"] = true
4847
ctx.Data["Title"] = org.DisplayName()
49-
if len(org.Description) != 0 {
50-
desc, err := markdown.RenderString(&markup.RenderContext{
51-
Ctx: ctx,
52-
Metas: map[string]string{"mode": "document"},
53-
}, org.Description)
54-
if err != nil {
55-
ctx.ServerError("RenderString", err)
56-
return
57-
}
58-
ctx.Data["RenderedDescription"] = desc
59-
}
6048

6149
var orderBy db.SearchOrderBy
6250
ctx.Data["SortType"] = ctx.FormString("sort")
@@ -131,18 +119,12 @@ func Home(ctx *context.Context) {
131119
return
132120
}
133121

134-
var isFollowing bool
135-
if ctx.Doer != nil {
136-
isFollowing = user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID)
137-
}
138-
139122
ctx.Data["Repos"] = repos
140123
ctx.Data["Total"] = count
141124
ctx.Data["Members"] = members
142125
ctx.Data["Teams"] = ctx.Org.Teams
143126
ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull
144127
ctx.Data["PageIsViewRepositories"] = true
145-
ctx.Data["IsFollowing"] = isFollowing
146128

147129
err = shared_user.LoadHeaderCount(ctx)
148130
if err != nil {

routers/web/shared/user/header.go

-15
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import (
1717
"code.gitea.io/gitea/modules/git"
1818
"code.gitea.io/gitea/modules/gitrepo"
1919
"code.gitea.io/gitea/modules/log"
20-
"code.gitea.io/gitea/modules/markup"
21-
"code.gitea.io/gitea/modules/markup/markdown"
2220
"code.gitea.io/gitea/modules/setting"
2321
"code.gitea.io/gitea/modules/util"
2422
)
@@ -36,7 +34,6 @@ func prepareContextForCommonProfile(ctx *context.Context) {
3634
func PrepareContextForProfileBigAvatar(ctx *context.Context) {
3735
prepareContextForCommonProfile(ctx)
3836

39-
ctx.Data["IsFollowing"] = ctx.Doer != nil && user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID)
4037
ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail && ctx.ContextUser.Email != "" && ctx.IsSigned && !ctx.ContextUser.KeepEmailPrivate
4138
ctx.Data["ContextUserLocationMapURL"] = setting.Service.UserLocationMapURL + url.QueryEscape(ctx.ContextUser.Location)
4239

@@ -48,18 +45,6 @@ func PrepareContextForProfileBigAvatar(ctx *context.Context) {
4845
}
4946
ctx.Data["OpenIDs"] = openIDs
5047

51-
if len(ctx.ContextUser.Description) != 0 {
52-
content, err := markdown.RenderString(&markup.RenderContext{
53-
Metas: map[string]string{"mode": "document"},
54-
Ctx: ctx,
55-
}, ctx.ContextUser.Description)
56-
if err != nil {
57-
ctx.ServerError("RenderString", err)
58-
return
59-
}
60-
ctx.Data["RenderedDescription"] = content
61-
}
62-
6348
showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
6449
orgs, err := db.Find[organization.Organization](ctx, organization.FindOrgOptions{
6550
UserID: ctx.ContextUser.ID,

routers/web/user/profile.go

+1
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ func Action(ctx *context.Context) {
324324
ctx.HTML(http.StatusOK, tplProfileBigAvatar)
325325
return
326326
} else if ctx.ContextUser.IsOrganization() {
327+
ctx.Data["Org"] = ctx.ContextUser
327328
ctx.Data["IsFollowing"] = ctx.Doer != nil && user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID)
328329
ctx.HTML(http.StatusOK, tplFollowUnfollow)
329330
return

templates/org/header.tmpl

+28-14
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,32 @@
1-
{{with .Org}}
2-
<div class="ui container">
3-
<div class="ui vertically grid head">
4-
<div class="column">
5-
<div class="ui header gt-df gt-ac gt-word-break">
6-
{{ctx.AvatarUtils.Avatar . 100}}
7-
<span class="text thin grey"><a href="{{.HomeLink}}">{{.DisplayName}}</a></span>
8-
<span class="org-visibility">
9-
{{if .Visibility.IsLimited}}<div class="ui medium basic horizontal label">{{ctx.Locale.Tr "org.settings.visibility.limited_shortname"}}</div>{{end}}
10-
{{if .Visibility.IsPrivate}}<div class="ui medium basic horizontal label">{{ctx.Locale.Tr "org.settings.visibility.private_shortname"}}</div>{{end}}
11-
</span>
12-
</div>
13-
</div>
1+
<div class="ui container gt-df">
2+
{{ctx.AvatarUtils.Avatar .Org 100 "org-avatar"}}
3+
<div id="org-info" class="gt-df gt-fc">
4+
<div class="ui header">
5+
{{.Org.DisplayName}}
6+
<span class="org-visibility">
7+
{{if .Org.Visibility.IsLimited}}<span class="ui large basic horizontal label">{{ctx.Locale.Tr "org.settings.visibility.limited_shortname"}}</span>{{end}}
8+
{{if .Org.Visibility.IsPrivate}}<span class="ui large basic horizontal label">{{ctx.Locale.Tr "org.settings.visibility.private_shortname"}}</span>{{end}}
9+
</span>
10+
<span class="gt-df gt-ac gt-gap-2 gt-ml-auto gt-font-16 gt-whitespace-nowrap">
11+
{{if .EnableFeed}}
12+
<a class="ui basic label button gt-mr-0" href="{{.Org.HomeLink}}.rss" data-tooltip-content="{{ctx.Locale.Tr "rss_feed"}}">
13+
{{svg "octicon-rss" 24}}
14+
</a>
15+
{{end}}
16+
{{if .IsSigned}}
17+
{{template "org/follow_unfollow" .}}
18+
{{end}}
19+
</span>
20+
</div>
21+
{{if .RenderedDescription}}<div class="render-content markup">{{.RenderedDescription | Str2html}}</div>{{end}}
22+
<div class="text light meta gt-mt-2">
23+
{{if .Org.Location}}<div class="flex-text-block">{{svg "octicon-location"}} <span>{{.Org.Location}}</span></div>{{end}}
24+
{{if .Org.Website}}<div class="flex-text-block">{{svg "octicon-link"}} <a class="muted" target="_blank" rel="noopener noreferrer me" href="{{.Org.Website}}">{{.Org.Website}}</a></div>{{end}}
25+
{{if .IsSigned}}
26+
{{if .Org.Email}}<div class="flex-text-block">{{svg "octicon-mail"}} <a class="muted" href="mailto:{{.Org.Email}}">{{.Org.Email}}</a></div>{{end}}
27+
{{end}}
1428
</div>
1529
</div>
16-
{{end}}
30+
</div>
1731

1832
{{template "org/menu" .}}

templates/org/home.tmpl

+1-32
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,6 @@
11
{{template "base/head" .}}
22
<div role="main" aria-label="{{.Title}}" class="page-content organization profile">
3-
<div class="ui container gt-df">
4-
{{ctx.AvatarUtils.Avatar .Org 140 "org-avatar"}}
5-
<div id="org-info">
6-
<div class="ui header">
7-
{{.Org.DisplayName}}
8-
<span class="org-visibility">
9-
{{if .Org.Visibility.IsLimited}}<span class="ui large basic horizontal label">{{ctx.Locale.Tr "org.settings.visibility.limited_shortname"}}</span>{{end}}
10-
{{if .Org.Visibility.IsPrivate}}<span class="ui large basic horizontal label">{{ctx.Locale.Tr "org.settings.visibility.private_shortname"}}</span>{{end}}
11-
</span>
12-
</div>
13-
{{if $.RenderedDescription}}<div class="render-content markup">{{$.RenderedDescription|Str2html}}</div>{{end}}
14-
<div class="text grey meta">
15-
{{if .Org.Location}}<div class="flex-text-block">{{svg "octicon-location"}} <span>{{.Org.Location}}</span></div>{{end}}
16-
{{if .Org.Website}}<div class="flex-text-block">{{svg "octicon-link"}} <a target="_blank" rel="noopener noreferrer me" href="{{.Org.Website}}">{{.Org.Website}}</a></div>{{end}}
17-
{{if $.IsSigned}}
18-
{{if .Org.Email}}<div class="flex-text-block">{{svg "octicon-mail"}} <a class="muted" href="mailto:{{.Org.Email}}">{{.Org.Email}}</a></div>{{end}}
19-
{{end}}
20-
</div>
21-
</div>
22-
<div class="right menu">
23-
{{if .EnableFeed}}
24-
<a class="ui basic label button gt-mr-0" href="{{$.Org.HomeLink}}.rss" data-tooltip-content="{{ctx.Locale.Tr "rss_feed"}}">
25-
{{svg "octicon-rss" 24}}
26-
</a>
27-
{{end}}
28-
{{if .IsSigned}}
29-
{{template "org/follow_unfollow" .}}
30-
{{end}}
31-
</div>
32-
</div>
33-
34-
{{template "org/menu" .}}
3+
{{template "org/header" .}}
354

365
<div class="ui container">
376
<div class="ui mobile reversed stackable grid">

templates/org/member/members.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{{template "base/head" .}}
2-
<div role="main" aria-label="{{.Title}}" class="page-content organization">
2+
<div role="main" aria-label="{{.Title}}" class="page-content organization members">
33
{{template "org/header" .}}
44
<div class="ui container">
55
{{template "base/alert" .}}

templates/org/menu.tmpl

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,24 @@
1515
</a>
1616
{{end}}
1717
{{if and .IsPackageEnabled .CanReadPackages}}
18-
<a class="item" href="{{$.Org.HomeLink}}/-/packages">
18+
<a class="{{if .IsPackagesPage}}active {{end}}item" href="{{$.Org.HomeLink}}/-/packages">
1919
{{svg "octicon-package"}} {{ctx.Locale.Tr "packages.title"}}
2020
</a>
2121
{{end}}
2222
{{if and .IsRepoIndexerEnabled .CanReadCode}}
23-
<a class="item" href="{{$.Org.HomeLink}}/-/code">
24-
{{svg "octicon-code"}}&nbsp;{{ctx.Locale.Tr "org.code"}}
23+
<a class="{{if .IsCodePage}}active {{end}}item" href="{{$.Org.HomeLink}}/-/code">
24+
{{svg "octicon-code"}} {{ctx.Locale.Tr "org.code"}}
2525
</a>
2626
{{end}}
2727
{{if .NumMembers}}
2828
<a class="{{if $.PageIsOrgMembers}}active {{end}}item" href="{{$.OrgLink}}/members">
29-
{{svg "octicon-person"}}&nbsp;{{ctx.Locale.Tr "org.members"}}
29+
{{svg "octicon-person"}} {{ctx.Locale.Tr "org.members"}}
3030
<div class="ui small label">{{.NumMembers}}</div>
3131
</a>
3232
{{end}}
3333
{{if .IsOrganizationMember}}
3434
<a class="{{if $.PageIsOrgTeams}}active {{end}}item" href="{{$.OrgLink}}/teams">
35-
{{svg "octicon-people"}}&nbsp;{{ctx.Locale.Tr "org.teams"}}
35+
{{svg "octicon-people"}} {{ctx.Locale.Tr "org.teams"}}
3636
{{if .NumTeams}}
3737
<div class="ui small label">{{.NumTeams}}</div>
3838
{{end}}

templates/org/projects/list.tmpl

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
{{template "base/head" .}}
22
{{if .ContextUser.IsOrganization}}
3-
<div role="main" aria-label="{{.Title}}" class="page-content repository packages">
4-
{{template "shared/user/org_profile_avatar" .}}
3+
<div role="main" aria-label="{{.Title}}" class="page-content organization projects">
4+
{{template "org/header" .}}
55
<div class="ui container">
6-
{{template "user/overview/header" .}}
7-
{{template "projects/list" .}}
6+
{{template "projects/list" .}}
87
</div>
98
</div>
109
{{else}}

templates/package/settings.tmpl

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
{{template "base/head" .}}
2-
<div role="main" aria-label="{{.Title}}" class="page-content repository settings options">
3-
{{template "shared/user/org_profile_avatar" .}}
2+
<div role="main" aria-label="{{.Title}}" class="page-content repository settings options{{if .ContextUser.IsOrganization}} organization{{end}}">
3+
{{if .ContextUser.IsOrganization}}
4+
{{template "org/header" .}}
5+
{{else}}
6+
{{template "shared/user/org_profile_avatar" .}}
7+
{{end}}
48
<div class="ui container">
5-
{{template "user/overview/header" .}}
9+
{{if not .ContextUser.IsOrganization}}
10+
{{template "user/overview/header" .}}
11+
{{end}}
612
{{template "base/alert" .}}
713
<p><a href="{{.PackageDescriptor.FullWebLink}}">{{.PackageDescriptor.Package.Name}} ({{.PackageDescriptor.Version.Version}})</a> / <strong>{{ctx.Locale.Tr "repo.settings"}}</strong></p>
814
<h4 class="ui top attached header">

templates/user/code.tmpl

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
{{template "base/head" .}}
22
{{if .ContextUser.IsOrganization}}
3-
<div role="main" aria-label="{{.Title}}" class="page-content repository">
4-
{{template "shared/user/org_profile_avatar" .}}
3+
<div role="main" aria-label="{{.Title}}" class="page-content organization code">
4+
{{template "org/header" .}}
55
<div class="ui container">
6-
{{template "user/overview/header" .}}
76
{{template "code/searchcombo" .}}
87
</div>
98
</div>

templates/user/overview/header.tmpl

+15-40
Original file line numberDiff line numberDiff line change
@@ -10,63 +10,38 @@
1010
<div class="ui small label">{{.RepoCount}}</div>
1111
{{end}}
1212
</a>
13-
{{if or .ContextUser.IsIndividual (and .ContextUser.IsOrganization .CanReadProjects)}}
13+
{{if or .ContextUser.IsIndividual .CanReadProjects}}
1414
<a href="{{.ContextUser.HomeLink}}/-/projects" class="{{if .PageIsViewProjects}}active {{end}}item">
1515
{{svg "octicon-project-symlink"}} {{ctx.Locale.Tr "user.projects"}}
1616
{{if .ProjectCount}}
1717
<div class="ui small label">{{.ProjectCount}}</div>
1818
{{end}}
1919
</a>
2020
{{end}}
21-
{{if and .IsPackageEnabled (or .ContextUser.IsIndividual (and .ContextUser.IsOrganization .CanReadPackages))}}
21+
{{if and .IsPackageEnabled (or .ContextUser.IsIndividual .CanReadPackages)}}
2222
<a href="{{.ContextUser.HomeLink}}/-/packages" class="{{if .IsPackagesPage}}active {{end}}item">
2323
{{svg "octicon-package"}} {{ctx.Locale.Tr "packages.title"}}
2424
</a>
2525
{{end}}
26-
{{if and .IsRepoIndexerEnabled (or .ContextUser.IsIndividual (and .ContextUser.IsOrganization .CanReadCode))}}
26+
{{if and .IsRepoIndexerEnabled (or .ContextUser.IsIndividual .CanReadCode)}}
2727
<a href="{{.ContextUser.HomeLink}}/-/code" class="{{if .IsCodePage}}active {{end}}item">
2828
{{svg "octicon-code"}} {{ctx.Locale.Tr "user.code"}}
2929
</a>
3030
{{end}}
3131

32-
{{if .ContextUser.IsOrganization}}
33-
{{if .NumMembers}}
34-
<a class="{{if $.PageIsOrgMembers}}active {{end}}item" href="{{$.OrgLink}}/members">
35-
{{svg "octicon-person"}}&nbsp;{{ctx.Locale.Tr "org.members"}}
36-
<div class="ui small label">{{.NumMembers}}</div>
37-
</a>
38-
{{end}}
39-
{{if .IsOrganizationMember}}
40-
<a class="{{if $.PageIsOrgTeams}}active {{end}}item" href="{{$.OrgLink}}/teams">
41-
{{svg "octicon-people"}}&nbsp;{{ctx.Locale.Tr "org.teams"}}
42-
{{if .NumTeams}}
43-
<div class="ui small label">{{.NumTeams}}</div>
44-
{{end}}
45-
</a>
46-
{{end}}
47-
48-
{{if .IsOrganizationOwner}}
49-
<div class="right menu">
50-
<a class="item" href="{{.OrgLink}}/settings">
51-
{{svg "octicon-tools"}} {{ctx.Locale.Tr "repo.settings"}}
52-
</a>
53-
</div>
54-
{{end}}
32+
<a class="{{if eq .TabName "activity"}}active {{end}}item" href="{{.ContextUser.HomeLink}}?tab=activity">
33+
{{svg "octicon-rss"}} {{ctx.Locale.Tr "user.activity"}}
34+
</a>
35+
{{if not .DisableStars}}
36+
<a class="{{if eq .TabName "stars"}}active {{end}}item" href="{{.ContextUser.HomeLink}}?tab=stars">
37+
{{svg "octicon-star"}} {{ctx.Locale.Tr "user.starred"}}
38+
{{if .ContextUser.NumStars}}
39+
<div class="ui small label">{{.ContextUser.NumStars}}</div>
40+
{{end}}
41+
</a>
5542
{{else}}
56-
<a class="{{if eq .TabName "activity"}}active {{end}}item" href="{{.ContextUser.HomeLink}}?tab=activity">
57-
{{svg "octicon-rss"}} {{ctx.Locale.Tr "user.activity"}}
43+
<a class="{{if eq .TabName "watching"}}active {{end}}item" href="{{.ContextUser.HomeLink}}?tab=watching">
44+
{{svg "octicon-eye"}} {{ctx.Locale.Tr "user.watched"}}
5845
</a>
59-
{{if not .DisableStars}}
60-
<a class="{{if eq .TabName "stars"}}active {{end}}item" href="{{.ContextUser.HomeLink}}?tab=stars">
61-
{{svg "octicon-star"}} {{ctx.Locale.Tr "user.starred"}}
62-
{{if .ContextUser.NumStars}}
63-
<div class="ui small label">{{.ContextUser.NumStars}}</div>
64-
{{end}}
65-
</a>
66-
{{else}}
67-
<a class="{{if eq .TabName "watching"}}active {{end}}item" href="{{.ContextUser.HomeLink}}?tab=watching">
68-
{{svg "octicon-eye"}} {{ctx.Locale.Tr "user.watched"}}
69-
</a>
70-
{{end}}
7146
{{end}}
7247
</div>

templates/user/overview/package_versions.tmpl

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
{{template "base/head" .}}
22
{{if .ContextUser.IsOrganization}}
3-
<div role="main" aria-label="{{.Title}}" class="page-content repository packages">
4-
{{template "shared/user/org_profile_avatar" .}}
3+
<div role="main" aria-label="{{.Title}}" class="page-content organization packages">
4+
{{template "org/header" .}}
55
<div class="ui container">
6-
{{template "user/overview/header" .}}
7-
{{template "package/shared/versionlist" .}}
6+
{{template "package/shared/versionlist" .}}
87
</div>
98
</div>
109
{{else}}

templates/user/overview/packages.tmpl

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
{{template "base/head" .}}
22
{{if .ContextUser.IsOrganization}}
3-
<div role="main" aria-label="{{.Title}}" class="page-content repository packages">
4-
{{template "shared/user/org_profile_avatar" .}}
3+
<div role="main" aria-label="{{.Title}}" class="page-content organization packages">
4+
{{template "org/header" .}}
55
<div class="ui container">
6-
{{template "user/overview/header" .}}
7-
{{template "package/shared/list" .}}
6+
{{template "package/shared/list" .}}
87
</div>
98
</div>
109
{{else}}

0 commit comments

Comments
 (0)