code.gitea.io/gitea@v1.22.3/templates/repo/issue/view_content/comments.tmpl (about) 1 {{template "base/alert"}} 2 {{range .Issue.Comments}} 3 {{if call $.ShouldShowCommentType .Type}} 4 {{$createdStr:= TimeSinceUnix .CreatedUnix ctx.Locale}} 5 6 <!-- 0 = COMMENT, 1 = REOPEN, 2 = CLOSE, 3 = ISSUE_REF, 4 = COMMIT_REF, 7 5 = COMMENT_REF, 6 = PULL_REF, 7 = COMMENT_LABEL, 8 = MILESTONE_CHANGE, 8 9 = ASSIGNEES_CHANGE, 10 = TITLE_CHANGE, 11 = DELETE_BRANCH, 12 = START_TRACKING, 9 13 = STOP_TRACKING, 14 = ADD_TIME_MANUAL, 16 = ADDED_DEADLINE, 17 = MODIFIED_DEADLINE, 10 18 = REMOVED_DEADLINE, 19 = ADD_DEPENDENCY, 20 = REMOVE_DEPENDENCY, 21 = CODE, 11 22 = REVIEW, 23 = ISSUE_LOCKED, 24 = ISSUE_UNLOCKED, 25 = TARGET_BRANCH_CHANGED, 12 26 = DELETE_TIME_MANUAL, 27 = REVIEW_REQUEST, 28 = MERGE_PULL_REQUEST, 13 29 = PULL_PUSH_EVENT, 30 = PROJECT_CHANGED, 31 = PROJECT_BOARD_CHANGED 14 32 = DISMISSED_REVIEW, 33 = COMMENT_TYPE_CHANGE_ISSUE_REF, 34 = PR_SCHEDULE_TO_AUTO_MERGE, 15 35 = CANCEL_SCHEDULED_AUTO_MERGE_PR, 36 = PIN_ISSUE, 37 = UNPIN_ISSUE --> 16 {{if eq .Type 0}} 17 <div class="timeline-item comment" id="{{.HashTag}}"> 18 {{if .OriginalAuthor}} 19 <span class="timeline-avatar"> 20 {{ctx.AvatarUtils.Avatar nil 40}} 21 </span> 22 {{else}} 23 <a class="timeline-avatar"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}> 24 {{ctx.AvatarUtils.Avatar .Poster 40}} 25 </a> 26 {{end}} 27 <div class="content comment-container"> 28 <div class="ui top attached header comment-header tw-flex tw-items-center tw-justify-between" role="heading" aria-level="3"> 29 <div class="comment-header-left tw-flex tw-items-center"> 30 {{if .OriginalAuthor}} 31 <span class="text black tw-font-semibold tw-mr-1"> 32 {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} 33 {{.OriginalAuthor}} 34 </span> 35 <span class="text grey muted-links"> 36 {{ctx.Locale.Tr "repo.issues.commented_at" .HashTag $createdStr}} {{if $.Repository.OriginalURL}} 37 </span> 38 <span class="text migrate"> 39 ({{ctx.Locale.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname}}){{end}} 40 </span> 41 {{else}} 42 {{if gt .Poster.ID 0}} 43 <a class="inline-timeline-avatar" href="{{.Poster.HomeLink}}"> 44 {{ctx.AvatarUtils.Avatar .Poster 24}} 45 </a> 46 {{end}} 47 <span class="text grey muted-links"> 48 {{template "shared/user/authorlink" .Poster}} 49 {{ctx.Locale.Tr "repo.issues.commented_at" .HashTag $createdStr}} 50 </span> 51 {{end}} 52 </div> 53 <div class="comment-header-right actions tw-flex tw-items-center"> 54 {{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}} 55 {{if not $.Repository.IsArchived}} 56 {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} 57 {{end}} 58 {{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" true "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}} 59 </div> 60 </div> 61 <div class="ui attached segment comment-body" role="article"> 62 <div class="render-content markup" {{if or $.Permission.IsAdmin $.HasIssuesOrPullsWritePermission (and $.IsSigned (eq $.SignedUserID .PosterID))}}data-can-edit="true"{{end}}> 63 {{if .RenderedContent}} 64 {{.RenderedContent}} 65 {{else}} 66 <span class="no-content">{{ctx.Locale.Tr "repo.issues.no_content"}}</span> 67 {{end}} 68 </div> 69 <div id="issuecomment-{{.ID}}-raw" class="raw-content tw-hidden">{{.Content}}</div> 70 <div class="edit-content-zone tw-hidden" data-update-url="{{$.RepoLink}}/comments/{{.ID}}" data-context="{{$.RepoLink}}" data-attachment-url="{{$.RepoLink}}/comments/{{.ID}}/attachments"></div> 71 {{if .Attachments}} 72 {{template "repo/issue/view_content/attachments" dict "Attachments" .Attachments "RenderedContent" .RenderedContent}} 73 {{end}} 74 </div> 75 {{$reactions := .Reactions.GroupByType}} 76 {{if $reactions}} 77 {{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}} 78 {{end}} 79 </div> 80 </div> 81 {{else if eq .Type 1}} 82 <div class="timeline-item event" id="{{.HashTag}}"> 83 <span class="badge tw-bg-green tw-text-white">{{svg "octicon-dot-fill"}}</span> 84 {{if not .OriginalAuthor}} 85 {{template "shared/user/avatarlink" dict "user" .Poster}} 86 {{end}} 87 <span class="text grey muted-links"> 88 {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}} 89 {{if .Issue.IsPull}} 90 {{ctx.Locale.Tr "repo.pulls.reopened_at" .EventTag $createdStr}} 91 {{else}} 92 {{ctx.Locale.Tr "repo.issues.reopened_at" .EventTag $createdStr}} 93 {{end}} 94 </span> 95 </div> 96 {{else if eq .Type 2}} 97 <div class="timeline-item event" id="{{.HashTag}}"> 98 <span class="badge tw-bg-red tw-text-white">{{svg "octicon-circle-slash"}}</span> 99 {{if not .OriginalAuthor}} 100 {{template "shared/user/avatarlink" dict "user" .Poster}} 101 {{end}} 102 <span class="text grey muted-links"> 103 {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}} 104 {{if .Issue.IsPull}} 105 {{ctx.Locale.Tr "repo.pulls.closed_at" .EventTag $createdStr}} 106 {{else}} 107 {{ctx.Locale.Tr "repo.issues.closed_at" .EventTag $createdStr}} 108 {{end}} 109 </span> 110 </div> 111 {{else if eq .Type 28}} 112 <div class="timeline-item event" id="{{.HashTag}}"> 113 <span class="badge tw-bg-purple tw-text-white">{{svg "octicon-git-merge"}}</span> 114 {{if not .OriginalAuthor}} 115 {{template "shared/user/avatarlink" dict "user" .Poster}} 116 {{end}} 117 <span class="text grey muted-links"> 118 {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}} 119 {{$link := printf "%s/commit/%s" $.Repository.Link ($.Issue.PullRequest.MergedCommitID|PathEscape)}} 120 {{if eq $.Issue.PullRequest.Status 3}} 121 {{ctx.Locale.Tr "repo.issues.comment_manually_pull_merged_at" (HTMLFormat `<a class="ui sha" href="%[1]s"><b>%[2]s</b></a>` $link (ShortSha $.Issue.PullRequest.MergedCommitID)) (HTMLFormat "<b>%[1]s</b>" $.BaseTarget) $createdStr}} 122 {{else}} 123 {{ctx.Locale.Tr "repo.issues.comment_pull_merged_at" (HTMLFormat `<a class="ui sha" href="%[1]s"><b>%[2]s</b></a>` $link (ShortSha $.Issue.PullRequest.MergedCommitID)) (HTMLFormat "<b>%[1]s</b>" $.BaseTarget) $createdStr}} 124 {{end}} 125 </span> 126 </div> 127 {{else if eq .Type 3 5 6}} 128 {{$refFrom:= ""}} 129 {{if ne .RefRepoID .Issue.RepoID}} 130 {{$refFrom = ctx.Locale.Tr "repo.issues.ref_from" .RefRepo.FullName}} 131 {{end}} 132 {{$refTr := "repo.issues.ref_issue_from"}} 133 {{if .Issue.IsPull}} 134 {{$refTr = "repo.issues.ref_pull_from"}} 135 {{else if eq .RefAction 1}} 136 {{$refTr = "repo.issues.ref_closing_from"}} 137 {{else if eq .RefAction 2}} 138 {{$refTr = "repo.issues.ref_reopening_from"}} 139 {{end}} 140 {{$createdStr:= TimeSinceUnix .CreatedUnix ctx.Locale}} 141 <div class="timeline-item event" id="{{.HashTag}}"> 142 <span class="badge">{{svg "octicon-bookmark"}}</span> 143 {{template "shared/user/avatarlink" dict "user" .Poster}} 144 {{if eq .RefAction 3}}<del>{{end}} 145 <span class="text grey muted-links"> 146 {{template "shared/user/authorlink" .Poster}} 147 {{ctx.Locale.Tr $refTr .EventTag $createdStr (.RefCommentLink ctx) $refFrom}} 148 </span> 149 {{if eq .RefAction 3}}</del>{{end}} 150 151 <div class="detail flex-text-block"> 152 <span class="text grey muted-links"><a href="{{.RefIssueLink ctx}}"><b>{{.RefIssueTitle ctx}}</b> {{.RefIssueIdent ctx}}</a></span> 153 </div> 154 </div> 155 {{else if eq .Type 4}} 156 <div class="timeline-item event" id="{{.HashTag}}"> 157 <span class="badge">{{svg "octicon-bookmark"}}</span> 158 {{template "shared/user/avatarlink" dict "user" .Poster}} 159 <span class="text grey muted-links"> 160 {{template "shared/user/authorlink" .Poster}} 161 {{ctx.Locale.Tr "repo.issues.commit_ref_at" .EventTag $createdStr}} 162 </span> 163 <div class="detail flex-text-block"> 164 {{svg "octicon-git-commit"}} 165 <span class="text grey muted-links">{{.Content | SanitizeHTML}}</span> 166 </div> 167 </div> 168 {{else if eq .Type 7}} 169 {{if or .AddedLabels .RemovedLabels}} 170 <div class="timeline-item event" id="{{.HashTag}}"> 171 <span class="badge">{{svg "octicon-tag"}}</span> 172 {{template "shared/user/avatarlink" dict "user" .Poster}} 173 <span class="text grey muted-links"> 174 {{template "shared/user/authorlink" .Poster}} 175 {{if and .AddedLabels (not .RemovedLabels)}} 176 {{ctx.Locale.TrN (len .AddedLabels) "repo.issues.add_label" "repo.issues.add_labels" (RenderLabels ctx ctx.Locale .AddedLabels $.RepoLink .Issue) $createdStr}} 177 {{else if and (not .AddedLabels) .RemovedLabels}} 178 {{ctx.Locale.TrN (len .RemovedLabels) "repo.issues.remove_label" "repo.issues.remove_labels" (RenderLabels ctx ctx.Locale .RemovedLabels $.RepoLink .Issue) $createdStr}} 179 {{else}} 180 {{ctx.Locale.Tr "repo.issues.add_remove_labels" (RenderLabels ctx ctx.Locale .AddedLabels $.RepoLink .Issue) (RenderLabels ctx ctx.Locale .RemovedLabels $.RepoLink .Issue) $createdStr}} 181 {{end}} 182 </span> 183 </div> 184 {{end}} 185 {{else if eq .Type 8}} 186 <div class="timeline-item event" id="{{.HashTag}}"> 187 <span class="badge">{{svg "octicon-milestone"}}</span> 188 {{template "shared/user/avatarlink" dict "user" .Poster}} 189 <span class="text grey muted-links"> 190 {{template "shared/user/authorlink" .Poster}} 191 {{if gt .OldMilestoneID 0}}{{if gt .MilestoneID 0}}{{ctx.Locale.Tr "repo.issues.change_milestone_at" .OldMilestone.Name .Milestone.Name $createdStr}}{{else}}{{ctx.Locale.Tr "repo.issues.remove_milestone_at" .OldMilestone.Name $createdStr}}{{end}}{{else if gt .MilestoneID 0}}{{ctx.Locale.Tr "repo.issues.add_milestone_at" .Milestone.Name $createdStr}}{{end}} 192 </span> 193 </div> 194 {{else if and (eq .Type 9) (gt .AssigneeID 0)}} 195 <div class="timeline-item event" id="{{.HashTag}}"> 196 <span class="badge">{{svg "octicon-person"}}</span> 197 {{if .RemovedAssignee}} 198 {{template "shared/user/avatarlink" dict "user" .Assignee}} 199 <span class="text grey muted-links"> 200 {{template "shared/user/authorlink" .Assignee}} 201 {{if eq .Poster.ID .Assignee.ID}} 202 {{ctx.Locale.Tr "repo.issues.remove_self_assignment" $createdStr}} 203 {{else}} 204 {{ctx.Locale.Tr "repo.issues.remove_assignee_at" .Poster.GetDisplayName $createdStr}} 205 {{end}} 206 </span> 207 {{else}} 208 {{template "shared/user/avatarlink" dict "user" .Assignee}} 209 <span class="text grey muted-links"> 210 {{template "shared/user/authorlink" .Assignee}} 211 {{if eq .Poster.ID .AssigneeID}} 212 {{ctx.Locale.Tr "repo.issues.self_assign_at" $createdStr}} 213 {{else}} 214 {{ctx.Locale.Tr "repo.issues.add_assignee_at" .Poster.GetDisplayName $createdStr}} 215 {{end}} 216 </span> 217 {{end}} 218 </div> 219 {{else if eq .Type 10}} 220 <div class="timeline-item event" id="{{.HashTag}}"> 221 <span class="badge">{{svg "octicon-pencil"}}</span> 222 {{template "shared/user/avatarlink" dict "user" .Poster}} 223 <span class="text grey muted-links"> 224 {{template "shared/user/authorlink" .Poster}} 225 {{ctx.Locale.Tr "repo.issues.change_title_at" (.OldTitle|RenderEmoji $.Context) (.NewTitle|RenderEmoji $.Context) $createdStr}} 226 </span> 227 </div> 228 {{else if eq .Type 11}} 229 <div class="timeline-item event" id="{{.HashTag}}"> 230 <span class="badge">{{svg "octicon-git-branch"}}</span> 231 {{template "shared/user/avatarlink" dict "user" .Poster}} 232 <span class="text grey muted-links"> 233 {{template "shared/user/authorlink" .Poster}} 234 {{ctx.Locale.Tr "repo.issues.delete_branch_at" .OldRef $createdStr}} 235 </span> 236 </div> 237 {{else if eq .Type 12}} 238 <div class="timeline-item event" id="{{.HashTag}}"> 239 <span class="badge">{{svg "octicon-clock"}}</span> 240 {{template "shared/user/avatarlink" dict "user" .Poster}} 241 <span class="text grey muted-links"> 242 {{template "shared/user/authorlink" .Poster}} 243 {{ctx.Locale.Tr "repo.issues.start_tracking_history" $createdStr}} 244 </span> 245 </div> 246 {{else if eq .Type 13}} 247 <div class="timeline-item event" id="{{.HashTag}}"> 248 <span class="badge">{{svg "octicon-clock"}}</span> 249 {{template "shared/user/avatarlink" dict "user" .Poster}} 250 <span class="text grey muted-links"> 251 {{template "shared/user/authorlink" .Poster}} 252 {{ctx.Locale.Tr "repo.issues.stop_tracking_history" $createdStr}} 253 </span> 254 {{template "repo/issue/view_content/comments_delete_time" dict "ctxData" $ "comment" .}} 255 <div class="detail flex-text-block"> 256 {{svg "octicon-clock"}} 257 {{if .RenderedContent}} 258 {{/* compatibility with time comments made before v1.21 */}} 259 <span class="text grey muted-links">{{.RenderedContent}}</span> 260 {{else}} 261 <span class="text grey muted-links">{{.Content|Sec2Time}}</span> 262 {{end}} 263 </div> 264 </div> 265 {{else if eq .Type 14}} 266 <div class="timeline-item event" id="{{.HashTag}}"> 267 <span class="badge">{{svg "octicon-clock"}}</span> 268 {{template "shared/user/avatarlink" dict "user" .Poster}} 269 <span class="text grey muted-links"> 270 {{template "shared/user/authorlink" .Poster}} 271 {{ctx.Locale.Tr "repo.issues.add_time_history" $createdStr}} 272 </span> 273 {{template "repo/issue/view_content/comments_delete_time" dict "ctxData" $ "comment" .}} 274 <div class="detail flex-text-block"> 275 {{svg "octicon-clock"}} 276 {{if .RenderedContent}} 277 {{/* compatibility with time comments made before v1.21 */}} 278 <span class="text grey muted-links">{{.RenderedContent}}</span> 279 {{else}} 280 <span class="text grey muted-links">{{.Content|Sec2Time}}</span> 281 {{end}} 282 </div> 283 </div> 284 {{else if eq .Type 15}} 285 <div class="timeline-item event" id="{{.HashTag}}"> 286 <span class="badge">{{svg "octicon-clock"}}</span> 287 {{template "shared/user/avatarlink" dict "user" .Poster}} 288 <span class="text grey muted-links"> 289 {{template "shared/user/authorlink" .Poster}} 290 {{ctx.Locale.Tr "repo.issues.cancel_tracking_history" $createdStr}} 291 </span> 292 </div> 293 {{else if eq .Type 16}} 294 <div class="timeline-item event" id="{{.HashTag}}"> 295 <span class="badge">{{svg "octicon-clock"}}</span> 296 {{template "shared/user/avatarlink" dict "user" .Poster}} 297 <span class="text grey muted-links"> 298 {{template "shared/user/authorlink" .Poster}} 299 {{ctx.Locale.Tr "repo.issues.due_date_added" (DateTime "long" .Content) $createdStr}} 300 </span> 301 </div> 302 {{else if eq .Type 17}} 303 <div class="timeline-item event" id="{{.HashTag}}"> 304 <span class="badge">{{svg "octicon-clock"}}</span> 305 {{template "shared/user/avatarlink" dict "user" .Poster}} 306 <span class="text grey muted-links"> 307 {{template "shared/user/authorlink" .Poster}} 308 {{$parsedDeadline := StringUtils.Split .Content "|"}} 309 {{if eq (len $parsedDeadline) 2}} 310 {{$from := DateTime "long" (index $parsedDeadline 1)}} 311 {{$to := DateTime "long" (index $parsedDeadline 0)}} 312 {{ctx.Locale.Tr "repo.issues.due_date_modified" $to $from $createdStr}} 313 {{end}} 314 </span> 315 </div> 316 {{else if eq .Type 18}} 317 <div class="timeline-item event" id="{{.HashTag}}"> 318 <span class="badge">{{svg "octicon-clock"}}</span> 319 {{template "shared/user/avatarlink" dict "user" .Poster}} 320 <span class="text grey muted-links"> 321 {{template "shared/user/authorlink" .Poster}} 322 {{ctx.Locale.Tr "repo.issues.due_date_remove" (DateTime "long" .Content) $createdStr}} 323 </span> 324 </div> 325 {{else if eq .Type 19}} 326 <div class="timeline-item event" id="{{.HashTag}}"> 327 <span class="badge">{{svg "octicon-package-dependents"}}</span> 328 {{template "shared/user/avatarlink" dict "user" .Poster}} 329 <span class="text grey muted-links"> 330 {{template "shared/user/authorlink" .Poster}} 331 {{ctx.Locale.Tr "repo.issues.dependency.added_dependency" $createdStr}} 332 </span> 333 {{if .DependentIssue}} 334 <div class="detail flex-text-block"> 335 {{svg "octicon-plus"}} 336 <span class="text grey muted-links"> 337 <a href="{{.DependentIssue.Link}}"> 338 {{if eq .DependentIssue.RepoID .Issue.RepoID}} 339 #{{.DependentIssue.Index}} {{.DependentIssue.Title}} 340 {{else}} 341 {{.DependentIssue.Repo.FullName}}#{{.DependentIssue.Index}} - {{.DependentIssue.Title}} 342 {{end}} 343 </a> 344 </span> 345 </div> 346 {{end}} 347 </div> 348 {{else if eq .Type 20}} 349 <div class="timeline-item event" id="{{.HashTag}}"> 350 <span class="badge">{{svg "octicon-package-dependents"}}</span> 351 {{template "shared/user/avatarlink" dict "user" .Poster}} 352 <span class="text grey muted-links"> 353 {{template "shared/user/authorlink" .Poster}} 354 {{ctx.Locale.Tr "repo.issues.dependency.removed_dependency" $createdStr}} 355 </span> 356 {{if .DependentIssue}} 357 <div class="detail flex-text-block"> 358 {{svg "octicon-trash"}} 359 <span class="text grey muted-links"> 360 <a href="{{.DependentIssue.Link}}"> 361 {{if eq .DependentIssue.RepoID .Issue.RepoID}} 362 #{{.DependentIssue.Index}} {{.DependentIssue.Title}} 363 {{else}} 364 {{.DependentIssue.Repo.FullName}}#{{.DependentIssue.Index}} - {{.DependentIssue.Title}} 365 {{end}} 366 </a> 367 </span> 368 </div> 369 {{end}} 370 </div> 371 {{else if eq .Type 22}} 372 <div class="timeline-item-group" id="{{.HashTag}}"> 373 <div class="timeline-item event"> 374 {{$reviewType := -1}} 375 {{if .Review}}{{$reviewType = .Review.Type}}{{end}} 376 {{if not .OriginalAuthor}} 377 {{/* Some timeline avatars need a offset to correctly align with their speech bubble. 378 The condition depends on whether the comment has contents/attachments or reviews */}} 379 <a class="timeline-avatar{{if or .Content .Attachments (and .Review .Review.CodeComments)}} timeline-avatar-offset{{end}}"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}> 380 {{ctx.AvatarUtils.Avatar .Poster 40}} 381 </a> 382 {{end}} 383 <span class="badge{{if eq $reviewType 1}} tw-bg-green tw-text-white{{else if eq $reviewType 3}} tw-bg-red tw-text-white{{end}}"> 384 {{if .Review}}{{svg (printf "octicon-%s" .Review.Type.Icon)}}{{end}} 385 </span> 386 <span class="text grey muted-links"> 387 {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}} 388 {{if eq $reviewType 1}} 389 {{ctx.Locale.Tr "repo.issues.review.approve" $createdStr}} 390 {{else if eq $reviewType 2}} 391 {{ctx.Locale.Tr "repo.issues.review.comment" $createdStr}} 392 {{else if eq $reviewType 3}} 393 {{ctx.Locale.Tr "repo.issues.review.reject" $createdStr}} 394 {{else}} 395 {{ctx.Locale.Tr "repo.issues.review.comment" $createdStr}} 396 {{end}} 397 {{if and .Review .Review.Dismissed}} 398 <div class="ui small label">{{ctx.Locale.Tr "repo.issues.review.dismissed_label"}}</div> 399 {{end}} 400 </span> 401 </div> 402 {{if or .Content .Attachments}} 403 <div class="timeline-item comment"> 404 <div class="content comment-container"> 405 <div class="ui top attached header comment-header tw-flex tw-items-center tw-justify-between"> 406 <div class="comment-header-left tw-flex tw-items-center"> 407 {{if gt .Poster.ID 0}} 408 <a class="inline-timeline-avatar" href="{{.Poster.HomeLink}}"> 409 {{ctx.AvatarUtils.Avatar .Poster 24}} 410 </a> 411 {{end}} 412 <span class="text grey muted-links"> 413 {{if .OriginalAuthor}} 414 <span class="text black tw-font-semibold"> 415 {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} 416 {{.OriginalAuthor}} 417 </span> 418 <span class="text grey muted-links"> {{if $.Repository.OriginalURL}}</span> 419 <span class="text migrate">({{ctx.Locale.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname}}){{end}}</span> 420 {{else}} 421 {{template "shared/user/authorlink" .Poster}} 422 {{end}} 423 424 {{ctx.Locale.Tr "repo.issues.review.left_comment"}} 425 </span> 426 </div> 427 <div class="comment-header-right actions tw-flex tw-items-center"> 428 {{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}} 429 {{if not $.Repository.IsArchived}} 430 {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} 431 {{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" false "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}} 432 {{end}} 433 </div> 434 </div> 435 <div class="ui attached segment comment-body"> 436 <div class="render-content markup" {{if or $.Permission.IsAdmin $.HasIssuesOrPullsWritePermission (and $.IsSigned (eq $.SignedUserID .PosterID))}}data-can-edit="true"{{end}}> 437 {{if .RenderedContent}} 438 {{.RenderedContent}} 439 {{else}} 440 <span class="no-content">{{ctx.Locale.Tr "repo.issues.no_content"}}</span> 441 {{end}} 442 </div> 443 <div id="issuecomment-{{.ID}}-raw" class="raw-content tw-hidden">{{.Content}}</div> 444 <div class="edit-content-zone tw-hidden" data-update-url="{{$.RepoLink}}/comments/{{.ID}}" data-context="{{$.RepoLink}}" data-attachment-url="{{$.RepoLink}}/comments/{{.ID}}/attachments"></div> 445 {{if .Attachments}} 446 {{template "repo/issue/view_content/attachments" dict "Attachments" .Attachments "RenderedContent" .RenderedContent}} 447 {{end}} 448 </div> 449 {{$reactions := .Reactions.GroupByType}} 450 {{if $reactions}} 451 {{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}} 452 {{end}} 453 </div> 454 </div> 455 {{end}} 456 457 {{if and .Review .Review.CodeComments}} 458 <div class="timeline-item event"> 459 {{range $filename, $lines := .Review.CodeComments}} 460 {{range $line, $comms := $lines}} 461 {{template "repo/issue/view_content/conversation" dict "." $ "comments" $comms}} 462 {{end}} 463 {{end}} 464 </div> 465 {{end}} 466 </div> 467 {{else if eq .Type 23}} 468 <div class="timeline-item event" id="{{.HashTag}}"> 469 <span class="badge">{{svg "octicon-lock"}}</span> 470 {{template "shared/user/avatarlink" dict "user" .Poster}} 471 {{if .Content}} 472 <span class="text grey muted-links"> 473 {{template "shared/user/authorlink" .Poster}} 474 {{ctx.Locale.Tr "repo.issues.lock_with_reason" .Content $createdStr}} 475 </span> 476 {{else}} 477 <span class="text grey muted-links"> 478 {{template "shared/user/authorlink" .Poster}} 479 {{ctx.Locale.Tr "repo.issues.lock_no_reason" $createdStr}} 480 </span> 481 {{end}} 482 </div> 483 {{else if eq .Type 24}} 484 <div class="timeline-item event" id="{{.HashTag}}"> 485 <span class="badge">{{svg "octicon-key"}}</span> 486 {{template "shared/user/avatarlink" dict "user" .Poster}} 487 <span class="text grey muted-links"> 488 {{template "shared/user/authorlink" .Poster}} 489 {{ctx.Locale.Tr "repo.issues.unlock_comment" $createdStr}} 490 </span> 491 </div> 492 {{else if eq .Type 25}} 493 <div class="timeline-item event"> 494 <span class="badge">{{svg "octicon-git-branch"}}</span> 495 {{if not .OriginalAuthor}} 496 {{template "shared/user/avatarlink" dict "user" .Poster}} 497 {{end}} 498 <span class="text grey muted-links"> 499 {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}} 500 {{ctx.Locale.Tr "repo.pulls.change_target_branch_at" .OldRef .NewRef $createdStr}} 501 </span> 502 </div> 503 {{else if eq .Type 26}} 504 <div class="timeline-item event" id="{{.HashTag}}"> 505 <span class="badge">{{svg "octicon-clock"}}</span> 506 {{template "shared/user/avatarlink" dict "user" .Poster}} 507 <span class="text grey muted-links"> 508 {{template "shared/user/authorlink" .Poster}} 509 510 {{ctx.Locale.Tr "repo.issues.del_time_history" $createdStr}} 511 </span> 512 <div class="detail flex-text-block"> 513 {{svg "octicon-clock"}} 514 {{if .RenderedContent}} 515 {{/* compatibility with time comments made before v1.21 */}} 516 <span class="text grey muted-links">{{.RenderedContent}}</span> 517 {{else}} 518 <span class="text grey muted-links">- {{.Content|Sec2Time}}</span> 519 {{end}} 520 </div> 521 </div> 522 {{else if eq .Type 27}} 523 <div class="timeline-item event" id="{{.HashTag}}"> 524 <span class="badge">{{svg "octicon-eye"}}</span> 525 {{template "shared/user/avatarlink" dict "user" .Poster}} 526 <span class="text grey muted-links"> 527 {{template "shared/user/authorlink" .Poster}} 528 {{if (gt .AssigneeID 0)}} 529 {{if .RemovedAssignee}} 530 {{if eq .PosterID .AssigneeID}} 531 {{ctx.Locale.Tr "repo.issues.review.remove_review_request_self" $createdStr}} 532 {{else}} 533 {{ctx.Locale.Tr "repo.issues.review.remove_review_request" .Assignee.GetDisplayName $createdStr}} 534 {{end}} 535 {{else}} 536 {{ctx.Locale.Tr "repo.issues.review.add_review_request" .Assignee.GetDisplayName $createdStr}} 537 {{end}} 538 {{else}} 539 <!-- If the assigned team is deleted, just displaying "Ghost Team" in the comment --> 540 {{$teamName := "Ghost Team"}} 541 {{if .AssigneeTeam}} 542 {{$teamName = .AssigneeTeam.Name}} 543 {{end}} 544 {{if .RemovedAssignee}} 545 {{ctx.Locale.Tr "repo.issues.review.remove_review_request" $teamName $createdStr}} 546 {{else}} 547 {{ctx.Locale.Tr "repo.issues.review.add_review_request" $teamName $createdStr}} 548 {{end}} 549 {{end}} 550 </span> 551 </div> 552 {{else if and (eq .Type 29) (or (gt .CommitsNum 0) .IsForcePush)}} 553 <!-- If PR is closed, the comments whose type is CommentTypePullRequestPush(29) after latestCloseCommentID won't be rendered. //--> 554 {{if and .Issue.IsClosed (gt .ID $.LatestCloseCommentID)}} 555 {{continue}} 556 {{end}} 557 <div class="timeline-item event" id="{{.HashTag}}"> 558 <span class="badge">{{svg "octicon-repo-push"}}</span> 559 <span class="text grey muted-links"> 560 {{template "shared/user/authorlink" .Poster}} 561 {{if .IsForcePush}} 562 {{ctx.Locale.Tr "repo.issues.force_push_codes" $.Issue.PullRequest.HeadBranch (ShortSha .OldCommit) ($.Issue.Repo.CommitLink .OldCommit) (ShortSha .NewCommit) ($.Issue.Repo.CommitLink .NewCommit) $createdStr}} 563 {{else}} 564 {{ctx.Locale.TrN (len .Commits) "repo.issues.push_commit_1" "repo.issues.push_commits_n" (len .Commits) $createdStr}} 565 {{end}} 566 </span> 567 {{if and .IsForcePush $.Issue.PullRequest.BaseRepo.Name}} 568 <span class="tw-float-right comparebox"> 569 <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> 570 </span> 571 {{end}} 572 </div> 573 {{if not .IsForcePush}} 574 {{template "repo/commits_list_small" dict "comment" . "root" $}} 575 {{end}} 576 {{else if eq .Type 30}} 577 {{if not $.UnitProjectsGlobalDisabled}} 578 <div class="timeline-item event" id="{{.HashTag}}"> 579 <span class="badge">{{svg "octicon-project"}}</span> 580 {{template "shared/user/avatarlink" dict "user" .Poster}} 581 <span class="text grey muted-links"> 582 {{template "shared/user/authorlink" .Poster}} 583 {{$oldProjectDisplayHtml := "Unknown Project"}} 584 {{if .OldProject}} 585 {{$tooltip := ctx.Locale.Tr "projects.deleted.display_name"}} 586 {{if not .OldProject.IsGhost}} 587 {{$tooltip = ctx.Locale.Tr (printf "projects.type-%d.display_name" .OldProject.Type)}} 588 {{end}} 589 {{$oldProjectDisplayHtml = HTMLFormat `<span data-tooltip-content="%s">%s</span>` $tooltip .OldProject.Title}} 590 {{end}} 591 {{$newProjectDisplayHtml := "Unknown Project"}} 592 {{if .Project}} 593 {{$tooltip := ctx.Locale.Tr "projects.deleted.display_name"}} 594 {{if not .Project.IsGhost}} 595 {{$tooltip = ctx.Locale.Tr (printf "projects.type-%d.display_name" .Project.Type)}} 596 {{end}} 597 {{$newProjectDisplayHtml = HTMLFormat `<span data-tooltip-content="%s">%s</span>` $tooltip .Project.Title}} 598 {{end}} 599 {{if and (gt .OldProjectID 0) (gt .ProjectID 0)}} 600 {{ctx.Locale.Tr "repo.issues.change_project_at" $oldProjectDisplayHtml $newProjectDisplayHtml $createdStr}} 601 {{else if gt .OldProjectID 0}} 602 {{ctx.Locale.Tr "repo.issues.remove_project_at" $oldProjectDisplayHtml $createdStr}} 603 {{else if gt .ProjectID 0}} 604 {{ctx.Locale.Tr "repo.issues.add_project_at" $newProjectDisplayHtml $createdStr}} 605 {{end}} 606 </span> 607 </div> 608 {{end}} 609 {{else if eq .Type 32}} 610 <div class="timeline-item-group"> 611 <div class="timeline-item event" id="{{.HashTag}}"> 612 <a class="timeline-avatar"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}> 613 <img src="{{.Poster.AvatarLink $.Context}}" width="40" height="40"> 614 </a> 615 <span class="badge grey">{{svg "octicon-x" 16}}</span> 616 <span class="text grey muted-links"> 617 {{template "shared/user/authorlink" .Poster}} 618 {{$reviewerName := ""}} 619 {{if .Review}} 620 {{if eq .Review.OriginalAuthor ""}} 621 {{$reviewerName = .Review.Reviewer.Name}} 622 {{else}} 623 {{$reviewerName = .Review.OriginalAuthor}} 624 {{end}} 625 {{end}} 626 {{ctx.Locale.Tr "repo.issues.review.dismissed" $reviewerName $createdStr}} 627 </span> 628 </div> 629 {{if .Content}} 630 <div class="timeline-item comment"> 631 <div class="content"> 632 <div class="ui top attached header comment-header-left tw-flex tw-items-center arrow-top"> 633 {{if gt .Poster.ID 0}} 634 <a class="inline-timeline-avatar" href="{{.Poster.HomeLink}}"> 635 {{ctx.AvatarUtils.Avatar .Poster 24}} 636 </a> 637 {{end}} 638 <span class="text grey muted-links"> 639 {{ctx.Locale.Tr "action.review_dismissed_reason"}} 640 </span> 641 </div> 642 <div class="ui attached segment"> 643 <div class="render-content markup"> 644 {{if .RenderedContent}} 645 {{.RenderedContent}} 646 {{else}} 647 <span class="no-content">{{ctx.Locale.Tr "repo.issues.no_content"}}</span> 648 {{end}} 649 </div> 650 </div> 651 </div> 652 </div> 653 {{end}} 654 </div> 655 {{else if eq .Type 33}} 656 <div class="timeline-item event" id="{{.HashTag}}"> 657 <span class="badge">{{svg "octicon-git-branch"}}</span> 658 {{template "shared/user/avatarlink" dict "user" .Poster}} 659 <span class="text grey muted-links"> 660 {{template "shared/user/authorlink" .Poster}} 661 {{if and .OldRef .NewRef}} 662 {{ctx.Locale.Tr "repo.issues.change_ref_at" .OldRef .NewRef $createdStr}} 663 {{else if .OldRef}} 664 {{ctx.Locale.Tr "repo.issues.remove_ref_at" .OldRef $createdStr}} 665 {{else}} 666 {{ctx.Locale.Tr "repo.issues.add_ref_at" .NewRef $createdStr}} 667 {{end}} 668 </span> 669 </div> 670 {{else if or (eq .Type 34) (eq .Type 35)}} 671 <div class="timeline-item event" id="{{.HashTag}}"> 672 <span class="badge">{{svg "octicon-git-merge" 16}}</span> 673 <span class="text grey muted-links"> 674 {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}} 675 {{if eq .Type 34}}{{ctx.Locale.Tr "repo.pulls.auto_merge_newly_scheduled_comment" $createdStr}} 676 {{else}}{{ctx.Locale.Tr "repo.pulls.auto_merge_canceled_schedule_comment" $createdStr}}{{end}} 677 </span> 678 </div> 679 {{else if or (eq .Type 36) (eq .Type 37)}} 680 <div class="timeline-item event" id="{{.HashTag}}"> 681 <span class="badge">{{svg "octicon-pin" 16}}</span> 682 {{template "shared/user/avatarlink" dict "user" .Poster}} 683 <span class="text grey muted-links"> 684 {{template "shared/user/authorlink" .Poster}} 685 {{if eq .Type 36}}{{ctx.Locale.Tr "repo.issues.pin_comment" $createdStr}} 686 {{else}}{{ctx.Locale.Tr "repo.issues.unpin_comment" $createdStr}}{{end}} 687 </span> 688 </div> 689 {{end}} 690 {{end}} 691 {{end}}