From 519293d5ba9673f318f0f898ba552fc4c2d78646 Mon Sep 17 00:00:00 2001 From: puni9869 Date: Sun, 2 Jul 2023 13:24:45 +0530 Subject: [PATCH 01/29] Adjusting profile layout for package, project and code page. Big Profile avatar is implemented. Org profile avatar is separated out from profile avater file. Org layout for code, project, packages and package_versions pages is simplified. --- routers/web/org/projects.go | 4 + routers/web/shared/user/header.go | 90 +++++++++++++ routers/web/user/code.go | 6 +- routers/web/user/package.go | 5 +- templates/org/projects/list.tmpl | 23 +++- templates/package/shared/list.tmpl | 104 ++++++++------- templates/package/shared/versionlist.tmpl | 72 +++++------ templates/projects/list.tmpl | 2 +- templates/shared/user/org_profile_avatar.tmpl | 16 +++ templates/shared/user/profile_big_avatar.tmpl | 116 +++++++++++++++++ templates/user/code.tmpl | 76 ++++++++--- templates/user/overview/header.tmpl | 22 +--- templates/user/overview/package_versions.tmpl | 23 +++- templates/user/overview/packages.tmpl | 27 +++- templates/user/profile.tmpl | 119 +----------------- 15 files changed, 453 insertions(+), 252 deletions(-) create mode 100644 templates/shared/user/org_profile_avatar.tmpl create mode 100644 templates/shared/user/profile_big_avatar.tmpl diff --git a/routers/web/org/projects.go b/routers/web/org/projects.go index e525f2c43f3ac..18537b38c2579 100644 --- a/routers/web/org/projects.go +++ b/routers/web/org/projects.go @@ -41,6 +41,10 @@ func MustEnableProjects(ctx *context.Context) { // Projects renders the home page of projects func Projects(ctx *context.Context) { + shared_user.PrepareContextForProfileBigAvatar(ctx) + if ctx.ContextUser.IsOrganization() { + ctx.Data["pageStyleClasses"] = "container" + } ctx.Data["Title"] = ctx.Tr("repo.project_board") sortType := ctx.FormTrim("sort") diff --git a/routers/web/shared/user/header.go b/routers/web/shared/user/header.go index 9594e6975a8ef..e88ea61c21d89 100644 --- a/routers/web/shared/user/header.go +++ b/routers/web/shared/user/header.go @@ -4,12 +4,102 @@ package user import ( + "fmt" + + "code.gitea.io/gitea/models/db" + "code.gitea.io/gitea/models/organization" repo_model "code.gitea.io/gitea/models/repo" + user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/markup" + "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" ) +// PrepareContextForProfileBigAvatar set the context for big avatar view on repo +func PrepareContextForProfileBigAvatar(ctx *context.Context) { + // check view permissions + if !user_model.IsUserVisibleToViewer(ctx, ctx.ContextUser, ctx.Doer) { + ctx.NotFound("user", fmt.Errorf(ctx.ContextUser.Name)) + return + } + + // advertise feed via meta tag + ctx.Data["FeedURL"] = ctx.ContextUser.HomeLink() + + // Show OpenID URIs + openIDs, err := user_model.GetUserOpenIDs(ctx.ContextUser.ID) + if err != nil { + ctx.ServerError("GetUserOpenIDs", err) + return + } + + var isFollowing bool + if ctx.Doer != nil { + isFollowing = user_model.IsFollowing(ctx.Doer.ID, ctx.ContextUser.ID) + } + + ctx.Data["ContextUser"] = ctx.ContextUser + ctx.Data["OpenIDs"] = openIDs + ctx.Data["IsFollowing"] = isFollowing + + if len(ctx.ContextUser.Description) != 0 { + content, err := markdown.RenderString(&markup.RenderContext{ + URLPrefix: ctx.Repo.RepoLink, + Metas: map[string]string{"mode": "document"}, + GitRepo: ctx.Repo.GitRepo, + Ctx: ctx, + }, ctx.ContextUser.Description) + if err != nil { + ctx.ServerError("RenderString", err) + return + } + ctx.Data["RenderedDescription"] = content + } + showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID) + orgs, err := organization.FindOrgs(organization.FindOrgOptions{ + UserID: ctx.ContextUser.ID, + IncludePrivate: showPrivate, + }) + if err != nil { + ctx.ServerError("FindOrgs", err) + return + } + ctx.Data["Orgs"] = orgs + ctx.Data["HasOrgsVisible"] = organization.HasOrgsVisible(orgs, ctx.Doer) + + badges, _, err := user_model.GetUserBadges(ctx, ctx.ContextUser) + if err != nil { + ctx.ServerError("GetUserBadges", err) + return + } + ctx.Data["Badges"] = badges + + pagingNum := setting.UI.User.RepoPagingNum + page := ctx.FormInt("page") + _, numFollowers, err := user_model.GetUserFollowers(ctx, ctx.ContextUser, ctx.Doer, db.ListOptions{ + PageSize: pagingNum, + Page: page, + }) + if err != nil { + ctx.ServerError("GetUserFollowers", err) + return + } + ctx.Data["NumFollowers"] = numFollowers + _, numFollowing, err := user_model.GetUserFollowing(ctx, ctx.ContextUser, ctx.Doer, db.ListOptions{ + PageSize: pagingNum, + Page: page, + }) + if err != nil { + ctx.ServerError("GetUserFollowing", err) + return + } + ctx.Data["NumFollowing"] = numFollowing + ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail && ctx.ContextUser.Email != "" && ctx.IsSigned && !ctx.ContextUser.KeepEmailPrivate + ctx.Data["EnableFeed"] = setting.Other.EnableFeed +} + func RenderUserHeader(ctx *context.Context) { ctx.Data["IsProjectEnabled"] = true ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled diff --git a/routers/web/user/code.go b/routers/web/user/code.go index 15524de7d651e..96def1e998cbd 100644 --- a/routers/web/user/code.go +++ b/routers/web/user/code.go @@ -4,6 +4,7 @@ package user import ( + shared_user "code.gitea.io/gitea/routers/web/shared/user" "net/http" repo_model "code.gitea.io/gitea/models/repo" @@ -19,11 +20,14 @@ const ( // CodeSearch render user/organization code search page func CodeSearch(ctx *context.Context) { + shared_user.PrepareContextForProfileBigAvatar(ctx) + if ctx.ContextUser.IsOrganization() { + ctx.Data["pageStyleClasses"] = "container" + } if !setting.Indexer.RepoIndexerEnabled { ctx.Redirect(ctx.ContextUser.HomeLink()) return } - ctx.Data["IsProjectEnabled"] = true ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled diff --git a/routers/web/user/package.go b/routers/web/user/package.go index 20141914b655b..882f7d44e6f7e 100644 --- a/routers/web/user/package.go +++ b/routers/web/user/package.go @@ -36,6 +36,10 @@ const ( // ListPackages displays a list of all packages of the context user func ListPackages(ctx *context.Context) { + shared_user.PrepareContextForProfileBigAvatar(ctx) + if ctx.ContextUser.IsOrganization() { + ctx.Data["pageStyleClasses"] = "container" + } page := ctx.FormInt("page") if page <= 1 { page = 1 @@ -104,7 +108,6 @@ func ListPackages(ctx *context.Context) { org := org_model.OrgFromUser(ctx.ContextUser) ctx.Data["Org"] = org ctx.Data["OrgLink"] = ctx.ContextUser.OrganisationLink() - if ctx.Doer != nil { ctx.Data["IsOrganizationMember"], _ = org_model.IsOrganizationMember(ctx, org.ID, ctx.Doer.ID) ctx.Data["IsOrganizationOwner"], _ = org_model.IsOrganizationOwner(ctx, org.ID, ctx.Doer.ID) diff --git a/templates/org/projects/list.tmpl b/templates/org/projects/list.tmpl index 1f113b28c84c9..1f1cdd4ce41b5 100644 --- a/templates/org/projects/list.tmpl +++ b/templates/org/projects/list.tmpl @@ -1,6 +1,25 @@ {{template "base/head" .}} -
+{{if .ContextUser.IsOrganization}} +
+ {{template "shared/user/org_profile_avatar" .}} {{template "user/overview/header" .}} {{template "projects/list" .}} -
+
+{{else}} +
+
+
+
+ {{template "shared/user/profile_big_avatar" .}} +
+
+
+ {{template "user/overview/header" .}} +
+ {{template "projects/list" .}} +
+
+
+
+{{end}} {{template "base/footer" .}} diff --git a/templates/package/shared/list.tmpl b/templates/package/shared/list.tmpl index 3d14eda3efa19..58b1d9db63777 100644 --- a/templates/package/shared/list.tmpl +++ b/templates/package/shared/list.tmpl @@ -1,55 +1,63 @@ -
- {{template "base/alert" .}} -
-
- {{template "shared/searchinput" dict "locale" .locale "Value" .Query "AutoFocus" true}} - - -
-
-
- {{range .PackageDescriptors}} -
  • -
    -
    - {{.Package.Name}} - {{svg .Package.Type.SVGName 16}} {{.Package.Type.Name}} -
    -
    - {{$timeStr := TimeSinceUnix .Version.CreatedUnix $.locale}} - {{$hasRepositoryAccess := false}} - {{if .Repository}} - {{$hasRepositoryAccess = index $.RepositoryAccessMap .Repository.ID}} - {{end}} - {{if $hasRepositoryAccess}} - {{$.locale.Tr "packages.published_by_in" $timeStr .Creator.HomeLink (.Creator.GetDisplayName | Escape) .Repository.Link (.Repository.FullName | Escape) | Safe}} - {{else}} - {{$.locale.Tr "packages.published_by" $timeStr .Creator.HomeLink (.Creator.GetDisplayName | Escape) | Safe}} +
    +
    + {{template "base/alert" .}} +
    +
    + + -
  • - {{else}} - {{if not .HasPackages}} -
    - {{svg "octicon-package" 48}} -

    {{.locale.Tr "packages.empty"}}

    - {{if and .Repository .CanWritePackages}} - {{$packagesUrl := URLJoin .Owner.HomeLink "-" "packages"}} -

    {{.locale.Tr "packages.empty.repo" $packagesUrl | Safe}}

    - {{end}} -

    {{.locale.Tr "packages.empty.documentation" "https://docs.gitea.io/en-us/usage/packages/overview/" | Safe}}

    -
    + +
    + +
    + {{range .PackageDescriptors}} +
  • +
    +
    + {{.Package.Name}} + {{svg .Package.Type.SVGName 16}} {{.Package.Type.Name}} +
    +
    + {{$timeStr := TimeSinceUnix .Version.CreatedUnix $.locale}} + {{$hasRepositoryAccess := false}} + {{if .Repository}} + {{$hasRepositoryAccess = index $.RepositoryAccessMap .Repository.ID}} + {{end}} + {{if $hasRepositoryAccess}} + {{$.locale.Tr "packages.published_by_in" $timeStr .Creator.HomeLink (.Creator.GetDisplayName | Escape) .Repository.Link (.Repository.FullName | Escape) | Safe}} + {{else}} + {{$.locale.Tr "packages.published_by" $timeStr .Creator.HomeLink (.Creator.GetDisplayName | Escape) | Safe}} + {{end}} +
    +
    +
  • {{else}} -

    {{.locale.Tr "packages.filter.no_result"}}

    + {{if not .HasPackages}} +
    + {{svg "octicon-package" 48}} +

    {{.locale.Tr "packages.empty"}}

    + {{if and .Repository .CanWritePackages}} + {{$packagesUrl := URLJoin .Owner.HomeLink "-" "packages"}} +

    {{.locale.Tr "packages.empty.repo" $packagesUrl | Safe}}

    + {{end}} +

    {{.locale.Tr "packages.empty.documentation" "https://docs.gitea.io/en-us/usage/packages/overview/" | Safe}}

    +
    + {{else}} +

    {{.locale.Tr "packages.filter.no_result"}}

    + {{end}} {{end}} - {{end}} - {{template "base/paginate" .}} + {{template "base/paginate" .}} +
    diff --git a/templates/package/shared/versionlist.tmpl b/templates/package/shared/versionlist.tmpl index 23cd0bfcc0ded..601769625e28f 100644 --- a/templates/package/shared/versionlist.tmpl +++ b/templates/package/shared/versionlist.tmpl @@ -1,39 +1,41 @@ -
    -

    {{.PackageDescriptor.Package.Name}} / {{.locale.Tr "packages.versions"}}

    -
    -
    - {{template "shared/searchinput" dict "locale" .locale "Value" .Query "AutoFocus" true}} - - {{if eq .PackageDescriptor.Package.Type "container"}} - +
    +
    +

    {{.PackageDescriptor.Package.Name}} / {{.locale.Tr "packages.versions"}}

    + +
    + {{template "shared/searchinput" dict "locale" .locale "Value" .Query "AutoFocus" true}} + + {{if eq .PackageDescriptor.Package.Type "container"}} + + {{end}} + +
    + +
    + {{range .PackageDescriptors}} +
  • +
    + +
    + {{$.locale.Tr "packages.published_by" (TimeSinceUnix .Version.CreatedUnix $.locale) .Creator.HomeLink (.Creator.GetDisplayName | Escape) | Safe}} +
    +
    +
  • + {{else}} +

    {{.locale.Tr "packages.filter.no_result"}}

    {{end}} - + {{template "base/paginate" .}}
    - -
    - {{range .PackageDescriptors}} -
  • -
    - -
    - {{$.locale.Tr "packages.published_by" (TimeSinceUnix .Version.CreatedUnix $.locale) .Creator.HomeLink (.Creator.GetDisplayName | Escape) | Safe}} -
    -
    -
  • - {{else}} -

    {{.locale.Tr "packages.filter.no_result"}}

    - {{end}} - {{template "base/paginate" .}}
    diff --git a/templates/projects/list.tmpl b/templates/projects/list.tmpl index 9725c1e63b337..4f09aa931272a 100644 --- a/templates/projects/list.tmpl +++ b/templates/projects/list.tmpl @@ -1,5 +1,5 @@
    -
    +
    {{if .CanWriteProjects}}