aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/content/doc/usage/profile-readme.en-us.md20
-rw-r--r--options/locale/locale_en-US.ini1
-rw-r--r--routers/web/shared/user/header.go22
-rw-r--r--routers/web/user/profile.go33
-rw-r--r--templates/user/overview/header.tmpl13
-rw-r--r--templates/user/profile.tmpl39
-rw-r--r--web_src/css/user.css7
7 files changed, 97 insertions, 38 deletions
diff --git a/docs/content/doc/usage/profile-readme.en-us.md b/docs/content/doc/usage/profile-readme.en-us.md
new file mode 100644
index 0000000000..802451f0b6
--- /dev/null
+++ b/docs/content/doc/usage/profile-readme.en-us.md
@@ -0,0 +1,20 @@
+---
+date: "2023-03-02T21:00:00+05:00"
+title: "Usage: Gitea Profile READMEs"
+slug: "profile-readme"
+weight: 12
+toc: false
+draft: false
+menu:
+ sidebar:
+ parent: "usage"
+ name: "Gitea Profile READMEs"
+ weight: 12
+ identifier: "profile-readme"
+---
+
+# Gitea Profile READMEs
+
+To display a markdown file in your Gitea profile page, simply make a repository named ".profile" and edit the README.md file inside. Gitea will automatically pull this file in and display it above your repositories.
+
+Note. You are welcome to make this repository private. Doing so will hide your source files from public viewing and allow you to privitize certain files. However, the README.md file will be the only file present on your profile. If you wish to have an entirely private .profile repository, remove or rename the README.md file.
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 9bfc0033b4..f825220839 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -569,6 +569,7 @@ starred = Starred Repositories
watched = Watched Repositories
code = Code
projects = Projects
+overview = Overview
following = Following
follow = Follow
unfollow = Unfollow
diff --git a/routers/web/shared/user/header.go b/routers/web/shared/user/header.go
index 05e45f999e..9594e6975a 100644
--- a/routers/web/shared/user/header.go
+++ b/routers/web/shared/user/header.go
@@ -4,7 +4,9 @@
package user
import (
+ repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/setting"
)
@@ -13,4 +15,24 @@ func RenderUserHeader(ctx *context.Context) {
ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
ctx.Data["ContextUser"] = ctx.ContextUser
+ tab := ctx.FormString("tab")
+ ctx.Data["TabName"] = tab
+ repo, err := repo_model.GetRepositoryByName(ctx.ContextUser.ID, ".profile")
+ if err == nil && !repo.IsEmpty {
+ gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())
+ if err != nil {
+ ctx.ServerError("OpenRepository", err)
+ return
+ }
+ defer gitRepo.Close()
+ commit, err := gitRepo.GetBranchCommit(repo.DefaultBranch)
+ if err != nil {
+ ctx.ServerError("GetBranchCommit", err)
+ return
+ }
+ blob, err := commit.GetBlobByPath("README.md")
+ if err == nil && blob != nil {
+ ctx.Data["ProfileReadme"] = true
+ }
+ }
}
diff --git a/routers/web/user/profile.go b/routers/web/user/profile.go
index ef91d89d14..42ae37e3ba 100644
--- a/routers/web/user/profile.go
+++ b/routers/web/user/profile.go
@@ -16,6 +16,7 @@ import (
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"
@@ -91,6 +92,38 @@ func Profile(ctx *context.Context) {
ctx.Data["RenderedDescription"] = content
}
+ repo, err := repo_model.GetRepositoryByName(ctx.ContextUser.ID, ".profile")
+ if err == nil && !repo.IsEmpty {
+ gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())
+ if err != nil {
+ ctx.ServerError("OpenRepository", err)
+ return
+ }
+ defer gitRepo.Close()
+ commit, err := gitRepo.GetBranchCommit(repo.DefaultBranch)
+ if err != nil {
+ ctx.ServerError("GetBranchCommit", err)
+ return
+ }
+ blob, err := commit.GetBlobByPath("README.md")
+ if err == nil {
+ bytes, err := blob.GetBlobContent()
+ if err != nil {
+ ctx.ServerError("GetBlobContent", err)
+ return
+ }
+ profileContent, err := markdown.RenderString(&markup.RenderContext{
+ Ctx: ctx,
+ GitRepo: gitRepo,
+ }, bytes)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
+ ctx.Data["ProfileReadme"] = profileContent
+ }
+ }
+
showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
orgs, err := organization.FindOrgs(organization.FindOrgOptions{
diff --git a/templates/user/overview/header.tmpl b/templates/user/overview/header.tmpl
index 10227a3ebd..6016aca447 100644
--- a/templates/user/overview/header.tmpl
+++ b/templates/user/overview/header.tmpl
@@ -1,6 +1,7 @@
<!-- TODO: make template org and user can share -->
-{{with .ContextUser}}
- <div class="ui container">
+{{if or (.IsPackagesPage) (.PageIsViewProjects)}}
+ {{with .ContextUser}}
+ <div class="ui container">
<div class="ui vertically grid head">
<div class="column">
<div class="ui header">
@@ -14,11 +15,17 @@
</div>
</div>
</div>
+ {{end}}
{{end}}
<div class="ui tabs container">
<div class="ui secondary stackable pointing menu">
- <a class="item" href="{{.ContextUser.HomeLink}}">
+ {{if .ProfileReadme}}
+ <a class='{{if or (eq .TabName "overview") (and (eq .TabName "") (not .IsPackagesPage) (not .PageIsViewProjects))}}active {{end}}item' href="{{.ContextUser.HomeLink}}?tab=overview">
+ {{svg "octicon-info"}} {{.locale.Tr "user.overview"}}
+ </a>
+ {{end}}
+ <a class="{{if or (eq .TabName "repositories") (and (eq .TabName "") (not .IsPackagesPage) (not .PageIsViewProjects) (not .ProfileReadme))}}active {{end}} item" href="{{.ContextUser.HomeLink}}?tab=repositories">
{{svg "octicon-repo"}} {{.locale.Tr "user.repositories"}}
{{if .ContextUser.NumRepos}}
<div class="ui small label">{{.ContextUser.NumRepos}}</div>
diff --git a/templates/user/profile.tmpl b/templates/user/profile.tmpl
index 431961089d..08e50fd0ce 100644
--- a/templates/user/profile.tmpl
+++ b/templates/user/profile.tmpl
@@ -121,40 +121,7 @@
</div>
<div class="ui eleven wide column">
<div class="ui secondary stackable pointing tight menu">
- <a class='{{if and (ne .TabName "activity") (ne .TabName "following") (ne .TabName "followers") (ne .TabName "stars") (ne .TabName "watching") (ne .TabName "projects") (ne .TabName "code")}}active {{end}}item' href="{{.ContextUser.HomeLink}}">
- {{svg "octicon-repo"}} {{.locale.Tr "user.repositories"}}
- {{if .ContextUser.NumRepos}}
- <div class="ui small label">{{.ContextUser.NumRepos}}</div>
- {{end}}
- </a>
- <a href="{{.ContextUser.HomeLink}}/-/projects" class="{{if eq .TabName "projects"}}active {{end}}item">
- {{svg "octicon-project-symlink"}} {{.locale.Tr "user.projects"}}
- </a>
- {{if .IsPackageEnabled}}
- <a class='{{if eq .TabName "packages"}}active {{end}}item' href="{{.ContextUser.HomeLink}}/-/packages">
- {{svg "octicon-package"}} {{.locale.Tr "packages.title"}}
- </a>
- {{end}}
- {{if and (not $.UnitTypeCode.UnitGlobalDisabled) .IsRepoIndexerEnabled}}
- <a class='{{if eq .TabName "code"}}active {{end}}item' href="{{.ContextUser.HomeLink}}/-/code">
- {{svg "octicon-code"}} {{.locale.Tr "user.code"}}
- </a>
- {{end}}
- <a class='{{if eq .TabName "activity"}}active {{end}}item' href="{{.ContextUser.HomeLink}}?tab=activity">
- {{svg "octicon-rss"}} {{.locale.Tr "user.activity"}}
- </a>
- {{if not .DisableStars}}
- <a class='{{if eq .TabName "stars"}}active {{end}}item' href="{{.ContextUser.HomeLink}}?tab=stars">
- {{svg "octicon-star"}} {{.locale.Tr "user.starred"}}
- {{if .ContextUser.NumStars}}
- <div class="ui small label">{{.ContextUser.NumStars}}</div>
- {{end}}
- </a>
- {{else}}
- <a class='{{if eq .TabName "watching"}}active {{end}}item' href="{{.ContextUser.HomeLink}}?tab=watching">
- {{svg "octicon-eye"}} {{.locale.Tr "user.watched"}}
- </a>
- {{end}}
+ {{template "user/overview/header" .}}
</div>
{{if eq .TabName "activity"}}
@@ -177,10 +144,12 @@
{{template "repo/user_cards" .}}
{{else if eq .TabName "followers"}}
{{template "repo/user_cards" .}}
- {{else}}
+ {{else if or (eq .TabName "repositories") (not .ProfileReadme)}}
{{template "explore/repo_search" .}}
{{template "explore/repo_list" .}}
{{template "base/paginate" .}}
+ {{else if .ProfileReadme}}
+ <div id="readme_profile" class="render-content markup"> {{$.ProfileReadme|Str2html}} </div>
{{end}}
</div>
</div>
diff --git a/web_src/css/user.css b/web_src/css/user.css
index cdf2956565..0a8b49b038 100644
--- a/web_src/css/user.css
+++ b/web_src/css/user.css
@@ -140,6 +140,13 @@
border: none;
}
+#readme_profile {
+ padding: 10px;
+ border-radius: 0.28571429rem;
+ background: var(--color-card);
+ border: 1px solid var(--color-secondary);
+}
+
#notification_table tr {
cursor: default;
}