Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failure to render PR comments #27564

Closed
xxfogs opened this issue Oct 10, 2023 · 2 comments
Closed

Failure to render PR comments #27564

xxfogs opened this issue Oct 10, 2023 · 2 comments
Milestone

Comments

@xxfogs
Copy link

xxfogs commented Oct 10, 2023

Description

When opening the conversation tab of any Pull Request with comments made on changed files they fail to get rendered with an error

Gitea Version

1.21.0-rc1

Can you reproduce the bug on the Gitea demo site?

No

Log Gist

https://gist.github.com/XXFOGS/a825432a0982d03106e43dd5a4d6827b

Screenshots

image

Git Version

2.37.2

Operating System

Ubuntu 22.10

How are you running Gitea?

Gitea is deployed with docker compose, after trying to recreate this issue in try.gitea.io, I concluded that on nightly builds of 1.22 this issue is no longer present but 1.21.0-rc1 which I had deployed has it.

Database

PostgreSQL

@xxfogs
Copy link
Author

xxfogs commented Oct 10, 2023

A temporary workaround till a new release candidate is to create a comments.tmpl file under {APP_DATA_PATH}/templates/repo/issue/view_content with the reverted contents

  1. Navigate to your APP_DATA_PATH
  2. Create a folder for the template mkdir -p templates/repo/issue/view_content
  3. Edit comments.tmpl nano templates/repo/issue/view_content/comments.tmpl
  4. Enter
this content into `comments.tmpl`
{{template "base/alert"}}
{{range .Issue.Comments}}
	{{if call $.ShouldShowCommentType .Type}}
		{{$createdStr:= TimeSinceUnix .CreatedUnix ctx.Locale}}

		<!-- 0 = COMMENT, 1 = REOPEN, 2 = CLOSE, 3 = ISSUE_REF, 4 = COMMIT_REF,
		5 = COMMENT_REF, 6 = PULL_REF, 7 = COMMENT_LABEL, 12 = START_TRACKING,
		13 = STOP_TRACKING, 14 = ADD_TIME_MANUAL, 16 = ADDED_DEADLINE, 17 = MODIFIED_DEADLINE,
		18 = REMOVED_DEADLINE, 19 = ADD_DEPENDENCY, 20 = REMOVE_DEPENDENCY, 21 = CODE,
		22 = REVIEW, 23 = ISSUE_LOCKED, 24 = ISSUE_UNLOCKED, 25 = TARGET_BRANCH_CHANGED,
		26 = DELETE_TIME_MANUAL, 27 = REVIEW_REQUEST, 28 = MERGE_PULL_REQUEST,
		29 = PULL_PUSH_EVENT, 30 = PROJECT_CHANGED, 31 = PROJECT_BOARD_CHANGED
		32 = DISMISSED_REVIEW, 33 = COMMENT_TYPE_CHANGE_ISSUE_REF, 34 = PR_SCHEDULE_TO_AUTO_MERGE,
		35 = CANCEL_SCHEDULED_AUTO_MERGE_PR, 36 = PIN_ISSUE, 37 = UNPIN_ISSUE -->
		{{if eq .Type 0}}
			<div class="timeline-item comment" id="{{.HashTag}}">
			{{if .OriginalAuthor}}
				<span class="timeline-avatar">
					<img src="{{AppSubUrl}}/assets/img/avatar_default.png" width="40" height="40">
				</span>
			{{else}}
				<a class="timeline-avatar"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}>
					{{ctx.AvatarUtils.Avatar .Poster 40}}
				</a>
			{{end}}
				<div class="content comment-container">
					<div class="ui top attached header comment-header gt-df gt-ac gt-sb" role="heading" aria-level="3">
						<div class="comment-header-left gt-df gt-ac">
							{{if .OriginalAuthor}}
								<span class="text black gt-font-semibold gt-mr-2">
									{{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
									{{.OriginalAuthor}}
								</span>
								<span class="text grey muted-links">
									{{ctx.Locale.Tr "repo.issues.commented_at" (.HashTag|Escape) $createdStr | Safe}} {{if $.Repository.OriginalURL}}
								</span>
								<span class="text migrate">
									({{ctx.Locale.Tr "repo.migrated_from" ($.Repository.OriginalURL|Escape) ($.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}}
								</span>
							{{else}}
								{{if gt .Poster.ID 0}}
									<a class="inline-timeline-avatar" href="{{.Poster.HomeLink}}">
										{{ctx.AvatarUtils.Avatar .Poster 24}}
									</a>
								{{end}}
								<span class="text grey muted-links">
									{{template "shared/user/authorlink" .Poster}}
									{{ctx.Locale.Tr "repo.issues.commented_at" (.HashTag|Escape) $createdStr | Safe}}
								</span>
							{{end}}
						</div>
						<div class="comment-header-right actions gt-df gt-ac">
							{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}}
							{{if not $.Repository.IsArchived}}
								{{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
							{{end}}
							{{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" true "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
						</div>
					</div>
					<div class="ui attached segment comment-body" role="article">
						<div class="render-content markup" {{if or $.Permission.IsAdmin $.HasIssuesOrPullsWritePermission (and $.IsSigned (eq $.SignedUserID .PosterID))}}data-can-edit="true"{{end}}>
							{{if .RenderedContent}}
								{{.RenderedContent|Str2html}}
							{{else}}
								<span class="no-content">{{ctx.Locale.Tr "repo.issues.no_content"}}</span>
							{{end}}
						</div>
						<div id="issuecomment-{{.ID}}-raw" class="raw-content gt-hidden">{{.Content}}</div>
						<div class="edit-content-zone gt-hidden" data-update-url="{{$.RepoLink}}/comments/{{.ID}}" data-context="{{$.RepoLink}}" data-attachment-url="{{$.RepoLink}}/comments/{{.ID}}/attachments"></div>
						{{if .Attachments}}
							{{template "repo/issue/view_content/attachments" dict "ctxData" $ "Attachments" .Attachments "Content" .RenderedContent}}
						{{end}}
					</div>
					{{$reactions := .Reactions.GroupByType}}
					{{if $reactions}}
						{{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
					{{end}}
				</div>
			</div>
		{{else if eq .Type 1}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge gt-bg-green gt-text-white">{{svg "octicon-dot-fill"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{if .Issue.IsPull}}
						{{ctx.Locale.Tr "repo.pulls.reopened_at" .EventTag $createdStr | Safe}}
					{{else}}
						{{ctx.Locale.Tr "repo.issues.reopened_at" .EventTag $createdStr | Safe}}
					{{end}}
				</span>
			</div>
		{{else if eq .Type 2}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge gt-bg-red gt-text-white">{{svg "octicon-circle-slash"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{if .Issue.IsPull}}
						{{ctx.Locale.Tr "repo.pulls.closed_at" .EventTag $createdStr | Safe}}
					{{else}}
						{{ctx.Locale.Tr "repo.issues.closed_at" .EventTag $createdStr | Safe}}
					{{end}}
				</span>
			</div>
		{{else if eq .Type 28}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge gt-bg-purple gt-text-white">{{svg "octicon-git-merge"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{$link := printf "%s/commit/%s" $.Repository.Link ($.Issue.PullRequest.MergedCommitID|PathEscape)}}
					{{if eq $.Issue.PullRequest.Status 3}}
						{{ctx.Locale.Tr "repo.issues.comment_manually_pull_merged_at" (printf `<a class="ui sha" href="%[1]s"><b>%[2]s</b></a>` ($link|Escape) (ShortSha $.Issue.PullRequest.MergedCommitID)) (printf "<b>%[1]s</b>" ($.BaseTarget|Escape)) $createdStr | Safe}}
					{{else}}
						{{ctx.Locale.Tr "repo.issues.comment_pull_merged_at" (printf `<a class="ui sha" href="%[1]s"><b>%[2]s</b></a>` ($link|Escape) (ShortSha $.Issue.PullRequest.MergedCommitID)) (printf "<b>%[1]s</b>" ($.BaseTarget|Escape)) $createdStr | Safe}}
					{{end}}
				</span>
			</div>
		{{else if eq .Type 3 5 6}}
			{{$refFrom:= ""}}
			{{if ne .RefRepoID .Issue.RepoID}}
				{{$refFrom = ctx.Locale.Tr "repo.issues.ref_from" (.RefRepo.FullName|Escape)}}
			{{end}}
			{{$refTr := "repo.issues.ref_issue_from"}}
			{{if .Issue.IsPull}}
				{{$refTr = "repo.issues.ref_pull_from"}}
			{{else if eq .RefAction 1}}
				{{$refTr = "repo.issues.ref_closing_from"}}
			{{else if eq .RefAction 2}}
				{{$refTr = "repo.issues.ref_reopening_from"}}
			{{end}}
			{{$createdStr:= TimeSinceUnix .CreatedUnix ctx.Locale}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-bookmark"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				{{if eq .RefAction 3}}<del>{{end}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr $refTr (.EventTag|Escape) $createdStr ((.RefCommentLink ctx)|Escape) $refFrom | Safe}}
				</span>
				{{if eq .RefAction 3}}</del>{{end}}

				<div class="detail">
					<span class="text grey muted-links"><a href="{{.RefIssueLink ctx}}"><b>{{.RefIssueTitle ctx}}</b> {{.RefIssueIdent ctx}}</a></span>
				</div>
			</div>
		{{else if eq .Type 4}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-bookmark"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.commit_ref_at" .EventTag $createdStr | Safe}}
				</span>
				<div class="detail">
					{{svg "octicon-git-commit"}}
					<span class="text grey muted-links">{{.Content | Str2html}}</span>
				</div>
			</div>
		{{else if eq .Type 7}}
			{{if or .AddedLabels .RemovedLabels}}
				<div class="timeline-item event" id="{{.HashTag}}">
					<span class="badge">{{svg "octicon-tag"}}</span>
					{{template "shared/user/avatarlink" dict "user" .Poster}}
					<span class="text grey muted-links">
						{{template "shared/user/authorlink" .Poster}}
						{{if and .AddedLabels (not .RemovedLabels)}}
							{{ctx.Locale.TrN (len .AddedLabels) "repo.issues.add_label" "repo.issues.add_labels" (RenderLabels $.Context .AddedLabels $.RepoLink) $createdStr | Safe}}
						{{else if and (not .AddedLabels) .RemovedLabels}}
							{{ctx.Locale.TrN (len .RemovedLabels) "repo.issues.remove_label" "repo.issues.remove_labels" (RenderLabels $.Context .RemovedLabels $.RepoLink) $createdStr | Safe}}
						{{else}}
							{{ctx.Locale.Tr "repo.issues.add_remove_labels" (RenderLabels $.Context .AddedLabels $.RepoLink) (RenderLabels $.Context .RemovedLabels $.RepoLink) $createdStr | Safe}}
						{{end}}
					</span>
				</div>
			{{end}}
		{{else if eq .Type 8}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-milestone"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{if gt .OldMilestoneID 0}}{{if gt .MilestoneID 0}}{{ctx.Locale.Tr "repo.issues.change_milestone_at" (.OldMilestone.Name|Escape) (.Milestone.Name|Escape) $createdStr | Safe}}{{else}}{{ctx.Locale.Tr "repo.issues.remove_milestone_at" (.OldMilestone.Name|Escape) $createdStr | Safe}}{{end}}{{else if gt .MilestoneID 0}}{{ctx.Locale.Tr "repo.issues.add_milestone_at" (.Milestone.Name|Escape) $createdStr | Safe}}{{end}}
				</span>
			</div>
		{{else if eq .Type 9}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-person"}}</span>
				{{if gt .AssigneeID 0}}
					{{if .RemovedAssignee}}
						{{template "shared/user/avatarlink" dict "user" .Assignee}}
						<span class="text grey muted-links">
							{{template "shared/user/authorlink" .Assignee}}
							{{if eq .Poster.ID .Assignee.ID}}
								{{ctx.Locale.Tr "repo.issues.remove_self_assignment" $createdStr | Safe}}
							{{else}}
								{{ctx.Locale.Tr "repo.issues.remove_assignee_at" (.Poster.GetDisplayName|Escape) $createdStr | Safe}}
							{{end}}
						</span>
					{{else}}
						{{template "shared/user/avatarlink" dict "user" .Assignee}}
						<span class="text grey muted-links">
							{{template "shared/user/authorlink" .Assignee}}
							{{if eq .Poster.ID .AssigneeID}}
								{{ctx.Locale.Tr "repo.issues.self_assign_at" $createdStr | Safe}}
							{{else}}
								{{ctx.Locale.Tr "repo.issues.add_assignee_at" (.Poster.GetDisplayName|Escape) $createdStr | Safe}}
							{{end}}
						</span>
					{{end}}
				{{end}}
			</div>
		{{else if eq .Type 10}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-pencil"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.change_title_at" (.OldTitle|RenderEmoji $.Context) (.NewTitle|RenderEmoji $.Context) $createdStr | Safe}}
				</span>
			</div>
		{{else if eq .Type 11}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-git-branch"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.delete_branch_at" (.OldRef|Escape) $createdStr | Safe}}
				</span>
			</div>
		{{else if eq .Type 12}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-clock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.start_tracking_history" $createdStr | Safe}}
				</span>
			</div>
		{{else if eq .Type 13}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-clock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.stop_tracking_history" $createdStr | Safe}}
				</span>
				{{template "repo/issue/view_content/comments_delete_time" dict "ctxData" $ "comment" .}}
				<div class="detail">
					{{svg "octicon-clock"}}
					{{if .RenderedContent}}
						{{/* compatibility with time comments made before v1.21 */}}
						<span class="text grey muted-links">{{.RenderedContent}}</span>
					{{else}}
						<span class="text grey muted-links">{{.Content|Sec2Time}}</span>
					{{end}}
				</div>
			</div>
		{{else if eq .Type 14}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-clock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.add_time_history" $createdStr | Safe}}
				</span>
				{{template "repo/issue/view_content/comments_delete_time" dict "ctxData" $ "comment" .}}
				<div class="detail">
					{{svg "octicon-clock"}}
					{{if .RenderedContent}}
						{{/* compatibility with time comments made before v1.21 */}}
						<span class="text grey muted-links">{{.RenderedContent}}</span>
					{{else}}
						<span class="text grey muted-links">{{.Content|Sec2Time}}</span>
					{{end}}
				</div>
			</div>
		{{else if eq .Type 15}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-clock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.cancel_tracking_history" $createdStr | Safe}}
				</span>
			</div>
		{{else if eq .Type 16}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-clock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.due_date_added" (DateTime "long" .Content) $createdStr | Safe}}
				</span>
			</div>
		{{else if eq .Type 17}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-clock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{$parsedDeadline := StringUtils.Split .Content "|"}}
					{{if eq (len $parsedDeadline) 2}}
						{{$from := DateTime "long" (index $parsedDeadline 1)}}
						{{$to := DateTime "long" (index $parsedDeadline 0)}}
						{{ctx.Locale.Tr "repo.issues.due_date_modified" $to $from $createdStr | Safe}}
					{{end}}
				</span>
			</div>
		{{else if eq .Type 18}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-clock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.due_date_remove" (DateTime "long" .Content) $createdStr | Safe}}
				</span>
			</div>
		{{else if eq .Type 19}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-package-dependents"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.dependency.added_dependency" $createdStr | Safe}}
				</span>
				{{if .DependentIssue}}
					<div class="detail">
						{{svg "octicon-plus"}}
						<span class="text grey muted-links">
							<a href="{{.DependentIssue.Link}}">
								{{if eq .DependentIssue.RepoID .Issue.RepoID}}
									#{{.DependentIssue.Index}} {{.DependentIssue.Title}}
								{{else}}
									{{.DependentIssue.Repo.FullName}}#{{.DependentIssue.Index}} - {{.DependentIssue.Title}}
								{{end}}
							</a>
						</span>
					</div>
				{{end}}
			</div>
		{{else if eq .Type 20}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-package-dependents"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.dependency.removed_dependency" $createdStr | Safe}}
				</span>
				{{if .DependentIssue}}
					<div class="detail">
						<span class="text grey muted-links">{{svg "octicon-trash"}}</span>
						<span class="text grey muted-links">
							<a href="{{.DependentIssue.Link}}">
								{{if eq .DependentIssue.RepoID .Issue.RepoID}}
									#{{.DependentIssue.Index}} {{.DependentIssue.Title}}
								{{else}}
									{{.DependentIssue.Repo.FullName}}#{{.DependentIssue.Index}} - {{.DependentIssue.Title}}
								{{end}}
							</a>
						</span>
					</div>
				{{end}}
			</div>
		{{else if eq .Type 22}}
			<div class="timeline-item-group">
				<div class="timeline-item event">
					{{if .OriginalAuthor}}
					{{else}}
					{{/* Some timeline avatars need a offset to correctly allign with their speech
							bubble. The condition depends on review type and for positive reviews whether
							there is a comment element or not */}}
					<a class="timeline-avatar{{if or (and (eq .Review.Type 1) (or .Content .Attachments)) (and (eq .Review.Type 2) (or .Content .Attachments)) (eq .Review.Type 3)}} timeline-avatar-offset{{end}}"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}>
						{{ctx.AvatarUtils.Avatar .Poster 40}}
					</a>
					{{end}}
					<span class="badge{{if eq .Review.Type 1}} gt-bg-green gt-text-white{{else if eq .Review.Type 3}} gt-bg-red gt-text-white{{end}}">{{svg (printf "octicon-%s" .Review.Type.Icon)}}</span>
					<span class="text grey muted-links">
						{{if .OriginalAuthor}}
							<span class="text black">
								{{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
								{{.OriginalAuthor}}
							</span>
							<span class="text grey muted-links"> {{if $.Repository.OriginalURL}}</span>
							<span class="text migrate">({{ctx.Locale.Tr "repo.migrated_from" ($.Repository.OriginalURL|Escape) ($.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}}</span>
						{{else}}
							{{template "shared/user/authorlink" .Poster}}
						{{end}}

						{{if eq .Review.Type 1}}
							{{ctx.Locale.Tr "repo.issues.review.approve" $createdStr | Safe}}
						{{else if eq .Review.Type 2}}
							{{ctx.Locale.Tr "repo.issues.review.comment" $createdStr | Safe}}
						{{else if eq .Review.Type 3}}
							{{ctx.Locale.Tr "repo.issues.review.reject" $createdStr | Safe}}
						{{else}}
							{{ctx.Locale.Tr "repo.issues.review.comment" $createdStr | Safe}}
						{{end}}
						{{if .Review.Dismissed}}
							<div class="ui small label">{{ctx.Locale.Tr "repo.issues.review.dismissed_label"}}</div>
						{{end}}
					</span>
				</div>
				{{if or .Content .Attachments}}
				<div class="timeline-item comment" id="{{.HashTag}}">
					<div class="content comment-container">
						<div class="ui top attached header comment-header gt-df gt-ac gt-sb">
							<div class="comment-header-left gt-df gt-ac">
								{{if gt .Poster.ID 0}}
									<a class="inline-timeline-avatar" href="{{.Poster.HomeLink}}">
										{{ctx.AvatarUtils.Avatar .Poster 24}}
									</a>
								{{end}}
								<span class="text grey muted-links">
									{{if .OriginalAuthor}}
										<span class="text black gt-font-semibold">
											{{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
											{{.OriginalAuthor}}
										</span>
										<span class="text grey muted-links"> {{if $.Repository.OriginalURL}}</span>
										<span class="text migrate">({{ctx.Locale.Tr "repo.migrated_from" ($.Repository.OriginalURL|Escape) ($.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}}</span>
									{{else}}
										{{template "shared/user/authorlink" .Poster}}
									{{end}}

									{{ctx.Locale.Tr "repo.issues.review.left_comment" | Safe}}
								</span>
							</div>
							<div class="comment-header-right actions gt-df gt-ac">
								{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}}
								{{if not $.Repository.IsArchived}}
									{{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
									{{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" false "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
								{{end}}
							</div>
						</div>
						<div class="ui attached segment comment-body">
							<div class="render-content markup" {{if or $.Permission.IsAdmin $.HasIssuesOrPullsWritePermission (and $.IsSigned (eq $.SignedUserID .PosterID))}}data-can-edit="true"{{end}}>
								{{if .RenderedContent}}
									{{.RenderedContent|Str2html}}
								{{else}}
									<span class="no-content">{{ctx.Locale.Tr "repo.issues.no_content"}}</span>
								{{end}}
							</div>
							<div id="issuecomment-{{.ID}}-raw" class="raw-content gt-hidden">{{.Content}}</div>
							<div class="edit-content-zone gt-hidden" data-update-url="{{$.RepoLink}}/comments/{{.ID}}" data-context="{{$.RepoLink}}" data-attachment-url="{{$.RepoLink}}/comments/{{.ID}}/attachments"></div>
							{{if .Attachments}}
								{{template "repo/issue/view_content/attachments" dict "ctxData" $ "Attachments" .Attachments "Content" .RenderedContent}}
							{{end}}
						</div>
						{{$reactions := .Reactions.GroupByType}}
						{{if $reactions}}
							{{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
						{{end}}
					</div>
				</div>
				{{end}}

				{{if .Review.CodeComments}}
				<div class="timeline-item event">
					{{range $filename, $lines := .Review.CodeComments}}
						{{range $line, $comms := $lines}}
								<div class="ui segments">
									<div class="ui segment collapsible-comment-box gt-py-3 gt-df gt-ac gt-sb">
										{{$invalid := (index $comms 0).Invalidated}}
										{{$resolved := (index $comms 0).IsResolved}}
										{{$resolveDoer := (index $comms 0).ResolveDoer}}
										{{$isNotPending := (not (eq (index $comms 0).Review.Type 0))}}
										<div class="gt-df gt-ac">
											<a href="{{(index $comms 0).CodeCommentLink ctx}}" class="file-comment gt-ml-3 gt-word-break">{{$filename}}</a>
											{{if $invalid}}
												<span class="ui label basic small gt-ml-3" data-tooltip-content="{{ctx.Locale.Tr "repo.issues.review.outdated_description"}}">
												{{ctx.Locale.Tr "repo.issues.review.outdated"}}
												</span>
											{{end}}
										</div>
										<div>
											{{if or $invalid $resolved}}
												<button id="show-outdated-{{(index $comms 0).ID}}" data-comment="{{(index $comms 0).ID}}" class="{{if not $resolved}}gt-hidden {{end}}ui compact labeled button show-outdated gt-df gt-ac">
												{{svg "octicon-unfold" 16 "gt-mr-3"}}
												{{if $resolved}}
												{{ctx.Locale.Tr "repo.issues.review.show_resolved"}}
												{{else}}
												{{ctx.Locale.Tr "repo.issues.review.show_outdated"}}
												{{end}}
												</button>
												<button id="hide-outdated-{{(index $comms 0).ID}}" data-comment="{{(index $comms 0).ID}}" class="{{if $resolved}}gt-hidden {{end}}ui compact labeled button hide-outdated gt-df gt-ac">
												{{svg "octicon-fold" 16 "gt-mr-3"}}
												{{if $resolved}}
												{{ctx.Locale.Tr "repo.issues.review.hide_resolved"}}
												{{else}}
												{{ctx.Locale.Tr "repo.issues.review.hide_outdated"}}
												{{end}}
												</button>
											{{end}}
										</div>
									</div>
									{{$diff := (CommentMustAsDiff (index $comms 0))}}
									{{if $diff}}
										{{$file := (index $diff.Files 0)}}
										<div id="code-preview-{{(index $comms 0).ID}}" class="ui table segment{{if $resolved}} gt-hidden{{end}}">
											<div class="diff-file-box diff-box file-content {{TabSizeClass $.Editorconfig $file.Name}}">
												<div class="file-body file-code code-view code-diff code-diff-unified unicode-escaped">
												<table>
												<tbody>
												{{template "repo/diff/section_unified" dict "file" $file "root" $}}
												</tbody>
												</table>
												</div>
											</div>
										</div>
									{{end}}
									<div id="code-comments-{{(index $comms 0).ID}}" class="comment-code-cloud ui segment{{if $resolved}} gt-hidden{{end}}">
										<div class="ui comments gt-mb-0">
											{{range $comms}}
												{{$createdSubStr:= TimeSinceUnix .CreatedUnix ctx.Locale}}
												<div class="comment code-comment gt-pb-4" id="{{.HashTag}}">
												<div class="content">
												<div class="header comment-header">
												<div class="comment-header-left gt-df gt-ac">
												{{if not .OriginalAuthor}}
												<a class="avatar">
												{{ctx.AvatarUtils.Avatar .Poster 20}}
												</a>
												{{end}}
												<span class="text grey muted-links">
												{{if .OriginalAuthor}}
												<span class="text black gt-font-semibold">
												{{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
												{{.OriginalAuthor}}
												</span>
												<span class="text grey muted-links"> {{if $.Repository.OriginalURL}}</span>
												<span class="text migrate">({{ctx.Locale.Tr "repo.migrated_from" ($.Repository.OriginalURL|Escape) ($.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}}</span>
												{{else}}
												{{template "shared/user/authorlink" .Poster}}
												{{end}}
												{{ctx.Locale.Tr "repo.issues.commented_at" (.HashTag|Escape) $createdSubStr | Safe}}
												</span>
												</div>
												<div class="comment-header-right actions gt-df gt-ac">
												{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}}
												{{if not $.Repository.IsArchived}}
												{{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
												{{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" true "issue" true "diff" true "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
												{{end}}
												</div>
												</div>
												<div class="text comment-content">
												<div class="render-content markup" {{if or $.Permission.IsAdmin $.HasIssuesOrPullsWritePermission (and $.IsSigned (eq $.SignedUserID .PosterID))}}data-can-edit="true"{{end}}>
												{{if .RenderedContent}}
												{{.RenderedContent|Str2html}}
												{{else}}
												<span class="no-content">{{ctx.Locale.Tr "repo.issues.no_content"}}</span>
												{{end}}
												</div>
												<div id="issuecomment-{{.ID}}-raw" class="raw-content gt-hidden">{{.Content}}</div>
												<div class="edit-content-zone gt-hidden" data-update-url="{{$.RepoLink}}/comments/{{.ID}}" data-context="{{$.RepoLink}}" data-attachment-url="{{$.RepoLink}}/comments/{{.ID}}/attachments"></div>
												</div>
												{{$reactions := .Reactions.GroupByType}}
												{{if $reactions}}
												{{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
												{{end}}
												</div>
												</div>
											{{end}}
										</div>
										<div class="code-comment-buttons gt-df gt-ac gt-fw gt-mt-3 gt-mb-2 gt-mx-3">
											<div class="gt-f1">
												{{if $resolved}}
												<div class="ui grey text">
												{{svg "octicon-check" 16 "gt-mr-2"}}
												<b>{{$resolveDoer.Name}}</b> {{ctx.Locale.Tr "repo.issues.review.resolved_by"}}
												</div>
												{{end}}
											</div>
											<div class="code-comment-buttons-buttons">
												{{if and $.CanMarkConversation $isNotPending}}
												<button class="ui tiny basic button resolve-conversation" data-origin="timeline" data-action="{{if not $resolved}}Resolve{{else}}UnResolve{{end}}" data-comment-id="{{(index $comms 0).ID}}" data-update-url="{{$.RepoLink}}/issues/resolve_conversation">
												{{if $resolved}}
												{{ctx.Locale.Tr "repo.issues.review.un_resolve_conversation"}}
												{{else}}
												{{ctx.Locale.Tr "repo.issues.review.resolve_conversation"}}
												{{end}}
												</button>
												{{end}}
												{{if and $.SignedUserID (not $.Repository.IsArchived)}}
												<button class="comment-form-reply ui primary tiny labeled icon button gt-ml-2 gt-mr-0">
												{{svg "octicon-reply" 16 "reply icon gt-mr-2"}}{{ctx.Locale.Tr "repo.diff.comment.reply"}}
												</button>
												{{end}}
											</div>
										</div>
										{{template "repo/diff/comment_form_datahandler" dict "hidden" true "reply" (index $comms 0).ReviewID "root" $ "comment" (index $comms 0)}}
									</div>
								</div>
						{{end}}
					{{end}}
				</div>
				{{end}}
			</div>
		{{else if eq .Type 23}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-lock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				{{if .Content}}
					<span class="text grey muted-links">
						{{template "shared/user/authorlink" .Poster}}
						{{ctx.Locale.Tr "repo.issues.lock_with_reason" .Content $createdStr | Safe}}
					</span>
				{{else}}
					<span class="text grey muted-links">
						{{template "shared/user/authorlink" .Poster}}
						{{ctx.Locale.Tr "repo.issues.lock_no_reason" $createdStr | Safe}}
					</span>
				{{end}}
			</div>
		{{else if eq .Type 24}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-key"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{ctx.Locale.Tr "repo.issues.unlock_comment" $createdStr | Safe}}
				</span>
			</div>
		{{else if eq .Type 25}}
			<div class="timeline-item event">
				<span class="badge">{{svg "octicon-git-branch"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					<a{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}>{{.Poster.Name}}</a>
					{{ctx.Locale.Tr "repo.pulls.change_target_branch_at" (.OldRef|Escape) (.NewRef|Escape) $createdStr | Safe}}
				</span>
			</div>
		{{else if eq .Type 26}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-clock"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}

					{{ctx.Locale.Tr "repo.issues.del_time_history" $createdStr | Safe}}
				</span>
				<div class="detail">
					{{svg "octicon-clock"}}
					{{if .RenderedContent}}
						{{/* compatibility with time comments made before v1.21 */}}
						<span class="text grey muted-links">{{.RenderedContent}}</span>
					{{else}}
						<span class="text grey muted-links">- {{.Content|Sec2Time}}</span>
					{{end}}
				</div>
			</div>
		{{else if eq .Type 27}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-eye"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{if (gt .AssigneeID 0)}}
						{{if .RemovedAssignee}}
							{{if eq .PosterID .AssigneeID}}
								{{ctx.Locale.Tr "repo.issues.review.remove_review_request_self" $createdStr | Safe}}
							{{else}}
								{{ctx.Locale.Tr "repo.issues.review.remove_review_request" (.Assignee.GetDisplayName|Escape) $createdStr | Safe}}
							{{end}}
						{{else}}
							{{ctx.Locale.Tr "repo.issues.review.add_review_request" (.Assignee.GetDisplayName|Escape) $createdStr | Safe}}
						{{end}}
					{{else}}
						<!-- If the assigned team is deleted, just displaying "Ghost Team" in the comment -->
						{{$teamName := "Ghost Team"}}
						{{if .AssigneeTeam}}
							{{$teamName = .AssigneeTeam.Name}}
						{{end}}
						{{if .RemovedAssignee}}
							{{ctx.Locale.Tr "repo.issues.review.remove_review_request" ($teamName|Escape) $createdStr | Safe}}
						{{else}}
							{{ctx.Locale.Tr "repo.issues.review.add_review_request" ($teamName|Escape) $createdStr | Safe}}
						{{end}}
					{{end}}
				</span>
			</div>
		{{else if and (eq .Type 29) (or (gt .CommitsNum 0) .IsForcePush)}}
			<!-- If PR is closed, the comments whose type is CommentTypePullRequestPush(29) after latestCloseCommentID won't be rendered. //-->
			{{if and .Issue.IsClosed (gt .ID $.LatestCloseCommentID)}}
				{{continue}}
			{{end}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-repo-push"}}</span>
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{if .IsForcePush}}
						{{ctx.Locale.Tr "repo.issues.force_push_codes" ($.Issue.PullRequest.HeadBranch|Escape) (ShortSha .OldCommit) (($.Issue.Repo.CommitLink .OldCommit)|Escape) (ShortSha .NewCommit) (($.Issue.Repo.CommitLink .NewCommit)|Escape) $createdStr | Safe}}
					{{else}}
						{{ctx.Locale.TrN (len .Commits) "repo.issues.push_commit_1" "repo.issues.push_commits_n" (len .Commits) $createdStr | Safe}}
					{{end}}
				</span>
				{{if and .IsForcePush $.Issue.PullRequest.BaseRepo.Name}}
				<span class="gt-float-right comparebox">
					<a href="{{$.Issue.PullRequest.BaseRepo.Link}}/compare/{{PathEscape .OldCommit}}..{{PathEscape .NewCommit}}" rel="nofollow" class="ui compare label">{{ctx.Locale.Tr "repo.issues.force_push_compare"}}</a>
				</span>
				{{end}}
			</div>
			{{if not .IsForcePush}}
				{{template "repo/commits_list_small" dict "comment" . "root" $}}
			{{end}}
		{{else if eq .Type 30}}
			{{if not $.UnitProjectsGlobalDisabled}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-project"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{$oldProjectDisplayHtml := "Unknown Project"}}
					{{if .OldProject}}
						{{$trKey := printf "projects.type-%d.display_name" .OldProject.Type}}
						{{$oldProjectDisplayHtml = printf `<span data-tooltip-content="%s">%s</span>` (ctx.Locale.Tr $trKey | Escape) (.OldProject.Title | Escape)}}
					{{end}}
					{{$newProjectDisplayHtml := "Unknown Project"}}
					{{if .Project}}
						{{$trKey := printf "projects.type-%d.display_name" .Project.Type}}
						{{$newProjectDisplayHtml = printf `<span data-tooltip-content="%s">%s</span>` (ctx.Locale.Tr $trKey | Escape) (.Project.Title | Escape)}}
					{{end}}
					{{if and (gt .OldProjectID 0) (gt .ProjectID 0)}}
						{{ctx.Locale.Tr "repo.issues.change_project_at" $oldProjectDisplayHtml $newProjectDisplayHtml $createdStr | Safe}}
					{{else if gt .OldProjectID 0}}
						{{ctx.Locale.Tr "repo.issues.remove_project_at" $oldProjectDisplayHtml $createdStr | Safe}}
					{{else if gt .ProjectID 0}}
						{{ctx.Locale.Tr "repo.issues.add_project_at" $newProjectDisplayHtml $createdStr | Safe}}
					{{end}}
				</span>
			</div>
			{{end}}
		{{else if eq .Type 32}}
			<div class="timeline-item-group">
				<div class="timeline-item event" id="{{.HashTag}}">
					<a class="timeline-avatar"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}>
						<img src="{{.Poster.AvatarLink $.Context}}" width="40" height="40">
					</a>
					<span class="badge grey">{{svg "octicon-x" 16}}</span>
					<span class="text grey muted-links">
						{{template "shared/user/authorlink" .Poster}}
						{{$reviewerName := ""}}
						{{if eq .Review.OriginalAuthor ""}}
							{{$reviewerName = .Review.Reviewer.Name}}
						{{else}}
							{{$reviewerName = .Review.OriginalAuthor}}
						{{end}}
						{{ctx.Locale.Tr "repo.issues.review.dismissed" $reviewerName $createdStr | Safe}}
					</span>
				</div>
				{{if .Content}}
					<div class="timeline-item comment">
						<div class="content">
							<div class="ui top attached header comment-header-left gt-df gt-ac arrow-top">
								{{if gt .Poster.ID 0}}
									<a class="inline-timeline-avatar" href="{{.Poster.HomeLink}}">
										{{ctx.AvatarUtils.Avatar .Poster 24}}
									</a>
								{{end}}
								<span class="text grey muted-links">
									{{ctx.Locale.Tr "action.review_dismissed_reason"}}
								</span>
							</div>
							<div class="ui attached segment">
								<div class="render-content markup">
									{{if .RenderedContent}}
										{{.RenderedContent|Str2html}}
									{{else}}
										<span class="no-content">{{ctx.Locale.Tr "repo.issues.no_content"}}</span>
									{{end}}
								</div>
							</div>
						</div>
					</div>
				{{end}}
			</div>
		{{else if eq .Type 33}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-git-branch"}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{if and .OldRef .NewRef}}
						{{ctx.Locale.Tr "repo.issues.change_ref_at" (.OldRef|Escape) (.NewRef|Escape) $createdStr | Safe}}
					{{else if .OldRef}}
						{{ctx.Locale.Tr "repo.issues.remove_ref_at" (.OldRef|Escape) $createdStr | Safe}}
					{{else}}
						{{ctx.Locale.Tr "repo.issues.add_ref_at" (.NewRef|Escape) $createdStr | Safe}}
					{{end}}
				</span>
			</div>
		{{else if or (eq .Type 34) (eq .Type 35)}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-git-merge" 16}}</span>
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{if eq .Type 34}}{{ctx.Locale.Tr "repo.pulls.auto_merge_newly_scheduled_comment" $createdStr | Safe}}
					{{else}}{{ctx.Locale.Tr "repo.pulls.auto_merge_canceled_schedule_comment" $createdStr | Safe}}{{end}}
				</span>
			</div>
		{{else if or (eq .Type 36) (eq .Type 37)}}
			<div class="timeline-item event" id="{{.HashTag}}">
				<span class="badge">{{svg "octicon-pin" 16}}</span>
				{{template "shared/user/avatarlink" dict "user" .Poster}}
				<span class="text grey muted-links">
					{{template "shared/user/authorlink" .Poster}}
					{{if eq .Type 36}}{{ctx.Locale.Tr "repo.issues.pin_comment" $createdStr | Safe}}
					{{else}}{{ctx.Locale.Tr "repo.issues.unpin_comment" $createdStr | Safe}}{{end}}
				</span>
			</div>
		{{end}}
	{{end}}
{{end}}

silverwind pushed a commit that referenced this issue Oct 11, 2023
@lunny
Copy link
Member

lunny commented Oct 11, 2023

closed by #27567

@lunny lunny closed this as completed Oct 11, 2023
@lunny lunny added this to the 1.20.6 milestone Oct 11, 2023
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Nov 26, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants