From 5023238088b124f83aca9b8c44701f7655c1bab4 Mon Sep 17 00:00:00 2001
From: yp05327 <576951401@qq.com>
Date: Sat, 29 Mar 2025 22:24:27 +0900
Subject: [PATCH] Add descriptions for private repo public access settings and
 improve the UI (#34057)

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
---
 options/locale/locale_en-US.ini            |  5 ++
 templates/repo/settings/public_access.tmpl | 82 +++++++++++++---------
 2 files changed, 55 insertions(+), 32 deletions(-)

diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 252044da16..8ce469359c 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -2138,6 +2138,11 @@ settings = Settings
 settings.desc = Settings is where you can manage the settings for the repository
 settings.options = Repository
 settings.public_access = Public Access
+settings.public_access_desc = Configure public visitor's access permissions to override the defaults of this repository.
+settings.public_access.docs.not_set = Not Set: no extra public access permission. The visitor's permission follows the repository's visibility and member permissions.
+settings.public_access.docs.anonymous_read = Anonymous Read: users who are not logged in can access the unit with read permission.
+settings.public_access.docs.everyone_read = Everyone Read: all logged-in users can access the unit with read permission. Read permission of issues/pull-requests units also means users can create new issues/pull-requests.
+settings.public_access.docs.everyone_write = Everyone Write: all logged-in users have write permission to the unit. Only Wiki unit supports this permission.
 settings.collaboration = Collaborators
 settings.collaboration.admin = Administrator
 settings.collaboration.write = Write
diff --git a/templates/repo/settings/public_access.tmpl b/templates/repo/settings/public_access.tmpl
index 5c80796931..c1c198bcce 100644
--- a/templates/repo/settings/public_access.tmpl
+++ b/templates/repo/settings/public_access.tmpl
@@ -1,36 +1,54 @@
 {{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings")}}
 <div class="repo-setting-content">
-	{{$paNotSet := "not-set"}}
-	{{$paAnonymousRead := "anonymous-read"}}
-	{{$paEveryoneRead := "everyone-read"}}
-	{{$paEveryoneWrite := "everyone-write"}}
-	<form class="ui form" method="post">
-		{{.CsrfTokenHtml}}
-		<table class="ui table unstackable tw-my-2">
-			<tr>
-				<th></th>
-				<th>{{ctx.Locale.Tr "settings.permission_not_set"}}</th>
-				<th>{{ctx.Locale.Tr "settings.permission_anonymous_read"}}</th>
-				<th>{{ctx.Locale.Tr "settings.permission_everyone_read"}}</th>
-				<th>{{ctx.Locale.Tr "settings.permission_everyone_write"}}</th>
-			</tr>
-			{{range $ua := .RepoUnitPublicAccesses}}
-				<tr>
-					<td>{{$ua.DisplayName}}</td>
-					<td class="tw-text-center"><label><input type="radio" name="{{$ua.FormKey}}" value="{{$paNotSet}}" {{Iif (eq $paNotSet $ua.UnitPublicAccess) "checked"}}></label></td>
-					<td class="tw-text-center"><label><input type="radio" name="{{$ua.FormKey}}" value="{{$paAnonymousRead}}" {{Iif (eq $paAnonymousRead $ua.UnitPublicAccess) "checked"}}></label></td>
-					<td class="tw-text-center"><label><input type="radio" name="{{$ua.FormKey}}" value="{{$paEveryoneRead}}" {{Iif (eq $paEveryoneRead $ua.UnitPublicAccess) "checked"}}></label></td>
-					<td class="tw-text-center">
-						{{if SliceUtils.Contains $ua.PublicAccessTypes $paEveryoneWrite}}
-							<label><input type="radio" name="{{$ua.FormKey}}" value="{{$paEveryoneWrite}}" {{Iif (eq $paEveryoneWrite $ua.UnitPublicAccess) "checked"}}></label>
-						{{else}}
-							-
-						{{end}}
-					</td>
-				</tr>
-			{{end}}
-		</table>
-		<button class="ui primary button {{if .GlobalForcePrivate}}disabled{{end}}">{{ctx.Locale.Tr "repo.settings.update_settings"}}</button>
-	</form>
+	<h4 class="ui top attached header">
+		{{ctx.Locale.Tr "repo.settings.public_access"}}
+	</h4>
+	<div class="ui attached segment">
+		<p>
+			{{ctx.Locale.Tr "repo.settings.public_access_desc"}}
+		</p>
+		{{$paNotSet := "not-set"}}
+		{{$paAnonymousRead := "anonymous-read"}}
+		{{$paEveryoneRead := "everyone-read"}}
+		{{$paEveryoneWrite := "everyone-write"}}
+		<form class="ui form" method="post">
+			{{.CsrfTokenHtml}}
+			<table class="ui table unstackable tw-my-2">
+				<thead>
+					<tr>
+						<th>{{ctx.Locale.Tr "units.unit"}}</th>
+						<th class="tw-text-center">{{ctx.Locale.Tr "settings.permission_not_set"}}</th>
+						<th class="tw-text-center">{{ctx.Locale.Tr "settings.permission_anonymous_read"}}</th>
+						<th class="tw-text-center">{{ctx.Locale.Tr "settings.permission_everyone_read"}}</th>
+						<th class="tw-text-center">{{ctx.Locale.Tr "settings.permission_everyone_write"}}</th>
+					</tr>
+				</thead>
+				<tbody>
+				{{range $ua := .RepoUnitPublicAccesses}}
+					<tr>
+						<td>{{$ua.DisplayName}}</td>
+						<td class="tw-text-center"><label><input type="radio" name="{{$ua.FormKey}}" value="{{$paNotSet}}" {{Iif (eq $paNotSet $ua.UnitPublicAccess) "checked"}}></label></td>
+						<td class="tw-text-center"><label><input type="radio" name="{{$ua.FormKey}}" value="{{$paAnonymousRead}}" {{Iif (eq $paAnonymousRead $ua.UnitPublicAccess) "checked"}}></label></td>
+						<td class="tw-text-center"><label><input type="radio" name="{{$ua.FormKey}}" value="{{$paEveryoneRead}}" {{Iif (eq $paEveryoneRead $ua.UnitPublicAccess) "checked"}}></label></td>
+						<td class="tw-text-center">
+							{{if SliceUtils.Contains $ua.PublicAccessTypes $paEveryoneWrite}}
+								<label><input type="radio" name="{{$ua.FormKey}}" value="{{$paEveryoneWrite}}" {{Iif (eq $paEveryoneWrite $ua.UnitPublicAccess) "checked"}}></label>
+							{{else}}
+								-
+							{{end}}
+						</td>
+					</tr>
+				{{end}}
+				</tbody>
+			</table>
+			<ul class="tw-my-3 tw-pl-5 tw-flex tw-flex-col tw-gap-3">
+				<li>{{ctx.Locale.Tr "repo.settings.public_access.docs.not_set"}}</li>
+				<li>{{ctx.Locale.Tr "repo.settings.public_access.docs.anonymous_read"}}</li>
+				<li>{{ctx.Locale.Tr "repo.settings.public_access.docs.everyone_read"}}</li>
+				<li>{{ctx.Locale.Tr "repo.settings.public_access.docs.everyone_write"}}</li>
+			</ul>
+			<button class="ui primary button {{if .GlobalForcePrivate}}disabled{{end}}">{{ctx.Locale.Tr "repo.settings.update_settings"}}</button>
+		</form>
+	</div>
 </div>
 {{template "repo/settings/layout_footer" .}}