Added Public/Private Badges & repos Settings links
release-nightly / nightly-binary (push) Has been cancelled
release-nightly / nightly-container (push) Has been cancelled

This commit is contained in:
2026-04-16 01:19:40 +00:00
parent db1e8b4021
commit 4b334df6d4
6 changed files with 482 additions and 15 deletions
+358
View File
@@ -0,0 +1,358 @@
.
./types.d.ts
./docker
./docker/manifest.rootless.tmpl
./docker/root
./docker/manifest.tmpl
./docker/README.md
./docker/rootless
./BSDmakefile
./tests
./tests/integration
./tests/gitea-lfs-meta
./tests/mysql.ini.tmpl
./tests/e2e
./tests/testdata
./tests/fuzz
./tests/test_utils.go
./tests/sqlite.ini.tmpl
./tests/gitea-repositories-meta
./tests/pgsql.ini.tmpl
./tests/mssql.ini.tmpl
./eslint.json.config.ts
./LICENSE
./models
./models/repo.go
./models/avatars
./models/system
./models/auth
./models/migrations
./models/pull
./models/main_test.go
./models/fixtures
./models/asymkey
./models/packages
./models/unittest
./models/admin
./models/repo
./models/activities
./models/unit
./models/db
./models/dbfs
./models/shared
./models/webhook
./models/secret
./models/perm
./models/user
./models/renderhelper
./models/actions
./models/git
./models/organization
./models/issues
./models/repo_test.go
./models/project
./eslint.config.ts
./flake.lock
./tools
./tools/generate-svg-vscode-extensions.json
./tools/test-e2e.sh
./tools/code-batch-process.go
./tools/gocovmerge.go
./tools/lint-templates-svg.ts
./tools/generate-images.ts
./tools/codeformat
./tools/generate-svg.ts
./tools/test-echo.go
./tools/watch.sh
./vitest.config.ts
./CHANGELOG.md
./+x
./CODE_OF_CONDUCT.md
./CLAUDE.md
./README.zh-tw.md
./web_src
./web_src/svg
./web_src/fomantic
./web_src/js
./web_src/css
./CHANGELOG-archived.md
./custom
./custom/conf
./contrib
./contrib/systemd
./contrib/init
./contrib/update_dependencies.sh
./contrib/fhs-compliant-script
./contrib/launchd
./contrib/backport
./contrib/README
./contrib/legal
./contrib/supervisor
./contrib/options
./contrib/upgrade.sh
./contrib/ide
./contrib/gitea-monitoring-mixin
./templates
./templates/package
./templates/post-install.tmpl
./templates/status
./templates/devtest
./templates/projects
./templates/base
./templates/org
./templates/swagger
./templates/custom
./templates/admin
./templates/repo
./templates/shared
./templates/webhook
./templates/api
./templates/home.tmpl
./templates/install.tmpl
./templates/user
./templates/explore
./templates/mail
./update-gitea.sh
./flake.nix
./DCO
./MAINTAINERS
./routers
./routers/common
./routers/install
./routers/web
./routers/private
./routers/init.go
./routers/api
./routers/utils
./pnpm
./package.json
./snap
./snap/snapcraft.yaml
./services
./services/uinotification
./services/convert
./services/secrets
./services/wiki
./services/auth
./services/migrations
./services/pull
./services/projects
./services/repository
./services/markup
./services/oauth2_provider
./services/asymkey
./services/org
./services/task
./services/packages
./services/mailer
./services/forms
./services/issue
./services/webtheme
./services/attachment
./services/mirror
./services/versioned_migration
./services/agit
./services/context
./services/release
./services/doctor
./services/gitdiff
./services/webhook
./services/automerge
./services/contexttest
./services/cron
./services/user
./services/automergequeue
./services/feed
./services/actions
./services/git
./services/lfs
./services/notify
./services/indexer
./services/externalaccount
./go.mod
./assets
./assets/misspellings.csv
./assets/logo.svg
./assets/emoji.json
./assets/go-licenses.json
./assets/favicon.svg
./smart-build.sh
./Dockerfile.rootless
./build
./build/generate-go-licenses.go
./build/update-locales.sh
./build/generate-emoji.go
./build/generate-bindata.go
./build/generate-gitignores.go
./build/test-env-check.sh
./build/test-env-prepare.sh
./pyproject.toml
./updates.config.ts
./tsconfig.json
./pnpm-lock.yaml
./crowdin.yml
./SECURITY.md
./options
./options/locale
./options/gitignore
./options/fileicon
./options/label
./options/license
./options/readme
./docs
./docs/guideline-frontend.md
./docs/release-management.md
./docs/guideline-backend.md
./docs/community-governance.md
./playwright.config.ts
./cmd
./cmd/manager_logging.go
./cmd/admin_auth_ldap_test.go
./cmd/web_acme.go
./cmd/admin_user_delete.go
./cmd/admin_user_must_change_password_test.go
./cmd/admin_user_create.go
./cmd/admin_regenerate.go
./cmd/generate.go
./cmd/admin_auth.go
./cmd/dump.go
./cmd/admin_user_must_change_password.go
./cmd/doctor_test.go
./cmd/migrate.go
./cmd/admin_auth_oauth.go
./cmd/main_test.go
./cmd/actions.go
./cmd/cmd_test.go
./cmd/cert_test.go
./cmd/migrate_storage_test.go
./cmd/web_graceful.go
./cmd/doctor.go
./cmd/admin_user_delete_test.go
./cmd/embedded.go
./cmd/manager.go
./cmd/config.go
./cmd/admin_user_change_password.go
./cmd/cert.go
./cmd/hook_test.go
./cmd/web.go
./cmd/hook.go
./cmd/admin_auth_ldap.go
./cmd/admin_user_list.go
./cmd/admin_user_change_password_test.go
./cmd/admin_auth_smtp_test.go
./cmd/web_https.go
./cmd/docs.go
./cmd/admin_user_create_test.go
./cmd/migrate_storage.go
./cmd/admin_auth_oauth_test.go
./cmd/serv.go
./cmd/admin_user_generate_access_token.go
./cmd/admin.go
./cmd/config_test.go
./cmd/doctor_convert.go
./cmd/main.go
./cmd/dump_repo.go
./cmd/keys.go
./cmd/admin_user.go
./cmd/admin_auth_smtp.go
./cmd/restore_repo.go
./cmd/mailer.go
./cmd/cmd.go
./AGENTS.md
./README.zh-cn.md
./Dockerfile
./tailwind.config.ts
./Makefile
./README.md
./main.go
./go.sum
./uv.lock
./stylelint.config.js
./CONTRIBUTING.md
./modules
./modules/reqctx
./modules/public
./modules/references
./modules/httplib
./modules/hcaptcha
./modules/generate
./modules/tailmsg
./modules/turnstile
./modules/system
./modules/badge
./modules/eventsource
./modules/htmlutil
./modules/setting
./modules/fileicon
./modules/auth
./modules/migration
./modules/svg
./modules/repository
./modules/markup
./modules/typesniffer
./modules/test
./modules/web
./modules/pprof
./modules/validation
./modules/base
./modules/tempdir
./modules/zstd
./modules/gitrepo
./modules/packages
./modules/testlogger
./modules/process
./modules/templates
./modules/label
./modules/issue
./modules/dump
./modules/metrics
./modules/assetfs
./modules/nosql
./modules/avatar
./modules/updatechecker
./modules/private
./modules/cache
./modules/regexplru
./modules/gtprof
./modules/log
./modules/commitstatus
./modules/session
./modules/highlight
./modules/csv
./modules/proxy
./modules/queue
./modules/uri
./modules/httpcache
./modules/lfstransfer
./modules/options
./modules/webhook
./modules/secret
./modules/json
./modules/globallock
./modules/emoji
./modules/charset
./modules/recaptcha
./modules/user
./modules/paginator
./modules/proxyprotocol
./modules/actions
./modules/optional
./modules/structs
./modules/ssh
./modules/timeutil
./modules/glob
./modules/git
./modules/lfs
./modules/mcaptcha
./modules/util
./modules/sitemap
./modules/graceful
./modules/storage
./modules/cachegroup
./modules/hostmatcher
./modules/container
./modules/translation
./modules/indexer
./modules/analyze
./vite.config.ts
./main_timezones.go
+62 -6
View File
@@ -1,6 +1,62 @@
# Generăm o listă cu structura relevantă (fără folderele inutile) # Gitea Codex Context
find . -maxdepth 2 -not -path '*/.*' \
-not -path './node_modules*' \ Acest fisier este memoria persistenta Codex pentru acest proiect.
-not -path './public*' \ Istoric complet al modificarilor: vezi `./.codex-history`.
-not -path './dist*' \ Baza structurala folosita pentru acest context: `./.ai-structure.md`.
-not -path './data*' > .ai-structure.txt
## Arhitectura generala
- Entry point-ul principal este `main.go`, care seteaza versiunea aplicatiei in `setting.AppVer` si porneste comenzile din `cmd/`.
- Pornirea serverului web trece prin `cmd/web.go`, iar initializarea globala a aplicatiei instalate se face in `routers/init.go` prin `InitWebInstalled()` si expunerea rutelor prin `NormalRoutes()`.
- Rutele web sunt centralizate in `routers/web/web.go`, in special in `Routes()` si `registerWebRoutes(...)`.
- Rutele API sunt montate din `routers/init.go`: `/api/v1` pentru API public, `/api/internal` pentru rute private, plus zone separate pentru Packages si Actions atunci cand sunt activate.
- Organizarea pe domenii pentru routing este clara: `routers/web/repo/`, `routers/web/org/`, `routers/web/user/`, `routers/web/admin/`, `routers/web/auth/`, respectiv `routers/api/v1/` si celelalte subtree-uri API.
- Modelele de date sunt in `models/`, grupate pe domenii. Zone importante: `models/user/`, `models/repo/`, `models/issues/`, `models/auth/`, `models/organization/`, `models/packages/`, `models/project/`, `models/webhook/`, `models/actions/`.
- Persistenta si infrastructura de baza pentru DB sunt in `models/db/`, iar migrarile in `models/migrations/`.
- Serviciile de business logic sunt in `services/`, cu exemple relevante in `services/auth/`, `services/user/`, `services/repository/`, `services/pull/`, `services/mailer/`, `services/indexer/`, `services/webhook/`, `services/packages/`, `services/actions/`.
- `services/context/` leaga request-ul HTTP de sesiune, user, template data si middleware-ul specific Gitea.
- UI-ul server-side este randat din `templates/`, iar frontend-ul modern si codul browser-side sunt in `web_src/`.
## Fluxul de autentificare
- Rutele de autentificare sunt definite in principal in `routers/web/web.go`, sub grupurile `/user`, `/login/oauth` si subgrupurile aferente pentru 2FA, WebAuthn, OpenID si OAuth2.
- Fisierele principale din `routers/web/auth/` sunt:
- `routers/web/auth/auth.go`: login clasic, signup, auto-login din remember cookie, redirect dupa autentificare si orchestration-ul de baza pentru paginile de auth.
- `routers/web/auth/password.go`: forgot password, reset password si forced password change.
- `routers/web/auth/2fa.go`: TOTP si scratch codes pentru pasul secundar de autentificare.
- `routers/web/auth/webauthn.go`: autentificare WebAuthn si passkeys.
- `routers/web/auth/oauth.go`: start si callback pentru provideri OAuth2/OpenID Connect, link-account si auto-registration.
- `routers/web/auth/oauth_signin_sync.go`: sincronizarea datelor utilizatorului dupa autentificare OAuth2.
- `routers/web/auth/oauth2_provider.go`: endpoint-urile providerului OAuth2/OIDC pe care le expune Gitea.
- `routers/web/auth/openid.go`: fluxul OpenID pentru sign-in, connect si register.
- `routers/web/auth/linkaccount.go`: asocierea unui cont extern cu un cont local.
- Template-urile UI pentru auth sunt in `templates/user/auth/`.
- Modelele si serviciile care sustin acest flux sunt in principal in `models/auth/`, `services/auth/`, `services/oauth2_provider/` si `services/externalaccount/`.
## Tehnologii cheie
- Backend principal: Go, confirmat prin `go.mod` si majoritatea fisierelor din `cmd/`, `routers/`, `models/`, `services/` si `modules/`.
- Templating server-side: Go templates `.tmpl`, confirmate in `templates/`.
- Frontend principal: TypeScript, confirmat in `web_src/js/` si in fisierele de configurare precum `vite.config.ts`, `vitest.config.ts`, `tailwind.config.ts` si `eslint.config.ts`.
- Componente Vue exista in repo, confirmate de fisiere `.vue` si de `@vitejs/plugin-vue` din `package.json`.
- Stilizare: CSS in `web_src/css/`, plus Tailwind CSS si Fomantic UI.
- Testare si lint frontend: Vitest, Playwright, ESLint si Stylelint.
- Tooling suplimentar confirmat in structura repo: shell scripts, YAML, Dockerfile si Nix.
- Dependintele si resursele statice nu au fost analizate ca obiectiv functional, conform cerintei.
## Puncte de extensie
- Pentru o ruta web noua: adauga handler-ul in subtree-ul potrivit din `routers/web/`, apoi inregistreaza ruta in `routers/web/web.go` in `registerWebRoutes(...)`.
- Pentru o ruta API noua: extinde zona relevanta din `routers/api/v1/` sau din alt subtree API deja folosit si monteaza ruta prin entrypoint-urile din `routers/init.go`.
- Pentru logica noua de business: adauga orchestration in `services/` si accesul la date in `models/`, pastrand handler-ele din `routers/` relativ subtiri.
- Pentru un tab nou in meniul principal global: editeaza `templates/base/head_navbar.tmpl`.
- Pentru linkuri globale suplimentare fara a modifica toata structura standard, exista hook-ul template `custom/extra_links` in `templates/base/head_navbar.tmpl`.
- Pentru un tab nou in meniul unui repository: editeaza `templates/repo/header.tmpl`.
- Pentru taburi custom de repo fara rescrierea structurii standard, exista hook-ul `custom/extra_tabs` in `templates/repo/header.tmpl`.
- Pentru submenu-uri din zona repo activity sau sumar repo: verifica `templates/repo/navbar.tmpl` si `templates/repo/sub_menu.tmpl`.
- Pentru zonele de setari user, org sau admin, punctele uzuale sunt template-urile din `templates/user/settings/`, `templates/org/settings/`, `templates/admin/` si rutele aferente din `routers/web/user/`, `routers/web/org/`, `routers/web/admin/`.
## Observatii utile
- Versiunea implicita a aplicatiei in build-ul din sursa curenta este `development`, definita in `main.go` si copiata in `setting.AppVer`.
- Structura proiectului separa clar entrypoint-urile, routing-ul, modelele, serviciile si template-urile, ceea ce face extinderile viitoare predictibile.
+30
View File
@@ -0,0 +1,30 @@
ID Modification[date-time] - Version - Type: Modified/Added/Fixed - Summary:
CTX-2026-04-15T23:22:52Z - development - Type: Added/Modified - Created the persistent Codex project memory for this Gitea workspace.
- 1 - I added `.codex-history` as the permanent English change log requested for this project.
- 2 - I added `.codex-context.md` as the permanent repository context file based on the provided `.ai-structure.md` and the routing/model/service structure already identified earlier.
- 3 - I added a concise architecture map that points to the main entrypoints, route registration layers, data model directories, migration folders, template locations, and service-layer modules.
- 4 - I added a focused authentication overview that identifies the primary files in `routers/web/auth/` and explains the role of each major auth flow component.
- 5 - I added a confirmed technology summary covering Go, Go templates, TypeScript, Vue, Vite, Tailwind CSS, Fomantic UI, Vitest, Playwright, ESLint, and Stylelint.
- 6 - I added practical extension guidance for introducing a new menu tab, a new repository tab, a new web route, or a new API route.
- 7 - I modified `.codex-context.md` to replace the previous placeholder shell snippet with repository-specific documentation that can serve as long-term project memory.
- 8 - I added an explicit reference from `.codex-context.md` to `.codex-history` so the project context always points to the ongoing modification log.
- 9 - I corrected the recorded application version to `development`, matching the current source build value set from `main.go` into `setting.AppVer`.
CTX-2026-04-15T23:46:18Z - development - Type: Modified - Added explicit repository visibility badges to match the requested GitHub-style presentation more closely.
- 1 - I modified `templates/repo/header.tmpl` so the repository page header now always shows a visibility badge on the right side: `Private`, `Internal`, or `Public`.
- 2 - I modified `templates/shared/repo/list.tmpl` so each repository entry in shared repository lists also shows an explicit visibility badge for `Private`, `Internal`, or `Public`.
- 3 - I added the `Public` label for repositories that previously had no explicit visibility badge, while preserving the existing archived, template, and sha256 labels.
- 4 - I reused existing translation keys and existing badge styling so the change stays visually consistent with the current Gitea UI.
CTX-2026-04-16T00:31:29Z - development - Type: Modified - Refined repository visibility badges with semantic colors, owner-aware navigation, and broader coverage in repository settings views.
- 1 - I modified `templates/shared/repo/list.tmpl` so `Public` now uses a basic green badge and `Private` now uses a basic red badge, while `Internal` remains neutral.
- 2 - I modified `templates/repo/header.tmpl` so the repository header uses the same color-coded visibility badges and keeps the mobile icon behavior unchanged.
- 3 - I added owner-aware navigation for the `Public` and `Private` badges so they link to the repository `Settings` page only when the signed-in user is the repository owner.
- 4 - I modified `templates/user/settings/repos.tmpl` so the same visibility badge now appears next to repository names in `/user/settings/repos`, in both list variants rendered by that page.
- 5 - I preserved the existing archived, template, fork, mirror, and object-format indicators so only the requested visibility presentation changed.
CTX-2026-04-16T00:45:08Z - development - Type: Fixed - Corrected a template rendering error in /user/settings/repos caused by dereferencing a missing Owner object.
- 1 - I fixed `templates/user/settings/repos.tmpl` so the internal-visibility check now guards against a nil `Owner` before accessing `Owner.Visibility`.
- 2 - I applied the null-safe visibility guard in both repository list variants rendered by `/user/settings/repos`.
- 3 - I preserved the new green/red visibility badge styling and owner-aware settings links while removing the nil-pointer render failure.
+8 -5
View File
@@ -11,19 +11,22 @@
<a class="muted tw-font-normal" href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a>/<a class="muted" href="{{$.RepoLink}}">{{.Name}}</a> <a class="muted tw-font-normal" href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a>/<a class="muted" href="{{$.RepoLink}}">{{.Name}}</a>
</div> </div>
</div> </div>
{{$settingsLink := printf "%s/settings" $.RepoLink}}
{{$canAccessSettings := and $.IsSigned (eq $.SignedUser.ID .OwnerID)}}
<div class="flex-item-trailing"> <div class="flex-item-trailing">
{{if .IsArchived}} {{if .IsArchived}}
<span class="ui basic label not-mobile">{{ctx.Locale.Tr "repo.desc.archived"}}</span> <span class="ui basic label not-mobile">{{ctx.Locale.Tr "repo.desc.archived"}}</span>
<div class="repo-icon only-mobile" data-tooltip-content="{{ctx.Locale.Tr "repo.desc.archived"}}">{{svg "octicon-archive" 18}}</div> <div class="repo-icon only-mobile" data-tooltip-content="{{ctx.Locale.Tr "repo.desc.archived"}}">{{svg "octicon-archive" 18}}</div>
{{end}} {{end}}
{{if .IsPrivate}} {{if .IsPrivate}}
<span class="ui basic label not-mobile">{{ctx.Locale.Tr "repo.desc.private"}}</span> {{if $canAccessSettings}}<a class="ui basic red label not-mobile" href="{{$settingsLink}}">{{ctx.Locale.Tr "repo.desc.private"}}</a>{{else}}<span class="ui basic red label not-mobile">{{ctx.Locale.Tr "repo.desc.private"}}</span>{{end}}
<div class="repo-icon only-mobile" data-tooltip-content="{{ctx.Locale.Tr "repo.desc.private"}}">{{svg "octicon-lock" 18}}</div> <div class="repo-icon only-mobile" data-tooltip-content="{{ctx.Locale.Tr "repo.desc.private"}}">{{svg "octicon-lock" 18}}</div>
{{else if .Owner.Visibility.IsPrivate}}
<span class="ui basic label not-mobile">{{ctx.Locale.Tr "repo.desc.internal"}}</span>
<div class="repo-icon only-mobile" data-tooltip-content="{{ctx.Locale.Tr "repo.desc.internal"}}">{{svg "octicon-shield-lock" 18}}</div>
{{else}} {{else}}
{{if .Owner.Visibility.IsPrivate}} {{if $canAccessSettings}}<a class="ui basic green label not-mobile" href="{{$settingsLink}}">{{ctx.Locale.Tr "settings.visibility.public"}}</a>{{else}}<span class="ui basic green label not-mobile">{{ctx.Locale.Tr "settings.visibility.public"}}</span>{{end}}
<span class="ui basic label not-mobile">{{ctx.Locale.Tr "repo.desc.internal"}}</span> <div class="repo-icon only-mobile" data-tooltip-content="{{ctx.Locale.Tr "settings.visibility.public"}}">{{svg "octicon-globe" 18}}</div>
<div class="repo-icon only-mobile" data-tooltip-content="{{ctx.Locale.Tr "repo.desc.internal"}}">{{svg "octicon-shield-lock" 18}}</div>
{{end}}
{{end}} {{end}}
{{if $.Permission.HasAnyUnitPublicAccess}} {{if $.Permission.HasAnyUnitPublicAccess}}
<span class="ui basic orange label">{{ctx.Locale.Tr "repo.desc.public_access"}}</span> <span class="ui basic orange label">{{ctx.Locale.Tr "repo.desc.public_access"}}</span>
+6 -4
View File
@@ -15,16 +15,18 @@
<a class="tw-text-primary name" href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a>/ <a class="tw-text-primary name" href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a>/
{{end}} {{end}}
<a class="tw-text-primary name" href="{{.Link}}">{{.Name}}</a> <a class="tw-text-primary name" href="{{.Link}}">{{.Name}}</a>
{{$settingsLink := printf "%s/settings" .Link}}
{{$canAccessSettings := and $.IsSigned (eq $.SignedUser.ID .OwnerID)}}
<span class="label-list"> <span class="label-list">
{{if .IsArchived}} {{if .IsArchived}}
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.archived"}}</span> <span class="ui basic label">{{ctx.Locale.Tr "repo.desc.archived"}}</span>
{{end}} {{end}}
{{if .IsPrivate}} {{if .IsPrivate}}
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.private"}}</span> {{if $canAccessSettings}}<a class="ui basic red label" href="{{$settingsLink}}">{{ctx.Locale.Tr "repo.desc.private"}}</a>{{else}}<span class="ui basic red label">{{ctx.Locale.Tr "repo.desc.private"}}</span>{{end}}
{{else if .Owner.Visibility.IsPrivate}}
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.internal"}}</span>
{{else}} {{else}}
{{if .Owner.Visibility.IsPrivate}} {{if $canAccessSettings}}<a class="ui basic green label" href="{{$settingsLink}}">{{ctx.Locale.Tr "settings.visibility.public"}}</a>{{else}}<span class="ui basic green label">{{ctx.Locale.Tr "settings.visibility.public"}}</span>{{end}}
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.internal"}}</span>
{{end}}
{{end}} {{end}}
{{if .IsTemplate}} {{if .IsTemplate}}
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.template"}}</span> <span class="ui basic label">{{ctx.Locale.Tr "repo.desc.template"}}</span>
+18
View File
@@ -24,6 +24,15 @@
<span class="icon">{{svg "octicon-repo"}}</span> <span class="icon">{{svg "octicon-repo"}}</span>
{{end}} {{end}}
<a class="muted name" href="{{$repo.Link}}">{{$repo.OwnerName}}/{{$repo.Name}}</a> <a class="muted name" href="{{$repo.Link}}">{{$repo.OwnerName}}/{{$repo.Name}}</a>
{{$settingsLink := printf "%s/settings" $repo.Link}}
{{$canAccessSettings := and $.IsSigned (eq $.SignedUser.ID $repo.OwnerID)}}
{{if $repo.IsPrivate}}
{{if $canAccessSettings}}<a class="ui basic red label" href="{{$settingsLink}}">{{ctx.Locale.Tr "repo.desc.private"}}</a>{{else}}<span class="ui basic red label">{{ctx.Locale.Tr "repo.desc.private"}}</span>{{end}}
{{else if and $repo.Owner $repo.Owner.Visibility.IsPrivate}}
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.internal"}}</span>
{{else}}
{{if $canAccessSettings}}<a class="ui basic green label" href="{{$settingsLink}}">{{ctx.Locale.Tr "settings.visibility.public"}}</a>{{else}}<span class="ui basic green label">{{ctx.Locale.Tr "settings.visibility.public"}}</span>{{end}}
{{end}}
<span class="tw-text-text-light-3" {{if not (eq $repo.Size 0)}} data-tooltip-content="{{$repo.SizeDetailsString}}"{{end}}>{{FileSize $repo.Size}}</span> <span class="tw-text-text-light-3" {{if not (eq $repo.Size 0)}} data-tooltip-content="{{$repo.SizeDetailsString}}"{{end}}>{{FileSize $repo.Size}}</span>
{{if $repo.IsFork}} {{if $repo.IsFork}}
{{ctx.Locale.Tr "repo.forked_from"}} {{ctx.Locale.Tr "repo.forked_from"}}
@@ -95,6 +104,15 @@
{{svg "octicon-repo"}} {{svg "octicon-repo"}}
{{end}} {{end}}
<a class="name" href="{{.Link}}">{{.OwnerName}}/{{.Name}}</a> <a class="name" href="{{.Link}}">{{.OwnerName}}/{{.Name}}</a>
{{$settingsLink := printf "%s/settings" .Link}}
{{$canAccessSettings := and $.IsSigned (eq $.SignedUser.ID .OwnerID)}}
{{if .IsPrivate}}
{{if $canAccessSettings}}<a class="ui basic red label" href="{{$settingsLink}}">{{ctx.Locale.Tr "repo.desc.private"}}</a>{{else}}<span class="ui basic red label">{{ctx.Locale.Tr "repo.desc.private"}}</span>{{end}}
{{else if and .Owner .Owner.Visibility.IsPrivate}}
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.internal"}}</span>
{{else}}
{{if $canAccessSettings}}<a class="ui basic green label" href="{{$settingsLink}}">{{ctx.Locale.Tr "settings.visibility.public"}}</a>{{else}}<span class="ui basic green label">{{ctx.Locale.Tr "settings.visibility.public"}}</span>{{end}}
{{end}}
<span>{{FileSize .Size}}</span> <span>{{FileSize .Size}}</span>
{{if .IsFork}} {{if .IsFork}}
{{ctx.Locale.Tr "repo.forked_from"}} {{ctx.Locale.Tr "repo.forked_from"}}