From b406025aae8c050b029a9ad2497a75436feb57e4 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Wed, 24 Apr 2024 20:41:35 +0200
Subject: [PATCH 01/14] Move branch_selection to sidebar folder

---
 templates/repo/issue/new_form.tmpl                              | 2 +-
 templates/repo/issue/view_content/sidebar.tmpl                  | 2 +-
 .../issue/{ => view_content/sidebar}/branch_selector_field.tmpl | 0
 3 files changed, 2 insertions(+), 2 deletions(-)
 rename templates/repo/issue/{ => view_content/sidebar}/branch_selector_field.tmpl (100%)

diff --git a/templates/repo/issue/new_form.tmpl b/templates/repo/issue/new_form.tmpl
index 88a6c39e52..465cb44f6f 100644
--- a/templates/repo/issue/new_form.tmpl
+++ b/templates/repo/issue/new_form.tmpl
@@ -47,7 +47,7 @@
 	</div>
 
 	<div class="issue-content-right ui segment">
-		{{template "repo/issue/branch_selector_field" .}}
+		{{template "repo/issue/view_content/sidebar/branch_selector_field" .}}
 
 		<input id="label_ids" name="label_ids" type="hidden" value="{{.label_ids}}">
 		{{template "repo/issue/labels/labels_selector_field" .}}
diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index cbea32d303..e8b1b2258f 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -1,5 +1,5 @@
 <div class="issue-content-right ui segment">
-	{{template "repo/issue/branch_selector_field" .}}
+	{{template "repo/issue/view_content/sidebar/branch_selector_field" .}}
 	{{if .Issue.IsPull}}
 		<input id="reviewer_id" name="reviewer_id" type="hidden" value="{{.reviewer_id}}">
 		<div class="ui {{if or (and (not .Reviewers) (not .TeamReviewers)) (not .CanChooseReviewer) .Repository.IsArchived}}disabled{{end}} floating jump select-reviewers-modify dropdown">
diff --git a/templates/repo/issue/branch_selector_field.tmpl b/templates/repo/issue/view_content/sidebar/branch_selector_field.tmpl
similarity index 100%
rename from templates/repo/issue/branch_selector_field.tmpl
rename to templates/repo/issue/view_content/sidebar/branch_selector_field.tmpl

From 66cab785fce8878af2208baf8de45f5dbbc00061 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Wed, 24 Apr 2024 21:06:22 +0200
Subject: [PATCH 02/14] Split PR-only templates

---
 .../repo/issue/view_content/sidebar.tmpl      | 125 +-----------------
 .../view_content/sidebar/pull_review.tmpl     |  45 +++++++
 .../view_content/sidebar/pull_reviewers.tmpl  |  67 ++++++++++
 .../issue/view_content/sidebar/pull_wip.tmpl  |  11 ++
 4 files changed, 125 insertions(+), 123 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/pull_review.tmpl
 create mode 100644 templates/repo/issue/view_content/sidebar/pull_reviewers.tmpl
 create mode 100644 templates/repo/issue/view_content/sidebar/pull_wip.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index e8b1b2258f..37280f69e4 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -1,129 +1,8 @@
 <div class="issue-content-right ui segment">
 	{{template "repo/issue/view_content/sidebar/branch_selector_field" .}}
 	{{if .Issue.IsPull}}
-		<input id="reviewer_id" name="reviewer_id" type="hidden" value="{{.reviewer_id}}">
-		<div class="ui {{if or (and (not .Reviewers) (not .TeamReviewers)) (not .CanChooseReviewer) .Repository.IsArchived}}disabled{{end}} floating jump select-reviewers-modify dropdown">
-			<a class="text tw-flex tw-items-center muted">
-				<strong>{{ctx.Locale.Tr "repo.issues.review.reviewers"}}</strong>
-				{{if and .CanChooseReviewer (not .Repository.IsArchived)}}
-					{{svg "octicon-gear" 16 "tw-ml-1"}}
-				{{end}}
-			</a>
-			<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/request_review">
-				{{if .Reviewers}}
-					<div class="ui icon search input">
-						<i class="icon">{{svg "octicon-search" 16}}</i>
-						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_reviewers"}}">
-					</div>
-				{{end}}
-				{{if .Reviewers}}
-					{{range .Reviewers}}
-						{{if .User}}
-							<a class="{{if not .CanChange}}ui{{end}} item {{if .Checked}}checked{{end}} {{if not .CanChange}}ban-change{{end}}" href="#" data-id="{{.ItemID}}" data-id-selector="#review_request_{{.ItemID}}" {{if not .CanChange}} data-tooltip-content="{{ctx.Locale.Tr "repo.issues.remove_request_review_block"}}"{{end}}>
-								<span class="octicon-check {{if not .Checked}}tw-invisible{{end}}">{{svg "octicon-check"}}</span>
-								<span class="text">
-									{{ctx.AvatarUtils.Avatar .User 28 "tw-mr-2"}}{{template "repo/search_name" .User}}
-								</span>
-							</a>
-						{{end}}
-					{{end}}
-				{{end}}
-				{{if .TeamReviewers}}
-					{{if .Reviewers}}
-						<div class="divider"></div>
-					{{end}}
-					{{range .TeamReviewers}}
-						{{if .Team}}
-							<a class="{{if not .CanChange}}ui{{end}} item {{if .Checked}}checked{{end}} {{if not .CanChange}}ban-change{{end}}" href="#" data-id="{{.ItemID}}" data-id-selector="#review_request_team_{{.Team.ID}}" {{if not .CanChange}} data-tooltip-content="{{ctx.Locale.Tr "repo.issues.remove_request_review_block"}}"{{end}}>
-								<span class="octicon-check {{if not .Checked}}tw-invisible{{end}}">{{svg "octicon-check" 16}}</span>
-								<span class="text">
-									{{svg "octicon-people" 16 "tw-ml-4 tw-mr-1"}}{{$.Issue.Repo.OwnerName}}/{{.Team.Name}}
-								</span>
-							</a>
-						{{end}}
-					{{end}}
-				{{end}}
-			</div>
-		</div>
-
-		<div class="ui assignees list">
-			<span class="no-select item {{if or .OriginalReviews .PullReviewers}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_reviewers"}}</span>
-			<div class="selected">
-				{{range .PullReviewers}}
-					<div class="item tw-flex tw-items-center tw-py-2">
-						<div class="tw-flex tw-items-center tw-flex-1">
-							{{if .User}}
-								<a class="muted sidebar-item-link" href="{{.User.HomeLink}}">{{ctx.AvatarUtils.Avatar .User 20 "tw-mr-2"}}{{.User.GetDisplayName}}</a>
-							{{else if .Team}}
-								<span class="text">{{svg "octicon-people" 20 "tw-mr-2"}}{{$.Issue.Repo.OwnerName}}/{{.Team.Name}}</span>
-							{{end}}
-						</div>
-						<div class="tw-flex tw-items-center tw-gap-2">
-							{{if (and $.Permission.IsAdmin (or (eq .Review.Type 1) (eq .Review.Type 3)) (not $.Issue.IsClosed) (not $.Issue.PullRequest.HasMerged))}}
-								<a href="#" class="ui muted icon tw-flex tw-items-center show-modal" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dismiss_review"}}" data-modal="#dismiss-review-modal-{{.Review.ID}}">
-									{{svg "octicon-x" 20}}
-								</a>
-								<div class="ui small modal" id="dismiss-review-modal-{{.Review.ID}}">
-									<div class="header">
-										{{ctx.Locale.Tr "repo.issues.dismiss_review"}}
-									</div>
-									<div class="content">
-										<div class="ui warning message">
-											{{ctx.Locale.Tr "repo.issues.dismiss_review_warning"}}
-										</div>
-										<form class="ui form dismiss-review-form" id="dismiss-review-{{.Review.ID}}" action="{{$.RepoLink}}/issues/dismiss_review" method="post">
-											{{$.CsrfTokenHtml}}
-											<input type="hidden" name="review_id" value="{{.Review.ID}}">
-											<div class="field">
-												<label for="message">{{ctx.Locale.Tr "action.review_dismissed_reason"}}</label>
-												<input id="message" name="message">
-											</div>
-											<div class="text right actions">
-												<button class="ui cancel button">{{ctx.Locale.Tr "settings.cancel"}}</button>
-												<button class="ui red button" type="submit">{{ctx.Locale.Tr "ok"}}</button>
-											</div>
-										</form>
-									</div>
-								</div>
-							{{end}}
-							{{if .Review.Stale}}
-								<span data-tooltip-content="{{ctx.Locale.Tr "repo.issues.is_stale"}}">
-									{{svg "octicon-hourglass" 16}}
-								</span>
-							{{end}}
-							{{if and .CanChange (or .Checked (and (not $.Issue.IsClosed) (not $.Issue.PullRequest.HasMerged)))}}
-								<a href="#" class="ui muted icon re-request-review{{if .Checked}} checked{{end}}" data-tooltip-content="{{if .Checked}}{{ctx.Locale.Tr "repo.issues.remove_request_review"}}{{else}}{{ctx.Locale.Tr "repo.issues.re_request_review"}}{{end}}" data-issue-id="{{$.Issue.ID}}" data-id="{{.ItemID}}" data-update-url="{{$.RepoLink}}/issues/request_review">{{if .Checked}}{{svg "octicon-trash"}}{{else}}{{svg "octicon-sync"}}{{end}}</a>
-							{{end}}
-							{{svg (printf "octicon-%s" .Review.Type.Icon) 16 (printf "text %s" (.Review.HTMLTypeColorName))}}
-						</div>
-					</div>
-				{{end}}
-				{{range .OriginalReviews}}
-					<div class="item tw-flex tw-items-center tw-py-2">
-						<div class="tw-flex tw-items-center tw-flex-1">
-							<a class="muted" href="{{$.Repository.OriginalURL}}" data-tooltip-content="{{ctx.Locale.Tr "repo.migrated_from_fake" $.Repository.GetOriginalURLHostname}}">
-								{{svg (MigrationIcon $.Repository.GetOriginalURLHostname) 20 "tw-mr-2"}}
-								{{.OriginalAuthor}}
-							</a>
-						</div>
-						<div class="tw-flex tw-items-center tw-gap-2">
-							{{svg (printf "octicon-%s" .Type.Icon) 16 (printf "text %s" (.HTMLTypeColorName))}}
-						</div>
-					</div>
-				{{end}}
-			</div>
-		</div>
-		{{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .HasMerged) (not .Issue.IsClosed)}}
-			<div class="toggle-wip" data-title="{{.Issue.Title}}" data-wip-prefixes="{{JsonUtils.EncodeToString .PullRequestWorkInProgressPrefixes}}" data-update-url="{{.Issue.Link}}/title">
-				<a class="muted">
-					{{if .IsPullWorkInProgress}}
-						{{ctx.Locale.Tr "repo.pulls.ready_for_review"}} {{ctx.Locale.Tr "repo.pulls.remove_prefix" (index .PullRequestWorkInProgressPrefixes 0)}}
-					{{else}}
-						{{ctx.Locale.Tr "repo.pulls.still_in_progress"}} {{ctx.Locale.Tr "repo.pulls.add_prefix" (index .PullRequestWorkInProgressPrefixes 0)}}
-					{{end}}
-				</a>
-			</div>
-		{{end}}
+		{{template "repo/issue/view_content/sidebar/pull_review" .}}
+		{{template "repo/issue/view_content/sidebar/pull_wip" .}}
 		<div class="divider"></div>
 	{{end}}
 
diff --git a/templates/repo/issue/view_content/sidebar/pull_review.tmpl b/templates/repo/issue/view_content/sidebar/pull_review.tmpl
new file mode 100644
index 0000000000..930c2a6392
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/pull_review.tmpl
@@ -0,0 +1,45 @@
+<input id="reviewer_id" name="reviewer_id" type="hidden" value="{{.reviewer_id}}">
+<div class="ui {{if or (and (not .Reviewers) (not .TeamReviewers)) (not .CanChooseReviewer) .Repository.IsArchived}}disabled{{end}} floating jump select-reviewers-modify dropdown">
+	<a class="text tw-flex tw-items-center muted">
+		<strong>{{ctx.Locale.Tr "repo.issues.review.reviewers"}}</strong>
+		{{if and .CanChooseReviewer (not .Repository.IsArchived)}}
+			{{svg "octicon-gear" 16 "tw-ml-1"}}
+		{{end}}
+	</a>
+	<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/request_review">
+		{{if .Reviewers}}
+			<div class="ui icon search input">
+				<i class="icon">{{svg "octicon-search" 16}}</i>
+				<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_reviewers"}}">
+			</div>
+		{{end}}
+		{{if .Reviewers}}
+			{{range .Reviewers}}
+				{{if .User}}
+					<a class="{{if not .CanChange}}ui{{end}} item {{if .Checked}}checked{{end}} {{if not .CanChange}}ban-change{{end}}" href="#" data-id="{{.ItemID}}" data-id-selector="#review_request_{{.ItemID}}" {{if not .CanChange}} data-tooltip-content="{{ctx.Locale.Tr "repo.issues.remove_request_review_block"}}"{{end}}>
+						<span class="octicon-check {{if not .Checked}}tw-invisible{{end}}">{{svg "octicon-check"}}</span>
+						<span class="text">
+							{{ctx.AvatarUtils.Avatar .User 28 "tw-mr-2"}}{{template "repo/search_name" .User}}
+						</span>
+					</a>
+				{{end}}
+			{{end}}
+		{{end}}
+		{{if .TeamReviewers}}
+			{{if .Reviewers}}
+				<div class="divider"></div>
+			{{end}}
+			{{range .TeamReviewers}}
+				{{if .Team}}
+					<a class="{{if not .CanChange}}ui{{end}} item {{if .Checked}}checked{{end}} {{if not .CanChange}}ban-change{{end}}" href="#" data-id="{{.ItemID}}" data-id-selector="#review_request_team_{{.Team.ID}}" {{if not .CanChange}} data-tooltip-content="{{ctx.Locale.Tr "repo.issues.remove_request_review_block"}}"{{end}}>
+						<span class="octicon-check {{if not .Checked}}tw-invisible{{end}}">{{svg "octicon-check" 16}}</span>
+						<span class="text">
+							{{svg "octicon-people" 16 "tw-ml-4 tw-mr-1"}}{{$.Issue.Repo.OwnerName}}/{{.Team.Name}}
+						</span>
+					</a>
+				{{end}}
+			{{end}}
+		{{end}}
+	</div>
+</div>
+{{template "repo/issue/view_content/sidebar/pull_reviewers" .}}
diff --git a/templates/repo/issue/view_content/sidebar/pull_reviewers.tmpl b/templates/repo/issue/view_content/sidebar/pull_reviewers.tmpl
new file mode 100644
index 0000000000..102508fdaf
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/pull_reviewers.tmpl
@@ -0,0 +1,67 @@
+<div class="ui assignees list">
+			<span class="no-select item {{if or .OriginalReviews .PullReviewers}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_reviewers"}}</span>
+			<div class="selected">
+				{{range .PullReviewers}}
+					<div class="item tw-flex tw-items-center tw-py-2">
+						<div class="tw-flex tw-items-center tw-flex-1">
+							{{if .User}}
+								<a class="muted sidebar-item-link" href="{{.User.HomeLink}}">{{ctx.AvatarUtils.Avatar .User 20 "tw-mr-2"}}{{.User.GetDisplayName}}</a>
+							{{else if .Team}}
+								<span class="text">{{svg "octicon-people" 20 "tw-mr-2"}}{{$.Issue.Repo.OwnerName}}/{{.Team.Name}}</span>
+							{{end}}
+						</div>
+						<div class="tw-flex tw-items-center tw-gap-2">
+							{{if (and $.Permission.IsAdmin (or (eq .Review.Type 1) (eq .Review.Type 3)) (not $.Issue.IsClosed) (not $.Issue.PullRequest.HasMerged))}}
+								<a href="#" class="ui muted icon tw-flex tw-items-center show-modal" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dismiss_review"}}" data-modal="#dismiss-review-modal-{{.Review.ID}}">
+									{{svg "octicon-x" 20}}
+								</a>
+								<div class="ui small modal" id="dismiss-review-modal-{{.Review.ID}}">
+									<div class="header">
+										{{ctx.Locale.Tr "repo.issues.dismiss_review"}}
+									</div>
+									<div class="content">
+										<div class="ui warning message">
+											{{ctx.Locale.Tr "repo.issues.dismiss_review_warning"}}
+										</div>
+										<form class="ui form dismiss-review-form" id="dismiss-review-{{.Review.ID}}" action="{{$.RepoLink}}/issues/dismiss_review" method="post">
+											{{$.CsrfTokenHtml}}
+											<input type="hidden" name="review_id" value="{{.Review.ID}}">
+											<div class="field">
+												<label for="message">{{ctx.Locale.Tr "action.review_dismissed_reason"}}</label>
+												<input id="message" name="message">
+											</div>
+											<div class="text right actions">
+												<button class="ui cancel button">{{ctx.Locale.Tr "settings.cancel"}}</button>
+												<button class="ui red button" type="submit">{{ctx.Locale.Tr "ok"}}</button>
+											</div>
+										</form>
+									</div>
+								</div>
+							{{end}}
+							{{if .Review.Stale}}
+								<span data-tooltip-content="{{ctx.Locale.Tr "repo.issues.is_stale"}}">
+									{{svg "octicon-hourglass" 16}}
+								</span>
+							{{end}}
+							{{if and .CanChange (or .Checked (and (not $.Issue.IsClosed) (not $.Issue.PullRequest.HasMerged)))}}
+								<a href="#" class="ui muted icon re-request-review{{if .Checked}} checked{{end}}" data-tooltip-content="{{if .Checked}}{{ctx.Locale.Tr "repo.issues.remove_request_review"}}{{else}}{{ctx.Locale.Tr "repo.issues.re_request_review"}}{{end}}" data-issue-id="{{$.Issue.ID}}" data-id="{{.ItemID}}" data-update-url="{{$.RepoLink}}/issues/request_review">{{if .Checked}}{{svg "octicon-trash"}}{{else}}{{svg "octicon-sync"}}{{end}}</a>
+							{{end}}
+							{{svg (printf "octicon-%s" .Review.Type.Icon) 16 (printf "text %s" (.Review.HTMLTypeColorName))}}
+						</div>
+					</div>
+				{{end}}
+				{{range .OriginalReviews}}
+					<div class="item tw-flex tw-items-center tw-py-2">
+						<div class="tw-flex tw-items-center tw-flex-1">
+							<a class="muted" href="{{$.Repository.OriginalURL}}" data-tooltip-content="{{ctx.Locale.Tr "repo.migrated_from_fake" $.Repository.GetOriginalURLHostname}}">
+								{{svg (MigrationIcon $.Repository.GetOriginalURLHostname) 20 "tw-mr-2"}}
+								{{.OriginalAuthor}}
+							</a>
+						</div>
+						<div class="tw-flex tw-items-center tw-gap-2">
+							{{svg (printf "octicon-%s" .Type.Icon) 16 (printf "text %s" (.HTMLTypeColorName))}}
+						</div>
+					</div>
+				{{end}}
+			</div>
+		</div>
diff --git a/templates/repo/issue/view_content/sidebar/pull_wip.tmpl b/templates/repo/issue/view_content/sidebar/pull_wip.tmpl
new file mode 100644
index 0000000000..f1588b3f80
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/pull_wip.tmpl
@@ -0,0 +1,11 @@
+{{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .HasMerged) (not .Issue.IsClosed)}}
+	<div class="toggle-wip" data-title="{{.Issue.Title}}" data-wip-prefixes="{{JsonUtils.EncodeToString .PullRequestWorkInProgressPrefixes}}" data-update-url="{{.Issue.Link}}/title">
+		<a class="muted">
+			{{if .IsPullWorkInProgress}}
+				{{ctx.Locale.Tr "repo.pulls.ready_for_review"}} {{ctx.Locale.Tr "repo.pulls.remove_prefix" (index .PullRequestWorkInProgressPrefixes 0)}}
+			{{else}}
+				{{ctx.Locale.Tr "repo.pulls.still_in_progress"}} {{ctx.Locale.Tr "repo.pulls.add_prefix" (index .PullRequestWorkInProgressPrefixes 0)}}
+			{{end}}
+		</a>
+	</div>
+{{end}}

From 3d5c1c6cef82d366b762a41261b1a14793b37edb Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Wed, 24 Apr 2024 22:54:55 +0200
Subject: [PATCH 03/14] Split milestones and projects

---
 .../repo/issue/view_content/sidebar.tmpl      | 80 +------------------
 .../view_content/sidebar/milestones.tmpl      | 22 +++++
 .../issue/view_content/sidebar/projects.tmpl  | 54 +++++++++++++
 3 files changed, 78 insertions(+), 78 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/milestones.tmpl
 create mode 100644 templates/repo/issue/view_content/sidebar/projects.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 37280f69e4..b410d1d19c 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -11,86 +11,10 @@
 
 	<div class="divider"></div>
 
-	<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-milestone dropdown">
-		<a class="text muted flex-text-block">
-			<strong>{{ctx.Locale.Tr "repo.issues.new.milestone"}}</strong>
-			{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
-				{{svg "octicon-gear" 16 "tw-ml-1"}}
-			{{end}}
-		</a>
-		<div class="menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/milestone">
-			{{template "repo/issue/milestone/select_menu" .}}
-		</div>
-	</div>
-	<div class="ui select-milestone list">
-		<span class="no-select item {{if .Issue.Milestone}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_milestone"}}</span>
-		<div class="selected">
-			{{if .Issue.Milestone}}
-				<a class="item muted sidebar-item-link" href="{{.RepoLink}}/milestone/{{.Issue.Milestone.ID}}">
-					{{svg "octicon-milestone" 18 "tw-mr-2"}}
-					{{.Issue.Milestone.Name}}
-				</a>
-			{{end}}
-		</div>
-	</div>
-
+	{{template "repo/issue/view_content/sidebar/milestones" .}}
 	<div class="divider"></div>
 
-	<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-project dropdown">
-		<a class="text muted flex-text-block">
-			<strong>{{ctx.Locale.Tr "repo.issues.new.projects"}}</strong>
-			{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
-				{{svg "octicon-gear" 16 "tw-ml-1"}}
-			{{end}}
-		</a>
-		<div class="menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/projects">
-			{{if or .OpenProjects .ClosedProjects}}
-			<div class="ui icon search input">
-				<i class="icon">{{svg "octicon-search" 16}}</i>
-				<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_projects"}}">
-			</div>
-			{{end}}
-			<div class="no-select item">{{ctx.Locale.Tr "repo.issues.new.clear_projects"}}</div>
-			{{if and (not .OpenProjects) (not .ClosedProjects)}}
-				<div class="disabled item">
-					{{ctx.Locale.Tr "repo.issues.new.no_items"}}
-				</div>
-			{{end}}
-			{{if .OpenProjects}}
-				<div class="divider"></div>
-				<div class="header">
-					{{ctx.Locale.Tr "repo.issues.new.open_projects"}}
-				</div>
-				{{range .OpenProjects}}
-					<a class="item muted sidebar-item-link" data-id="{{.ID}}" data-href="{{.Link ctx}}">
-						{{svg .IconName 18 "tw-mr-2"}}{{.Title}}
-					</a>
-				{{end}}
-			{{end}}
-			{{if .ClosedProjects}}
-				<div class="divider"></div>
-				<div class="header">
-					{{ctx.Locale.Tr "repo.issues.new.closed_projects"}}
-				</div>
-				{{range .ClosedProjects}}
-					<a class="item muted sidebar-item-link" data-id="{{.ID}}" data-href="{{.Link ctx}}">
-						{{svg .IconName 18 "tw-mr-2"}}{{.Title}}
-					</a>
-				{{end}}
-			{{end}}
-		</div>
-	</div>
-	<div class="ui select-project list">
-		<span class="no-select item {{if .Issue.Project}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_projects"}}</span>
-		<div class="selected">
-			{{if .Issue.Project}}
-				<a class="item muted sidebar-item-link" href="{{.Issue.Project.Link ctx}}">
-					{{svg .Issue.Project.IconName 18 "tw-mr-2"}}{{.Issue.Project.Title}}
-				</a>
-			{{end}}
-		</div>
-	</div>
-
+	{{template "repo/issue/view_content/sidebar/projects" .}}
 	<div class="divider"></div>
 
 	<input id="assignee_id" name="assignee_id" type="hidden" value="{{.assignee_id}}">
diff --git a/templates/repo/issue/view_content/sidebar/milestones.tmpl b/templates/repo/issue/view_content/sidebar/milestones.tmpl
new file mode 100644
index 0000000000..661ca80743
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/milestones.tmpl
@@ -0,0 +1,22 @@
+<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-milestone dropdown">
+	<a class="text muted flex-text-block">
+		<strong>{{ctx.Locale.Tr "repo.issues.new.milestone"}}</strong>
+		{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
+			{{svg "octicon-gear" 16 "tw-ml-1"}}
+		{{end}}
+	</a>
+	<div class="menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/milestone">
+		{{template "repo/issue/milestone/select_menu" .}}
+	</div>
+</div>
+<div class="ui select-milestone list">
+	<span class="no-select item {{if .Issue.Milestone}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_milestone"}}</span>
+	<div class="selected">
+		{{if .Issue.Milestone}}
+			<a class="item muted sidebar-item-link" href="{{.RepoLink}}/milestone/{{.Issue.Milestone.ID}}">
+				{{svg "octicon-milestone" 18 "tw-mr-2"}}
+				{{.Issue.Milestone.Name}}
+			</a>
+		{{end}}
+	</div>
+</div>
diff --git a/templates/repo/issue/view_content/sidebar/projects.tmpl b/templates/repo/issue/view_content/sidebar/projects.tmpl
new file mode 100644
index 0000000000..91d75f3bd9
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/projects.tmpl
@@ -0,0 +1,54 @@
+<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-project dropdown">
+	<a class="text muted flex-text-block">
+		<strong>{{ctx.Locale.Tr "repo.issues.new.projects"}}</strong>
+		{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
+			{{svg "octicon-gear" 16 "tw-ml-1"}}
+		{{end}}
+	</a>
+	<div class="menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/projects">
+		{{if or .OpenProjects .ClosedProjects}}
+		<div class="ui icon search input">
+			<i class="icon">{{svg "octicon-search" 16}}</i>
+			<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_projects"}}">
+		</div>
+		{{end}}
+		<div class="no-select item">{{ctx.Locale.Tr "repo.issues.new.clear_projects"}}</div>
+		{{if and (not .OpenProjects) (not .ClosedProjects)}}
+			<div class="disabled item">
+				{{ctx.Locale.Tr "repo.issues.new.no_items"}}
+			</div>
+		{{end}}
+		{{if .OpenProjects}}
+			<div class="divider"></div>
+			<div class="header">
+				{{ctx.Locale.Tr "repo.issues.new.open_projects"}}
+			</div>
+			{{range .OpenProjects}}
+				<a class="item muted sidebar-item-link" data-id="{{.ID}}" data-href="{{.Link ctx}}">
+					{{svg .IconName 18 "tw-mr-2"}}{{.Title}}
+				</a>
+			{{end}}
+		{{end}}
+		{{if .ClosedProjects}}
+			<div class="divider"></div>
+			<div class="header">
+				{{ctx.Locale.Tr "repo.issues.new.closed_projects"}}
+			</div>
+			{{range .ClosedProjects}}
+				<a class="item muted sidebar-item-link" data-id="{{.ID}}" data-href="{{.Link ctx}}">
+					{{svg .IconName 18 "tw-mr-2"}}{{.Title}}
+				</a>
+			{{end}}
+		{{end}}
+	</div>
+</div>
+<div class="ui select-project list">
+	<span class="no-select item {{if .Issue.Project}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_projects"}}</span>
+	<div class="selected">
+		{{if .Issue.Project}}
+			<a class="item muted sidebar-item-link" href="{{.Issue.Project.Link ctx}}">
+				{{svg .Issue.Project.IconName 18 "tw-mr-2"}}{{.Issue.Project.Title}}
+			</a>
+		{{end}}
+	</div>
+</div>

From 019d32235129afbc1b9effe86511dcec8a7979cc Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Wed, 24 Apr 2024 22:58:03 +0200
Subject: [PATCH 04/14] Split assignees

---
 .../repo/issue/view_content/sidebar.tmpl      | 47 +------------------
 .../issue/view_content/sidebar/assignees.tmpl | 45 ++++++++++++++++++
 2 files changed, 46 insertions(+), 46 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/assignees.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index b410d1d19c..effbdc3072 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -17,52 +17,7 @@
 	{{template "repo/issue/view_content/sidebar/projects" .}}
 	<div class="divider"></div>
 
-	<input id="assignee_id" name="assignee_id" type="hidden" value="{{.assignee_id}}">
-	<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-assignees-modify dropdown">
-		<a class="text muted flex-text-block">
-			<strong>{{ctx.Locale.Tr "repo.issues.new.assignees"}}</strong>
-			{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
-				{{svg "octicon-gear" 16 "tw-ml-1"}}
-			{{end}}
-		</a>
-		<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/assignee">
-			<div class="ui icon search input">
-				<i class="icon">{{svg "octicon-search" 16}}</i>
-				<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_assignees"}}">
-			</div>
-			<div class="no-select item">{{ctx.Locale.Tr "repo.issues.new.clear_assignees"}}</div>
-			{{range .Assignees}}
-
-				{{$AssigneeID := .ID}}
-				<a class="item{{range $.Issue.Assignees}}{{if eq .ID $AssigneeID}} checked{{end}}{{end}}" href="#" data-id="{{.ID}}" data-id-selector="#assignee_{{.ID}}">
-					{{$checked := false}}
-					{{range $.Issue.Assignees}}
-						{{if eq .ID $AssigneeID}}
-							{{$checked = true}}
-						{{end}}
-					{{end}}
-					<span class="octicon-check {{if not $checked}}tw-invisible{{end}}">{{svg "octicon-check"}}</span>
-					<span class="text">
-						{{ctx.AvatarUtils.Avatar . 20 "tw-mr-2"}}{{template "repo/search_name" .}}
-					</span>
-				</a>
-			{{end}}
-		</div>
-	</div>
-	<div class="ui assignees list">
-		<span class="no-select item {{if .Issue.Assignees}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_assignees"}}</span>
-		<div class="selected">
-			{{range .Issue.Assignees}}
-				<div class="item">
-					<a class="muted sidebar-item-link" href="{{$.RepoLink}}/{{if $.Issue.IsPull}}pulls{{else}}issues{{end}}?assignee={{.ID}}">
-						{{ctx.AvatarUtils.Avatar . 28 "tw-mr-2"}}
-						{{.GetDisplayName}}
-					</a>
-				</div>
-			{{end}}
-		</div>
-	</div>
-
+	{{template "repo/issue/view_content/sidebar/assignees" .}}
 	<div class="divider"></div>
 
 	{{if .Participants}}
diff --git a/templates/repo/issue/view_content/sidebar/assignees.tmpl b/templates/repo/issue/view_content/sidebar/assignees.tmpl
new file mode 100644
index 0000000000..e51bda95de
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/assignees.tmpl
@@ -0,0 +1,45 @@
+<input id="assignee_id" name="assignee_id" type="hidden" value="{{.assignee_id}}">
+<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-assignees-modify dropdown">
+	<a class="text muted flex-text-block">
+		<strong>{{ctx.Locale.Tr "repo.issues.new.assignees"}}</strong>
+		{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
+			{{svg "octicon-gear" 16 "tw-ml-1"}}
+		{{end}}
+	</a>
+	<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/assignee">
+		<div class="ui icon search input">
+			<i class="icon">{{svg "octicon-search" 16}}</i>
+			<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_assignees"}}">
+		</div>
+		<div class="no-select item">{{ctx.Locale.Tr "repo.issues.new.clear_assignees"}}</div>
+		{{range .Assignees}}
+
+			{{$AssigneeID := .ID}}
+			<a class="item{{range $.Issue.Assignees}}{{if eq .ID $AssigneeID}} checked{{end}}{{end}}" href="#" data-id="{{.ID}}" data-id-selector="#assignee_{{.ID}}">
+				{{$checked := false}}
+				{{range $.Issue.Assignees}}
+					{{if eq .ID $AssigneeID}}
+						{{$checked = true}}
+					{{end}}
+				{{end}}
+				<span class="octicon-check {{if not $checked}}tw-invisible{{end}}">{{svg "octicon-check"}}</span>
+				<span class="text">
+					{{ctx.AvatarUtils.Avatar . 20 "tw-mr-2"}}{{template "repo/search_name" .}}
+				</span>
+			</a>
+		{{end}}
+	</div>
+</div>
+<div class="ui assignees list">
+	<span class="no-select item {{if .Issue.Assignees}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_assignees"}}</span>
+	<div class="selected">
+		{{range .Issue.Assignees}}
+			<div class="item">
+				<a class="muted sidebar-item-link" href="{{$.RepoLink}}/{{if $.Issue.IsPull}}pulls{{else}}issues{{end}}?assignee={{.ID}}">
+					{{ctx.AvatarUtils.Avatar . 28 "tw-mr-2"}}
+					{{.GetDisplayName}}
+				</a>
+			</div>
+		{{end}}
+	</div>
+</div>

From dfaeb4692c6933df3e7a19462f567ec1acbd379f Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Wed, 24 Apr 2024 23:01:03 +0200
Subject: [PATCH 05/14] Split participants

---
 templates/repo/issue/view_content/sidebar.tmpl           | 9 +--------
 .../repo/issue/view_content/sidebar/participants.tmpl    | 8 ++++++++
 2 files changed, 9 insertions(+), 8 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/participants.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index effbdc3072..5972f3dbcf 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -21,14 +21,7 @@
 	<div class="divider"></div>
 
 	{{if .Participants}}
-		<span class="text"><strong>{{ctx.Locale.TrN .NumParticipants "repo.issues.num_participants_one" "repo.issues.num_participants_few" .NumParticipants}}</strong></span>
-		<div class="ui list tw-flex tw-flex-wrap">
-			{{range .Participants}}
-				<a {{if gt .ID 0}}href="{{.HomeLink}}"{{end}} data-tooltip-content="{{.GetDisplayName}}">
-					{{ctx.AvatarUtils.Avatar . 28 "tw-my-0.5 tw-mr-1"}}
-				</a>
-			{{end}}
-		</div>
+		{{template "repo/issue/view_content/sidebar/participants" .}}
 	{{end}}
 
 	{{if and $.IssueWatch (not .Repository.IsArchived)}}
diff --git a/templates/repo/issue/view_content/sidebar/participants.tmpl b/templates/repo/issue/view_content/sidebar/participants.tmpl
new file mode 100644
index 0000000000..93e2579d8f
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/participants.tmpl
@@ -0,0 +1,8 @@
+<span class="text"><strong>{{ctx.Locale.TrN .NumParticipants "repo.issues.num_participants_one" "repo.issues.num_participants_few" .NumParticipants}}</strong></span>
+<div class="ui list tw-flex tw-flex-wrap">
+	{{range .Participants}}
+		<a {{if gt .ID 0}}href="{{.HomeLink}}"{{end}} data-tooltip-content="{{.GetDisplayName}}">
+			{{ctx.AvatarUtils.Avatar . 28 "tw-my-0.5 tw-mr-1"}}
+		</a>
+	{{end}}
+</div>

From 35c967653b61e54a07e27619cfcf5ac78810ffc4 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Wed, 24 Apr 2024 23:03:47 +0200
Subject: [PATCH 06/14] Split watching

---
 templates/repo/issue/view_content/sidebar.tmpl       | 8 ++------
 templates/repo/issue/view_content/sidebar/watch.tmpl | 6 ++++++
 2 files changed, 8 insertions(+), 6 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/watch.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 5972f3dbcf..c3e8e24d03 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -27,13 +27,9 @@
 	{{if and $.IssueWatch (not .Repository.IsArchived)}}
 		<div class="divider"></div>
 
-		<div class="ui watching">
-			<span class="text"><strong>{{ctx.Locale.Tr "notification.notifications"}}</strong></span>
-			<div class="tw-mt-2">
-				{{template "repo/issue/view_content/watching" .}}
-			</div>
-		</div>
+		{{template "repo/issue/view_content/sidebar/watch" .}}
 	{{end}}
+
 	{{if .Repository.IsTimetrackerEnabled $.Context}}
 		{{if and .CanUseTimetracker (not .Repository.IsArchived)}}
 			<div class="divider"></div>
diff --git a/templates/repo/issue/view_content/sidebar/watch.tmpl b/templates/repo/issue/view_content/sidebar/watch.tmpl
new file mode 100644
index 0000000000..852738a706
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/watch.tmpl
@@ -0,0 +1,6 @@
+<div class="ui watching">
+	<span class="text"><strong>{{ctx.Locale.Tr "notification.notifications"}}</strong></span>
+	<div class="tw-mt-2">
+		{{template "repo/issue/view_content/watching" .}}
+	</div>
+</div>

From 47ef51d51ee46976171bab80314baa3798e45d13 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Wed, 24 Apr 2024 23:04:58 +0200
Subject: [PATCH 07/14] Unify watching template

---
 .../repo/issue/view_content/sidebar/watch.tmpl      | 13 ++++++++++++-
 templates/repo/issue/view_content/watching.tmpl     | 12 ------------
 2 files changed, 12 insertions(+), 13 deletions(-)
 delete mode 100644 templates/repo/issue/view_content/watching.tmpl

diff --git a/templates/repo/issue/view_content/sidebar/watch.tmpl b/templates/repo/issue/view_content/sidebar/watch.tmpl
index 852738a706..6c74b140c8 100644
--- a/templates/repo/issue/view_content/sidebar/watch.tmpl
+++ b/templates/repo/issue/view_content/sidebar/watch.tmpl
@@ -1,6 +1,17 @@
 <div class="ui watching">
 	<span class="text"><strong>{{ctx.Locale.Tr "notification.notifications"}}</strong></span>
 	<div class="tw-mt-2">
-		{{template "repo/issue/view_content/watching" .}}
+		<form hx-boost="true" hx-sync="this:replace" hx-target="this" method="post" action="{{.Issue.Link}}/watch">
+			<input type="hidden" name="watch" value="{{if $.IssueWatch.IsWatching}}0{{else}}1{{end}}">
+			<button class="fluid ui button">
+				{{if $.IssueWatch.IsWatching}}
+					{{svg "octicon-mute" 16 "tw-mr-2"}}
+					{{ctx.Locale.Tr "repo.issues.unsubscribe"}}
+				{{else}}
+					{{svg "octicon-unmute" 16 "tw-mr-2"}}
+					{{ctx.Locale.Tr "repo.issues.subscribe"}}
+				{{end}}
+			</button>
+		</form>
 	</div>
 </div>
diff --git a/templates/repo/issue/view_content/watching.tmpl b/templates/repo/issue/view_content/watching.tmpl
deleted file mode 100644
index 05936d090b..0000000000
--- a/templates/repo/issue/view_content/watching.tmpl
+++ /dev/null
@@ -1,12 +0,0 @@
-<form hx-boost="true" hx-sync="this:replace" hx-target="this" method="post" action="{{.Issue.Link}}/watch">
-	<input type="hidden" name="watch" value="{{if $.IssueWatch.IsWatching}}0{{else}}1{{end}}">
-	<button class="fluid ui button">
-		{{if $.IssueWatch.IsWatching}}
-			{{svg "octicon-mute" 16 "tw-mr-2"}}
-			{{ctx.Locale.Tr "repo.issues.unsubscribe"}}
-		{{else}}
-			{{svg "octicon-unmute" 16 "tw-mr-2"}}
-			{{ctx.Locale.Tr "repo.issues.subscribe"}}
-		{{end}}
-	</button>
-</form>

From 27a9fd1792cad0de5d12606595283f670cb5e0b8 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Thu, 25 Apr 2024 13:24:26 +0200
Subject: [PATCH 08/14] Split timetracking

---
 .../repo/issue/view_content/sidebar.tmpl      | 74 +------------------
 .../view_content/sidebar/timetracking.tmpl    | 73 ++++++++++++++++++
 2 files changed, 74 insertions(+), 73 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/timetracking.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index c3e8e24d03..866c9e4c12 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -31,79 +31,7 @@
 	{{end}}
 
 	{{if .Repository.IsTimetrackerEnabled $.Context}}
-		{{if and .CanUseTimetracker (not .Repository.IsArchived)}}
-			<div class="divider"></div>
-			<div class="ui timetrack">
-				<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.tracker"}}</strong></span>
-				<div class="tw-mt-2">
-					<form method="post" action="{{.Issue.Link}}/times/stopwatch/toggle" id="toggle_stopwatch_form">
-						{{$.CsrfTokenHtml}}
-					</form>
-					<form method="post" action="{{.Issue.Link}}/times/stopwatch/cancel" id="cancel_stopwatch_form">
-						{{$.CsrfTokenHtml}}
-					</form>
-					{{if $.IsStopwatchRunning}}
-						<button class="ui fluid button issue-stop-time">
-							{{svg "octicon-stopwatch" 16 "tw-mr-2"}}
-							{{ctx.Locale.Tr "repo.issues.stop_tracking"}}
-						</button>
-						<button class="ui fluid button issue-cancel-time tw-mt-2">
-							{{svg "octicon-trash" 16 "tw-mr-2"}}
-							{{ctx.Locale.Tr "repo.issues.cancel_tracking"}}
-						</button>
-					{{else}}
-						{{if .HasUserStopwatch}}
-							<div class="ui warning message">
-								{{ctx.Locale.Tr "repo.issues.tracking_already_started" .OtherStopwatchURL}}
-							</div>
-						{{end}}
-						<button class="ui fluid button issue-start-time" data-tooltip-content='{{ctx.Locale.Tr "repo.issues.start_tracking"}}'>
-							{{svg "octicon-stopwatch" 16 "tw-mr-2"}}
-							{{ctx.Locale.Tr "repo.issues.start_tracking_short"}}
-						</button>
-						<div class="ui mini modal issue-start-time-modal">
-							<div class="header">{{ctx.Locale.Tr "repo.issues.add_time"}}</div>
-							<div class="content">
-								<form method="post" id="add_time_manual_form" action="{{.Issue.Link}}/times/add" class="ui input fluid tw-gap-2">
-									{{$.CsrfTokenHtml}}
-									<input placeholder='{{ctx.Locale.Tr "repo.issues.add_time_hours"}}' type="number" name="hours">
-									<input placeholder='{{ctx.Locale.Tr "repo.issues.add_time_minutes"}}' type="number" name="minutes" class="ui compact">
-								</form>
-							</div>
-							<div class="actions">
-								<button class="ui primary approve button">{{ctx.Locale.Tr "repo.issues.add_time_short"}}</button>
-								<button class="ui cancel button">{{ctx.Locale.Tr "repo.issues.add_time_cancel"}}</button>
-							</div>
-						</div>
-						<button class="ui fluid button issue-add-time tw-mt-2" data-tooltip-content='{{ctx.Locale.Tr "repo.issues.add_time"}}'>
-							{{svg "octicon-plus" 16 "tw-mr-2"}}
-							{{ctx.Locale.Tr "repo.issues.add_time_short"}}
-						</button>
-					{{end}}
-				</div>
-			</div>
-		{{end}}
-		{{if .WorkingUsers}}
-			<div class="divider"></div>
-			<div class="ui comments">
-				<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.time_spent_from_all_authors" ($.Issue.TotalTrackedTime | Sec2Time)}}</strong></span>
-				<div>
-					{{range $user, $trackedtime := .WorkingUsers}}
-						<div class="comment tw-mt-2">
-							<a class="avatar">
-								{{ctx.AvatarUtils.Avatar $user}}
-							</a>
-							<div class="content">
-								{{template "shared/user/authorlink" $user}}
-								<div class="text">
-									{{$trackedtime|Sec2Time}}
-								</div>
-							</div>
-						</div>
-					{{end}}
-				</div>
-			</div>
-		{{end}}
+		{{template "repo/issue/view_content/sidebar/timetracking" .}}
 	{{end}}
 
 	<div class="divider"></div>
diff --git a/templates/repo/issue/view_content/sidebar/timetracking.tmpl b/templates/repo/issue/view_content/sidebar/timetracking.tmpl
new file mode 100644
index 0000000000..610600b2fb
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/timetracking.tmpl
@@ -0,0 +1,73 @@
+{{if and .CanUseTimetracker (not .Repository.IsArchived)}}
+	<div class="divider"></div>
+	<div class="ui timetrack">
+		<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.tracker"}}</strong></span>
+		<div class="tw-mt-2">
+			<form method="post" action="{{.Issue.Link}}/times/stopwatch/toggle" id="toggle_stopwatch_form">
+				{{$.CsrfTokenHtml}}
+			</form>
+			<form method="post" action="{{.Issue.Link}}/times/stopwatch/cancel" id="cancel_stopwatch_form">
+				{{$.CsrfTokenHtml}}
+			</form>
+			{{if $.IsStopwatchRunning}}
+				<button class="ui fluid button issue-stop-time">
+					{{svg "octicon-stopwatch" 16 "tw-mr-2"}}
+					{{ctx.Locale.Tr "repo.issues.stop_tracking"}}
+				</button>
+				<button class="ui fluid button issue-cancel-time tw-mt-2">
+					{{svg "octicon-trash" 16 "tw-mr-2"}}
+					{{ctx.Locale.Tr "repo.issues.cancel_tracking"}}
+				</button>
+			{{else}}
+				{{if .HasUserStopwatch}}
+					<div class="ui warning message">
+						{{ctx.Locale.Tr "repo.issues.tracking_already_started" .OtherStopwatchURL}}
+					</div>
+				{{end}}
+				<button class="ui fluid button issue-start-time" data-tooltip-content='{{ctx.Locale.Tr "repo.issues.start_tracking"}}'>
+					{{svg "octicon-stopwatch" 16 "tw-mr-2"}}
+					{{ctx.Locale.Tr "repo.issues.start_tracking_short"}}
+				</button>
+				<div class="ui mini modal issue-start-time-modal">
+					<div class="header">{{ctx.Locale.Tr "repo.issues.add_time"}}</div>
+					<div class="content">
+						<form method="post" id="add_time_manual_form" action="{{.Issue.Link}}/times/add" class="ui input fluid tw-gap-2">
+							{{$.CsrfTokenHtml}}
+							<input placeholder='{{ctx.Locale.Tr "repo.issues.add_time_hours"}}' type="number" name="hours">
+							<input placeholder='{{ctx.Locale.Tr "repo.issues.add_time_minutes"}}' type="number" name="minutes" class="ui compact">
+						</form>
+					</div>
+					<div class="actions">
+						<button class="ui primary approve button">{{ctx.Locale.Tr "repo.issues.add_time_short"}}</button>
+						<button class="ui cancel button">{{ctx.Locale.Tr "repo.issues.add_time_cancel"}}</button>
+					</div>
+				</div>
+				<button class="ui fluid button issue-add-time tw-mt-2" data-tooltip-content='{{ctx.Locale.Tr "repo.issues.add_time"}}'>
+					{{svg "octicon-plus" 16 "tw-mr-2"}}
+					{{ctx.Locale.Tr "repo.issues.add_time_short"}}
+				</button>
+			{{end}}
+		</div>
+	</div>
+{{end}}
+{{if .WorkingUsers}}
+	<div class="divider"></div>
+	<div class="ui comments">
+		<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.time_spent_from_all_authors" ($.Issue.TotalTrackedTime | Sec2Time)}}</strong></span>
+		<div>
+			{{range $user, $trackedtime := .WorkingUsers}}
+				<div class="comment tw-mt-2">
+					<a class="avatar">
+						{{ctx.AvatarUtils.Avatar $user}}
+					</a>
+					<div class="content">
+						{{template "shared/user/authorlink" $user}}
+						<div class="text">
+							{{$trackedtime|Sec2Time}}
+						</div>
+					</div>
+				</div>
+			{{end}}
+		</div>
+	</div>
+{{end}}

From cc83b9349df9aa49a9736fe747ecbd668c3448fc Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Thu, 25 Apr 2024 13:34:48 +0200
Subject: [PATCH 09/14] Split deadline / due date

---
 .../repo/issue/view_content/sidebar.tmpl      | 42 +------------------
 .../view_content/sidebar/due_deadline.tmpl    | 41 ++++++++++++++++++
 2 files changed, 42 insertions(+), 41 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/due_deadline.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 866c9e4c12..35e97085c5 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -35,47 +35,7 @@
 	{{end}}
 
 	<div class="divider"></div>
-	<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.due_date"}}</strong></span>
-	<div class="ui form" id="deadline-loader">
-		<div class="ui negative message tw-hidden" id="deadline-err-invalid-date">
-			{{svg "octicon-x" 16 "close icon"}}
-			{{ctx.Locale.Tr "repo.issues.due_date_invalid"}}
-		</div>
-		{{if ne .Issue.DeadlineUnix 0}}
-			<p>
-				<div class="tw-flex tw-justify-between tw-items-center">
-					<div class="due-date {{if .Issue.IsOverdue}}text red{{end}}" {{if .Issue.IsOverdue}}data-tooltip-content="{{ctx.Locale.Tr "repo.issues.due_date_overdue"}}"{{end}}>
-						{{svg "octicon-calendar" 16 "tw-mr-2"}}
-						{{DateTime "long" .Issue.DeadlineUnix.FormatDate}}
-					</div>
-					<div>
-						{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
-							<a class="issue-due-edit muted" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.due_date_form_edit"}}">{{svg "octicon-pencil" 16 "tw-mr-1"}}</a>
-							<a class="issue-due-remove muted" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.due_date_form_remove"}}">{{svg "octicon-trash"}}</a>
-						{{end}}
-					</div>
-				</div>
-			</p>
-		{{else}}
-			<p>{{ctx.Locale.Tr "repo.issues.due_date_not_set"}}</p>
-		{{end}}
-
-		{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
-			<div {{if ne .Issue.DeadlineUnix 0}} class="tw-hidden"{{end}} id="deadlineForm">
-				<form class="ui fluid action input issue-due-form" action="{{AppSubUrl}}/{{PathEscape .Repository.Owner.Name}}/{{PathEscape .Repository.Name}}/issues/{{.Issue.Index}}/deadline" method="post" id="update-issue-deadline-form">
-					{{$.CsrfTokenHtml}}
-					<input required placeholder="{{ctx.Locale.Tr "repo.issues.due_date_form"}}" {{if gt .Issue.DeadlineUnix 0}}value="{{.Issue.DeadlineUnix.FormatDate}}"{{end}} type="date" name="deadlineDate" id="deadlineDate">
-					<button class="ui icon button">
-						{{if ne .Issue.DeadlineUnix 0}}
-							{{svg "octicon-pencil"}}
-						{{else}}
-							{{svg "octicon-plus"}}
-						{{end}}
-					</button>
-				</form>
-			</div>
-		{{end}}
-	</div>
+	{{template "repo/issue/view_content/sidebar/due_deadline" .}}
 
 	{{if .Repository.IsDependenciesEnabled $.Context}}
 		<div class="divider"></div>
diff --git a/templates/repo/issue/view_content/sidebar/due_deadline.tmpl b/templates/repo/issue/view_content/sidebar/due_deadline.tmpl
new file mode 100644
index 0000000000..2de836b4ed
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/due_deadline.tmpl
@@ -0,0 +1,41 @@
+<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.due_date"}}</strong></span>
+<div class="ui form" id="deadline-loader">
+	<div class="ui negative message tw-hidden" id="deadline-err-invalid-date">
+		{{svg "octicon-x" 16 "close icon"}}
+		{{ctx.Locale.Tr "repo.issues.due_date_invalid"}}
+	</div>
+	{{if ne .Issue.DeadlineUnix 0}}
+		<p>
+			<div class="tw-flex tw-justify-between tw-items-center">
+				<div class="due-date {{if .Issue.IsOverdue}}text red{{end}}" {{if .Issue.IsOverdue}}data-tooltip-content="{{ctx.Locale.Tr "repo.issues.due_date_overdue"}}"{{end}}>
+					{{svg "octicon-calendar" 16 "tw-mr-2"}}
+					{{DateTime "long" .Issue.DeadlineUnix.FormatDate}}
+				</div>
+				<div>
+					{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
+						<a class="issue-due-edit muted" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.due_date_form_edit"}}">{{svg "octicon-pencil" 16 "tw-mr-1"}}</a>
+						<a class="issue-due-remove muted" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.due_date_form_remove"}}">{{svg "octicon-trash"}}</a>
+					{{end}}
+				</div>
+			</div>
+		</p>
+	{{else}}
+		<p>{{ctx.Locale.Tr "repo.issues.due_date_not_set"}}</p>
+	{{end}}
+
+	{{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}}
+		<div {{if ne .Issue.DeadlineUnix 0}} class="tw-hidden"{{end}} id="deadlineForm">
+			<form class="ui fluid action input issue-due-form" action="{{AppSubUrl}}/{{PathEscape .Repository.Owner.Name}}/{{PathEscape .Repository.Name}}/issues/{{.Issue.Index}}/deadline" method="post" id="update-issue-deadline-form">
+				{{$.CsrfTokenHtml}}
+				<input required placeholder="{{ctx.Locale.Tr "repo.issues.due_date_form"}}" {{if gt .Issue.DeadlineUnix 0}}value="{{.Issue.DeadlineUnix.FormatDate}}"{{end}} type="date" name="deadlineDate" id="deadlineDate">
+				<button class="ui icon button">
+					{{if ne .Issue.DeadlineUnix 0}}
+						{{svg "octicon-pencil"}}
+					{{else}}
+						{{svg "octicon-plus"}}
+					{{end}}
+				</button>
+			</form>
+		</div>
+	{{end}}
+</div>

From 0eec8b84a1d63be68d41518bfff0f7f9d9eadb0c Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Thu, 25 Apr 2024 13:37:43 +0200
Subject: [PATCH 10/14] Split issue dependencies

---
 .../repo/issue/view_content/sidebar.tmpl      | 146 +-----------------
 .../view_content/sidebar/dependencies.tmpl    | 145 +++++++++++++++++
 2 files changed, 146 insertions(+), 145 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/dependencies.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 35e97085c5..4c14e08013 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -40,151 +40,7 @@
 	{{if .Repository.IsDependenciesEnabled $.Context}}
 		<div class="divider"></div>
 
-		<div class="ui depending">
-			{{if (and (not .BlockedByDependencies) (not .BlockedByDependenciesNotPermitted) (not .BlockingDependencies) (not .BlockingDependenciesNotPermitted))}}
-				<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.dependency.title"}}</strong></span>
-				<br>
-				<p>
-					{{if .Issue.IsPull}}
-						{{ctx.Locale.Tr "repo.issues.dependency.pr_no_dependencies"}}
-					{{else}}
-						{{ctx.Locale.Tr "repo.issues.dependency.issue_no_dependencies"}}
-					{{end}}
-				</p>
-			{{end}}
-
-			{{if or .BlockingDependencies .BlockingDependenciesNotPermitted}}
-				<span class="text" data-tooltip-content="{{if .Issue.IsPull}}{{ctx.Locale.Tr "repo.issues.dependency.pr_close_blocks"}}{{else}}{{ctx.Locale.Tr "repo.issues.dependency.issue_close_blocks"}}{{end}}">
-					<strong>{{ctx.Locale.Tr "repo.issues.dependency.blocks_short"}}</strong>
-				</span>
-				<div class="ui relaxed divided list">
-					{{range .BlockingDependencies}}
-						<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} tw-flex tw-items-center tw-justify-between">
-							<div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
-								<a class="title muted" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
-									#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
-								</a>
-								<div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
-									{{.Repository.OwnerName}}/{{.Repository.Name}}
-								</div>
-							</div>
-							<div class="item-right tw-flex tw-items-center tw-m-1">
-								{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
-									<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blocking" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.remove_info"}}">
-										{{svg "octicon-trash" 16}}
-									</a>
-								{{end}}
-							</div>
-						</div>
-					{{end}}
-					{{if .BlockingDependenciesNotPermitted}}
-						<div class="item tw-flex tw-items-center tw-justify-between gt-ellipsis">
-							<span>{{ctx.Locale.TrN (len .BlockingDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockingDependenciesNotPermitted)}}</span>
-						</div>
-					{{end}}
-				</div>
-			{{end}}
-
-			{{if or .BlockedByDependencies .BlockedByDependenciesNotPermitted}}
-				<span class="text" data-tooltip-content="{{if .Issue.IsPull}}{{ctx.Locale.Tr "repo.issues.dependency.pr_closing_blockedby"}}{{else}}{{ctx.Locale.Tr "repo.issues.dependency.issue_closing_blockedby"}}{{end}}">
-					<strong>{{ctx.Locale.Tr "repo.issues.dependency.blocked_by_short"}}</strong>
-				</span>
-				<div class="ui relaxed divided list">
-					{{range .BlockedByDependencies}}
-						<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} tw-flex tw-items-center tw-justify-between">
-							<div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
-								<a class="title muted" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
-									#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
-								</a>
-								<div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
-									{{.Repository.OwnerName}}/{{.Repository.Name}}
-								</div>
-							</div>
-							<div class="item-right tw-flex tw-items-center tw-m-1">
-								{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
-									<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blockedBy" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.remove_info"}}">
-										{{svg "octicon-trash" 16}}
-									</a>
-								{{end}}
-							</div>
-						</div>
-					{{end}}
-					{{if $.CanCreateIssueDependencies}}
-						{{range .BlockedByDependenciesNotPermitted}}
-							<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} tw-flex tw-items-center tw-justify-between">
-								<div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
-									<div class="gt-ellipsis">
-										<span data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.no_permission.can_remove"}}">{{svg "octicon-lock" 16}}</span>
-										<span class="title" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
-											#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
-										</span>
-									</div>
-									<div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
-										{{.Repository.OwnerName}}/{{.Repository.Name}}
-									</div>
-								</div>
-								<div class="item-right tw-flex tw-items-center tw-m-1">
-									{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
-										<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blocking" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.remove_info"}}">
-											{{svg "octicon-trash" 16}}
-										</a>
-									{{end}}
-								</div>
-							</div>
-						{{end}}
-					{{else if .BlockedByDependenciesNotPermitted}}
-						<div class="item tw-flex tw-items-center tw-justify-between gt-ellipsis">
-							<span>{{ctx.Locale.TrN (len .BlockedByDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockedByDependenciesNotPermitted)}}</span>
-						</div>
-					{{end}}
-				</div>
-			{{end}}
-
-			{{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
-				<div>
-					<form method="post" action="{{.Issue.Link}}/dependency/add" id="addDependencyForm">
-						{{$.CsrfTokenHtml}}
-						<div class="ui fluid action input">
-							<div class="ui search selection dropdown" id="new-dependency-drop-list" data-issue-id="{{.Issue.ID}}">
-								<input name="newDependency" type="hidden">
-								{{svg "octicon-triangle-down" 14 "dropdown icon"}}
-								<input type="text" class="search">
-								<div class="default text">{{ctx.Locale.Tr "repo.issues.dependency.add"}}</div>
-							</div>
-							<button class="ui icon button">
-								{{svg "octicon-plus"}}
-							</button>
-						</div>
-					</form>
-				</div>
-			{{end}}
-		</div>
-
-		{{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
-			<input type="hidden" id="crossRepoSearch" value="{{.AllowCrossRepositoryDependencies}}">
-
-			<div class="ui g-modal-confirm modal remove-dependency">
-				<div class="header">
-					{{svg "octicon-trash"}}
-					{{ctx.Locale.Tr "repo.issues.dependency.remove_header"}}
-				</div>
-				<div class="content">
-					<form method="post" action="{{.Issue.Link}}/dependency/delete" id="removeDependencyForm">
-						{{$.CsrfTokenHtml}}
-						<input type="hidden" value="" name="removeDependencyID" id="removeDependencyID">
-						<input type="hidden" value="" name="dependencyType" id="dependencyType">
-					</form>
-					<p>{{if .Issue.IsPull}}
-						{{ctx.Locale.Tr "repo.issues.dependency.pr_remove_text"}}
-					{{else}}
-						{{ctx.Locale.Tr "repo.issues.dependency.issue_remove_text"}}
-					{{end}}</p>
-				</div>
-				{{$ModalButtonCancelText := ctx.Locale.Tr "repo.issues.dependency.cancel"}}
-				{{$ModalButtonOkText := ctx.Locale.Tr "repo.issues.dependency.remove"}}
-				{{template "base/modal_actions_confirm" (dict "." . "ModalButtonCancelText" $ModalButtonCancelText "ModalButtonOkText" $ModalButtonOkText)}}
-			</div>
-		{{end}}
+		{{template "repo/issue/view_content/sidebar/dependencies" .}}
 	{{end}}
 
 	<div class="divider"></div>
diff --git a/templates/repo/issue/view_content/sidebar/dependencies.tmpl b/templates/repo/issue/view_content/sidebar/dependencies.tmpl
new file mode 100644
index 0000000000..791bd5c4a1
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/dependencies.tmpl
@@ -0,0 +1,145 @@
+<div class="ui depending">
+	{{if (and (not .BlockedByDependencies) (not .BlockedByDependenciesNotPermitted) (not .BlockingDependencies) (not .BlockingDependenciesNotPermitted))}}
+		<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.dependency.title"}}</strong></span>
+		<br>
+		<p>
+			{{if .Issue.IsPull}}
+				{{ctx.Locale.Tr "repo.issues.dependency.pr_no_dependencies"}}
+			{{else}}
+				{{ctx.Locale.Tr "repo.issues.dependency.issue_no_dependencies"}}
+			{{end}}
+		</p>
+	{{end}}
+
+	{{if or .BlockingDependencies .BlockingDependenciesNotPermitted}}
+		<span class="text" data-tooltip-content="{{if .Issue.IsPull}}{{ctx.Locale.Tr "repo.issues.dependency.pr_close_blocks"}}{{else}}{{ctx.Locale.Tr "repo.issues.dependency.issue_close_blocks"}}{{end}}">
+			<strong>{{ctx.Locale.Tr "repo.issues.dependency.blocks_short"}}</strong>
+		</span>
+		<div class="ui relaxed divided list">
+			{{range .BlockingDependencies}}
+				<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} tw-flex tw-items-center tw-justify-between">
+					<div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
+						<a class="title muted" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
+							#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
+						</a>
+						<div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
+							{{.Repository.OwnerName}}/{{.Repository.Name}}
+						</div>
+					</div>
+					<div class="item-right tw-flex tw-items-center tw-m-1">
+						{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
+							<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blocking" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.remove_info"}}">
+								{{svg "octicon-trash" 16}}
+							</a>
+						{{end}}
+					</div>
+				</div>
+			{{end}}
+			{{if .BlockingDependenciesNotPermitted}}
+				<div class="item tw-flex tw-items-center tw-justify-between gt-ellipsis">
+					<span>{{ctx.Locale.TrN (len .BlockingDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockingDependenciesNotPermitted)}}</span>
+				</div>
+			{{end}}
+		</div>
+	{{end}}
+
+	{{if or .BlockedByDependencies .BlockedByDependenciesNotPermitted}}
+		<span class="text" data-tooltip-content="{{if .Issue.IsPull}}{{ctx.Locale.Tr "repo.issues.dependency.pr_closing_blockedby"}}{{else}}{{ctx.Locale.Tr "repo.issues.dependency.issue_closing_blockedby"}}{{end}}">
+			<strong>{{ctx.Locale.Tr "repo.issues.dependency.blocked_by_short"}}</strong>
+		</span>
+		<div class="ui relaxed divided list">
+			{{range .BlockedByDependencies}}
+				<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} tw-flex tw-items-center tw-justify-between">
+					<div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
+						<a class="title muted" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
+							#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
+						</a>
+						<div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
+							{{.Repository.OwnerName}}/{{.Repository.Name}}
+						</div>
+					</div>
+					<div class="item-right tw-flex tw-items-center tw-m-1">
+						{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
+							<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blockedBy" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.remove_info"}}">
+								{{svg "octicon-trash" 16}}
+							</a>
+						{{end}}
+					</div>
+				</div>
+			{{end}}
+			{{if $.CanCreateIssueDependencies}}
+				{{range .BlockedByDependenciesNotPermitted}}
+					<div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} tw-flex tw-items-center tw-justify-between">
+						<div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
+							<div class="gt-ellipsis">
+								<span data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.no_permission.can_remove"}}">{{svg "octicon-lock" 16}}</span>
+								<span class="title" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
+									#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
+								</span>
+							</div>
+							<div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
+								{{.Repository.OwnerName}}/{{.Repository.Name}}
+							</div>
+						</div>
+						<div class="item-right tw-flex tw-items-center tw-m-1">
+							{{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}}
+								<a class="delete-dependency-button ci muted" data-id="{{.Issue.ID}}" data-type="blocking" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.remove_info"}}">
+									{{svg "octicon-trash" 16}}
+								</a>
+							{{end}}
+						</div>
+					</div>
+				{{end}}
+			{{else if .BlockedByDependenciesNotPermitted}}
+				<div class="item tw-flex tw-items-center tw-justify-between gt-ellipsis">
+					<span>{{ctx.Locale.TrN (len .BlockedByDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockedByDependenciesNotPermitted)}}</span>
+				</div>
+			{{end}}
+		</div>
+	{{end}}
+
+	{{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
+		<div>
+			<form method="post" action="{{.Issue.Link}}/dependency/add" id="addDependencyForm">
+				{{$.CsrfTokenHtml}}
+				<div class="ui fluid action input">
+					<div class="ui search selection dropdown" id="new-dependency-drop-list" data-issue-id="{{.Issue.ID}}">
+						<input name="newDependency" type="hidden">
+						{{svg "octicon-triangle-down" 14 "dropdown icon"}}
+						<input type="text" class="search">
+						<div class="default text">{{ctx.Locale.Tr "repo.issues.dependency.add"}}</div>
+					</div>
+					<button class="ui icon button">
+						{{svg "octicon-plus"}}
+					</button>
+				</div>
+			</form>
+		</div>
+	{{end}}
+</div>
+
+{{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
+	<input type="hidden" id="crossRepoSearch" value="{{.AllowCrossRepositoryDependencies}}">
+
+	<div class="ui g-modal-confirm modal remove-dependency">
+		<div class="header">
+			{{svg "octicon-trash"}}
+			{{ctx.Locale.Tr "repo.issues.dependency.remove_header"}}
+		</div>
+		<div class="content">
+			<form method="post" action="{{.Issue.Link}}/dependency/delete" id="removeDependencyForm">
+				{{$.CsrfTokenHtml}}
+				<input type="hidden" value="" name="removeDependencyID" id="removeDependencyID">
+				<input type="hidden" value="" name="dependencyType" id="dependencyType">
+			</form>
+			<p>{{if .Issue.IsPull}}
+				{{ctx.Locale.Tr "repo.issues.dependency.pr_remove_text"}}
+			{{else}}
+				{{ctx.Locale.Tr "repo.issues.dependency.issue_remove_text"}}
+			{{end}}</p>
+		</div>
+		{{$ModalButtonCancelText := ctx.Locale.Tr "repo.issues.dependency.cancel"}}
+		{{$ModalButtonOkText := ctx.Locale.Tr "repo.issues.dependency.remove"}}
+		{{template "base/modal_actions_confirm" (dict "." . "ModalButtonCancelText" $ModalButtonCancelText "ModalButtonOkText" $ModalButtonOkText)}}
+	</div>
+{{end}}

From a8f8667a039171bd37a95a1789771c447b8ef287 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Thu, 25 Apr 2024 14:43:51 +0200
Subject: [PATCH 11/14] Split references and actions

---
 .../repo/issue/view_content/sidebar.tmpl      | 123 +-----------------
 .../issue/view_content/sidebar/actions.tmpl   | 114 ++++++++++++++++
 .../issue/view_content/sidebar/reference.tmpl |   7 +
 3 files changed, 123 insertions(+), 121 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/actions.tmpl
 create mode 100644 templates/repo/issue/view_content/sidebar/reference.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 4c14e08013..b6fe04be63 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -44,131 +44,12 @@
 	{{end}}
 
 	<div class="divider"></div>
-	<div class="ui equal width compact grid">
-		{{$issueReferenceLink := printf "%s#%d" .Issue.Repo.FullName .Issue.Index}}
-		<div class="row tw-items-center" data-tooltip-content="{{$issueReferenceLink}}">
-			<span class="text column truncate">{{ctx.Locale.Tr "repo.issues.reference_link" $issueReferenceLink}}</span>
-			<button class="ui two wide button column tw-p-2" data-clipboard-text="{{$issueReferenceLink}}">{{svg "octicon-copy" 14}}</button>
-		</div>
-	</div>
+	{{template "repo/issue/view_content/sidebar/reference" .}}
 
 	{{if and .IsRepoAdmin (not .Repository.IsArchived)}}
 		<div class="divider"></div>
 
-		{{if or .PinEnabled .Issue.IsPinned}}
-			<form class="tw-mt-1 form-fetch-action single-button-form" method="post" {{if $.NewPinAllowed}}action="{{.Issue.Link}}/pin"{{else}}data-tooltip-content="{{ctx.Locale.Tr "repo.issues.max_pinned"}}"{{end}}>
-				{{$.CsrfTokenHtml}}
-				<button class="fluid ui button {{if not $.NewPinAllowed}}disabled{{end}}">
-					{{if not .Issue.IsPinned}}
-						{{svg "octicon-pin" 16 "tw-mr-2"}}
-						{{ctx.Locale.Tr "pin"}}
-					{{else}}
-						{{svg "octicon-pin-slash" 16 "tw-mr-2"}}
-						{{ctx.Locale.Tr "unpin"}}
-					{{end}}
-				</button>
-			</form>
-		{{end}}
-
-		<button class="tw-mt-1 fluid ui show-modal button {{if .Issue.IsLocked}} negative {{end}}" data-modal="#lock">
-			{{if .Issue.IsLocked}}
-				{{svg "octicon-key"}}
-				{{ctx.Locale.Tr "repo.issues.unlock"}}
-			{{else}}
-				{{svg "octicon-lock"}}
-				{{ctx.Locale.Tr "repo.issues.lock"}}
-			{{end}}
-		</button>
-		<div class="ui tiny modal" id="lock">
-			<div class="header">
-				{{if .Issue.IsLocked}}
-					{{ctx.Locale.Tr "repo.issues.unlock.title"}}
-				{{else}}
-					{{ctx.Locale.Tr "repo.issues.lock.title"}}
-				{{end}}
-			</div>
-			<div class="content">
-				<div class="ui warning message">
-					{{if .Issue.IsLocked}}
-						{{ctx.Locale.Tr "repo.issues.unlock.notice_1"}}<br>
-						{{ctx.Locale.Tr "repo.issues.unlock.notice_2"}}<br>
-					{{else}}
-						{{ctx.Locale.Tr "repo.issues.lock.notice_1"}}<br>
-						{{ctx.Locale.Tr "repo.issues.lock.notice_2"}}<br>
-						{{ctx.Locale.Tr "repo.issues.lock.notice_3"}}<br>
-					{{end}}
-				</div>
-
-				<form class="ui form form-fetch-action" action="{{.Issue.Link}}{{if .Issue.IsLocked}}/unlock{{else}}/lock{{end}}"
-					method="post">
-					{{.CsrfTokenHtml}}
-
-					{{if not .Issue.IsLocked}}
-						<div class="field">
-							<strong> {{ctx.Locale.Tr "repo.issues.lock.reason"}} </strong>
-						</div>
-
-						<div class="field">
-							<div class="ui fluid dropdown selection">
-
-								<select name="reason">
-									<option value=""> </option>
-									{{range .LockReasons}}
-										<option value="{{.}}">{{.}}</option>
-									{{end}}
-								</select>
-								{{svg "octicon-triangle-down" 14 "dropdown icon"}}
-
-								<div class="default text"> </div>
-
-								<div class="menu">
-									{{range .LockReasons}}
-										<div class="item" data-value="{{.}}">{{.}}</div>
-									{{end}}
-								</div>
-							</div>
-						</div>
-					{{end}}
-
-					<div class="text right actions">
-						<button class="ui cancel button">{{ctx.Locale.Tr "settings.cancel"}}</button>
-						<button class="ui red button">
-							{{if .Issue.IsLocked}}
-								{{ctx.Locale.Tr "repo.issues.unlock_confirm"}}
-							{{else}}
-								{{ctx.Locale.Tr "repo.issues.lock_confirm"}}
-							{{end}}
-						</button>
-					</div>
-				</form>
-			</div>
-		</div>
-		<button class="tw-mt-1 fluid ui show-modal button" data-modal="#sidebar-delete-issue">
-			{{svg "octicon-trash"}}
-			{{ctx.Locale.Tr "repo.issues.delete"}}
-		</button>
-		<div class="ui g-modal-confirm modal" id="sidebar-delete-issue">
-			<div class="header">
-				{{if .Issue.IsPull}}
-					{{ctx.Locale.Tr "repo.pulls.delete.title"}}
-				{{else}}
-					{{ctx.Locale.Tr "repo.issues.delete.title"}}
-				{{end}}
-			</div>
-			<div class="content">
-				<p>
-					{{if .Issue.IsPull}}
-						{{ctx.Locale.Tr "repo.pulls.delete.text"}}
-					{{else}}
-						{{ctx.Locale.Tr "repo.issues.delete.text"}}
-					{{end}}
-				</p>
-			</div>
-			<form action="{{.Issue.Link}}/delete" method="post">
-				{{.CsrfTokenHtml}}
-				{{template "base/modal_actions_confirm" .}}
-			</form>
-		</div>
+		{{template "repo/issue/view_content/sidebar/actions" .}}
 	{{end}}
 
 	{{if and .Issue.IsPull .IsIssuePoster (not .Issue.IsClosed) .Issue.PullRequest.HeadRepo}}
diff --git a/templates/repo/issue/view_content/sidebar/actions.tmpl b/templates/repo/issue/view_content/sidebar/actions.tmpl
new file mode 100644
index 0000000000..36f21822aa
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/actions.tmpl
@@ -0,0 +1,114 @@
+{{if or .PinEnabled .Issue.IsPinned}}
+	<form class="tw-mt-1 form-fetch-action single-button-form" method="post" {{if $.NewPinAllowed}}action="{{.Issue.Link}}/pin"{{else}}data-tooltip-content="{{ctx.Locale.Tr "repo.issues.max_pinned"}}"{{end}}>
+		{{$.CsrfTokenHtml}}
+		<button class="fluid ui button {{if not $.NewPinAllowed}}disabled{{end}}">
+			{{if not .Issue.IsPinned}}
+				{{svg "octicon-pin" 16 "tw-mr-2"}}
+				{{ctx.Locale.Tr "pin"}}
+			{{else}}
+				{{svg "octicon-pin-slash" 16 "tw-mr-2"}}
+				{{ctx.Locale.Tr "unpin"}}
+			{{end}}
+		</button>
+	</form>
+{{end}}
+
+<button class="tw-mt-1 fluid ui show-modal button {{if .Issue.IsLocked}} negative {{end}}" data-modal="#lock">
+	{{if .Issue.IsLocked}}
+		{{svg "octicon-key"}}
+		{{ctx.Locale.Tr "repo.issues.unlock"}}
+	{{else}}
+		{{svg "octicon-lock"}}
+		{{ctx.Locale.Tr "repo.issues.lock"}}
+	{{end}}
+</button>
+<div class="ui tiny modal" id="lock">
+	<div class="header">
+		{{if .Issue.IsLocked}}
+			{{ctx.Locale.Tr "repo.issues.unlock.title"}}
+		{{else}}
+			{{ctx.Locale.Tr "repo.issues.lock.title"}}
+		{{end}}
+	</div>
+	<div class="content">
+		<div class="ui warning message">
+			{{if .Issue.IsLocked}}
+				{{ctx.Locale.Tr "repo.issues.unlock.notice_1"}}<br>
+				{{ctx.Locale.Tr "repo.issues.unlock.notice_2"}}<br>
+			{{else}}
+				{{ctx.Locale.Tr "repo.issues.lock.notice_1"}}<br>
+				{{ctx.Locale.Tr "repo.issues.lock.notice_2"}}<br>
+				{{ctx.Locale.Tr "repo.issues.lock.notice_3"}}<br>
+			{{end}}
+		</div>
+
+		<form class="ui form form-fetch-action" action="{{.Issue.Link}}{{if .Issue.IsLocked}}/unlock{{else}}/lock{{end}}"
+			method="post">
+			{{.CsrfTokenHtml}}
+
+			{{if not .Issue.IsLocked}}
+				<div class="field">
+					<strong> {{ctx.Locale.Tr "repo.issues.lock.reason"}} </strong>
+				</div>
+
+				<div class="field">
+					<div class="ui fluid dropdown selection">
+
+						<select name="reason">
+							<option value=""> </option>
+							{{range .LockReasons}}
+								<option value="{{.}}">{{.}}</option>
+							{{end}}
+						</select>
+						{{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+						<div class="default text"> </div>
+
+						<div class="menu">
+							{{range .LockReasons}}
+								<div class="item" data-value="{{.}}">{{.}}</div>
+							{{end}}
+						</div>
+					</div>
+				</div>
+			{{end}}
+
+			<div class="text right actions">
+				<button class="ui cancel button">{{ctx.Locale.Tr "settings.cancel"}}</button>
+				<button class="ui red button">
+					{{if .Issue.IsLocked}}
+						{{ctx.Locale.Tr "repo.issues.unlock_confirm"}}
+					{{else}}
+						{{ctx.Locale.Tr "repo.issues.lock_confirm"}}
+					{{end}}
+				</button>
+			</div>
+		</form>
+	</div>
+</div>
+<button class="tw-mt-1 fluid ui show-modal button" data-modal="#sidebar-delete-issue">
+	{{svg "octicon-trash"}}
+	{{ctx.Locale.Tr "repo.issues.delete"}}
+</button>
+<div class="ui g-modal-confirm modal" id="sidebar-delete-issue">
+	<div class="header">
+		{{if .Issue.IsPull}}
+			{{ctx.Locale.Tr "repo.pulls.delete.title"}}
+		{{else}}
+			{{ctx.Locale.Tr "repo.issues.delete.title"}}
+		{{end}}
+	</div>
+	<div class="content">
+		<p>
+			{{if .Issue.IsPull}}
+				{{ctx.Locale.Tr "repo.pulls.delete.text"}}
+			{{else}}
+				{{ctx.Locale.Tr "repo.issues.delete.text"}}
+			{{end}}
+		</p>
+	</div>
+	<form action="{{.Issue.Link}}/delete" method="post">
+		{{.CsrfTokenHtml}}
+		{{template "base/modal_actions_confirm" .}}
+	</form>
+</div>
diff --git a/templates/repo/issue/view_content/sidebar/reference.tmpl b/templates/repo/issue/view_content/sidebar/reference.tmpl
new file mode 100644
index 0000000000..bbbc099558
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/reference.tmpl
@@ -0,0 +1,7 @@
+<div class="ui equal width compact grid">
+	{{$issueReferenceLink := printf "%s#%d" .Issue.Repo.FullName .Issue.Index}}
+	<div class="row tw-items-center" data-tooltip-content="{{$issueReferenceLink}}">
+		<span class="text column truncate">{{ctx.Locale.Tr "repo.issues.reference_link" $issueReferenceLink}}</span>
+		<button class="ui two wide button column tw-p-2" data-clipboard-text="{{$issueReferenceLink}}">{{svg "octicon-copy" 14}}</button>
+	</div>
+</div>

From 6bd4925753665d87bef393e869cc24f2f11cc1f5 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Thu, 25 Apr 2024 14:56:00 +0200
Subject: [PATCH 12/14] Split allow edits checkbox

---
 templates/repo/issue/view_content/sidebar.tmpl     | 14 +-------------
 .../sidebar/pull_maintainer_edits.tmpl             | 13 +++++++++++++
 2 files changed, 14 insertions(+), 13 deletions(-)
 create mode 100644 templates/repo/issue/view_content/sidebar/pull_maintainer_edits.tmpl

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index b6fe04be63..5740b79adb 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -53,18 +53,6 @@
 	{{end}}
 
 	{{if and .Issue.IsPull .IsIssuePoster (not .Issue.IsClosed) .Issue.PullRequest.HeadRepo}}
-		{{if and (not (eq .Issue.PullRequest.HeadRepo.FullName .Issue.PullRequest.BaseRepo.FullName)) .CanWriteToHeadRepo}}
-			<div class="divider"></div>
-			<div class="inline field">
-				<div class="ui checkbox loading-icon-2px" id="allow-edits-from-maintainers"
-						data-url="{{.Issue.Link}}"
-						data-tooltip-content="{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers_desc"}}"
-						data-prompt-error="{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers_err"}}"
-					>
-					<label><strong>{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers"}}</strong></label>
-					<input type="checkbox" {{if .Issue.PullRequest.AllowMaintainerEdit}}checked{{end}}>
-				</div>
-			</div>
-		{{end}}
+		{{template "repo/issue/view_content/sidebar/pull_maintainer_edits" .}}
 	{{end}}
 </div>
diff --git a/templates/repo/issue/view_content/sidebar/pull_maintainer_edits.tmpl b/templates/repo/issue/view_content/sidebar/pull_maintainer_edits.tmpl
new file mode 100644
index 0000000000..c6a87adde4
--- /dev/null
+++ b/templates/repo/issue/view_content/sidebar/pull_maintainer_edits.tmpl
@@ -0,0 +1,13 @@
+{{if and (not (eq .Issue.PullRequest.HeadRepo.FullName .Issue.PullRequest.BaseRepo.FullName)) .CanWriteToHeadRepo}}
+	<div class="divider"></div>
+	<div class="inline field">
+		<div class="ui checkbox loading-icon-2px" id="allow-edits-from-maintainers"
+				data-url="{{.Issue.Link}}"
+				data-tooltip-content="{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers_desc"}}"
+				data-prompt-error="{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers_err"}}"
+			>
+			<label><strong>{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers"}}</strong></label>
+			<input type="checkbox" {{if .Issue.PullRequest.AllowMaintainerEdit}}checked{{end}}>
+		</div>
+	</div>
+{{end}}

From 66b22c58187649c4fc03dfff2c90d6a8de790465 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Thu, 25 Apr 2024 15:01:16 +0200
Subject: [PATCH 13/14] Unify allow edits logic

---
 .../repo/issue/view_content/sidebar.tmpl      | 10 ++++++++-
 .../sidebar/pull_maintainer_edits.tmpl        | 21 ++++++++-----------
 2 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 5740b79adb..ba15539841 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -52,7 +52,15 @@
 		{{template "repo/issue/view_content/sidebar/actions" .}}
 	{{end}}
 
-	{{if and .Issue.IsPull .IsIssuePoster (not .Issue.IsClosed) .Issue.PullRequest.HeadRepo}}
+	{{if and
+		.Issue.IsPull
+		.IsIssuePoster
+		(not .Issue.IsClosed)
+		.Issue.PullRequest.HeadRepo
+		(not (eq .Issue.PullRequest.HeadRepo.FullName .Issue.PullRequest.BaseRepo.FullName))
+		.CanWriteToHeadRepo
+	}}
+		<div class="divider"></div>
 		{{template "repo/issue/view_content/sidebar/pull_maintainer_edits" .}}
 	{{end}}
 </div>
diff --git a/templates/repo/issue/view_content/sidebar/pull_maintainer_edits.tmpl b/templates/repo/issue/view_content/sidebar/pull_maintainer_edits.tmpl
index c6a87adde4..6ec5c05fd7 100644
--- a/templates/repo/issue/view_content/sidebar/pull_maintainer_edits.tmpl
+++ b/templates/repo/issue/view_content/sidebar/pull_maintainer_edits.tmpl
@@ -1,13 +1,10 @@
-{{if and (not (eq .Issue.PullRequest.HeadRepo.FullName .Issue.PullRequest.BaseRepo.FullName)) .CanWriteToHeadRepo}}
-	<div class="divider"></div>
-	<div class="inline field">
-		<div class="ui checkbox loading-icon-2px" id="allow-edits-from-maintainers"
-				data-url="{{.Issue.Link}}"
-				data-tooltip-content="{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers_desc"}}"
-				data-prompt-error="{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers_err"}}"
-			>
-			<label><strong>{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers"}}</strong></label>
-			<input type="checkbox" {{if .Issue.PullRequest.AllowMaintainerEdit}}checked{{end}}>
-		</div>
+<div class="inline field">
+	<div class="ui checkbox loading-icon-2px" id="allow-edits-from-maintainers"
+			data-url="{{.Issue.Link}}"
+			data-tooltip-content="{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers_desc"}}"
+			data-prompt-error="{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers_err"}}"
+		>
+		<label><strong>{{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers"}}</strong></label>
+		<input type="checkbox" {{if .Issue.PullRequest.AllowMaintainerEdit}}checked{{end}}>
 	</div>
-{{end}}
+</div>

From 5bc72998e0d023cd30bd4474c5a0b37e78345868 Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Thu, 25 Apr 2024 15:08:47 +0200
Subject: [PATCH 14/14] =?UTF-8?q?I=20feel=20responsible=20=E2=80=A6=20(Cod?=
 =?UTF-8?q?eowners)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

… for dealing with conflicts and future modification of this template
---
 CODEOWNERS | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/CODEOWNERS b/CODEOWNERS
index 88c71ba17e..e30d2c42b4 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -16,6 +16,8 @@ web_src/.* @caesar @crystal @gusted
 
 # HTML templates used by the backend.
 templates/.* @caesar @crystal @gusted
+## the issue sidebar was touched by fnetx
+templates/repo/issue/view_content/sidebar.* @fnetx
 
 # Files related to Go development.