mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-23 20:17:03 +01:00
Add edit, delete and reaction support to code review comments on issue page (#14339)
This commit is contained in:
parent
acb1ceb1f4
commit
ca63a9d3f1
5 changed files with 101 additions and 20 deletions
|
@ -1377,7 +1377,26 @@ func ViewIssue(ctx *context.Context) {
|
||||||
ctx.ServerError("Review.LoadCodeComments", err)
|
ctx.ServerError("Review.LoadCodeComments", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
for _, codeComments := range comment.Review.CodeComments {
|
||||||
|
for _, lineComments := range codeComments {
|
||||||
|
for _, c := range lineComments {
|
||||||
|
// Check tag.
|
||||||
|
tag, ok = marked[c.PosterID]
|
||||||
|
if ok {
|
||||||
|
c.ShowTag = tag
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
c.ShowTag, err = commentTag(repo, c.Poster, issue)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("commentTag", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
marked[c.PosterID] = c.ShowTag
|
||||||
|
participants = addParticipant(c.Poster, participants)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if err = comment.LoadResolveDoer(); err != nil {
|
if err = comment.LoadResolveDoer(); err != nil {
|
||||||
ctx.ServerError("LoadResolveDoer", err)
|
ctx.ServerError("LoadResolveDoer", err)
|
||||||
return
|
return
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $.root "ActionURL" (Printf "%s/comments/%d/reactions" $.root.RepoLink .ID) }}
|
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $.root "ActionURL" (Printf "%s/comments/%d/reactions" $.root.RepoLink .ID) }}
|
||||||
{{template "repo/issue/view_content/context_menu" Dict "ctx" $.root "item" . "delete" true "diff" true "IsCommentPoster" (and $.root.IsSigned (eq $.root.SignedUserID .PosterID))}}
|
{{template "repo/issue/view_content/context_menu" Dict "ctx" $.root "item" . "delete" true "issue" false "diff" true "IsCommentPoster" (and $.root.IsSigned (eq $.root.SignedUserID .PosterID))}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ui attached segment comment-body">
|
<div class="ui attached segment comment-body">
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $ "ActionURL" (Printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $ "ActionURL" (Printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
||||||
{{template "repo/issue/view_content/context_menu" Dict "ctx" $ "item" . "delete" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
|
{{template "repo/issue/view_content/context_menu" Dict "ctx" $ "item" . "delete" true "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -494,25 +494,49 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
<div id="code-comments-{{(index $comms 0).ID}}" class="ui segment{{if $resolved}} hide{{end}} py-3">
|
<div id="code-comments-{{(index $comms 0).ID}}" class="comment-code-cloud ui segment{{if $resolved}} hide{{end}} py-3">
|
||||||
<div class="ui comments mb-0">
|
<div class="ui comments mb-0">
|
||||||
{{range $comms}}
|
{{range $comms}}
|
||||||
{{ $createdSubStr:= TimeSinceUnix .CreatedUnix $.Lang }}
|
{{ $createdSubStr:= TimeSinceUnix .CreatedUnix $.Lang }}
|
||||||
<div class="comment code-comment" id="{{.HashTag}}">
|
<div class="comment code-comment" id="{{.HashTag}}">
|
||||||
{{if not .OriginalAuthor }}
|
|
||||||
<a class="avatar">
|
|
||||||
{{avatar .Poster}}
|
|
||||||
</a>
|
|
||||||
{{end}}
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<span class="text grey">
|
<div class="header comment-header">
|
||||||
{{if .OriginalAuthor }}
|
<div class="comment-header-left df ac">
|
||||||
<span class="text black"><i class="fa {{MigrationIcon $.Repository.GetOriginalURLHostname}}" aria-hidden="true"></i> {{ .OriginalAuthor }}</span><span class="text grey"> {{if $.Repository.OriginalURL}}</span><span class="text migrate">({{$.i18n.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname | Safe }}){{end}}</span>
|
{{if not .OriginalAuthor }}
|
||||||
{{else}}
|
<a class="avatar">
|
||||||
<a class="author"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}>{{.Poster.GetDisplayName}}</a>
|
{{avatar .Poster}}
|
||||||
{{end}}
|
</a>
|
||||||
{{$.i18n.Tr "repo.issues.commented_at" .HashTag $createdSubStr | Safe}}
|
{{end}}
|
||||||
</span>
|
<span class="text grey">
|
||||||
|
{{if .OriginalAuthor }}
|
||||||
|
<span class="text black"><i class="fa {{MigrationIcon $.Repository.GetOriginalURLHostname}}" aria-hidden="true"></i> {{ .OriginalAuthor }}</span><span class="text grey"> {{if $.Repository.OriginalURL}}</span><span class="text migrate">({{$.i18n.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname | Safe }}){{end}}</span>
|
||||||
|
{{else}}
|
||||||
|
<a class="author"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}>{{.Poster.GetDisplayName}}</a>
|
||||||
|
{{end}}
|
||||||
|
{{$.i18n.Tr "repo.issues.commented_at" .HashTag $createdSubStr | Safe}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="comment-header-right actions df ac">
|
||||||
|
{{if not $.Repository.IsArchived}}
|
||||||
|
{{if or (and (eq .PosterID $.Issue.PosterID) (eq $.Issue.OriginalAuthorID 0)) (eq $.Issue.OriginalAuthorID .OriginalAuthorID) }}
|
||||||
|
<div class="ui basic label">
|
||||||
|
{{$.i18n.Tr "repo.issues.poster"}}
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
{{if gt .ShowTag 0}}
|
||||||
|
<div class="ui basic label">
|
||||||
|
{{if eq .ShowTag 2}}
|
||||||
|
{{$.i18n.Tr "repo.issues.collaborator"}}
|
||||||
|
{{else if eq .ShowTag 3}}
|
||||||
|
{{$.i18n.Tr "repo.issues.owner"}}
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $ "ActionURL" (Printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
||||||
|
{{template "repo/issue/view_content/context_menu" Dict "ctx" $ "item" . "delete" true "issue" true "diff" true "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="text comment-content">
|
<div class="text comment-content">
|
||||||
<div class="render-content markdown">
|
<div class="render-content markdown">
|
||||||
{{if .RenderedContent}}
|
{{if .RenderedContent}}
|
||||||
|
@ -521,8 +545,15 @@
|
||||||
<span class="no-content">{{$.i18n.Tr "repo.issues.no_content"}}</span>
|
<span class="no-content">{{$.i18n.Tr "repo.issues.no_content"}}</span>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
<div class="raw-content hide">{{.Content}}</div>
|
<div id="comment-{{.ID}}" class="raw-content hide">{{.Content}}</div>
|
||||||
|
<div class="edit-content-zone hide" data-write="issuecomment-{{.ID}}-write" data-preview="issuecomment-{{.ID}}-preview" data-update-url="{{$.RepoLink}}/comments/{{.ID}}" data-context="{{$.RepoLink}}" data-attachment-url="{{$.RepoLink}}/comments/{{.ID}}/attachments"></div>
|
||||||
</div>
|
</div>
|
||||||
|
{{$reactions := .Reactions.GroupByType}}
|
||||||
|
{{if $reactions}}
|
||||||
|
<div class="ui attached segment reactions">
|
||||||
|
{{template "repo/issue/view_content/reactions" Dict "ctx" $ "ActionURL" (Printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
{{svg "octicon-kebab-horizontal"}}
|
{{svg "octicon-kebab-horizontal"}}
|
||||||
</a>
|
</a>
|
||||||
<div class="menu">
|
<div class="menu">
|
||||||
{{if .diff}}
|
{{if .issue}}
|
||||||
<div class="item context clipboard" data-clipboard-text="{{Printf "%s%s/pulls/%d/files#%s" AppUrl .ctx.Repository.FullName .ctx.Issue.Index .item.HashTag}}">{{.ctx.i18n.Tr "repo.issues.context.copy_link"}}</div>
|
|
||||||
{{else}}
|
|
||||||
<div class="item context clipboard" data-clipboard-text="{{Printf "%s%s/issues/%d#%s" AppUrl .ctx.Repository.FullName .ctx.Issue.Index .item.HashTag}}">{{.ctx.i18n.Tr "repo.issues.context.copy_link"}}</div>
|
<div class="item context clipboard" data-clipboard-text="{{Printf "%s%s/issues/%d#%s" AppUrl .ctx.Repository.FullName .ctx.Issue.Index .item.HashTag}}">{{.ctx.i18n.Tr "repo.issues.context.copy_link"}}</div>
|
||||||
|
{{else}}
|
||||||
|
<div class="item context clipboard" data-clipboard-text="{{Printf "%s%s/pulls/%d/files#%s" AppUrl .ctx.Repository.FullName .ctx.Issue.Index .item.HashTag}}">{{.ctx.i18n.Tr "repo.issues.context.copy_link"}}</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
<div class="item context quote-reply {{if .diff}}quote-reply-diff{{end}}" data-target="{{.item.ID}}">{{.ctx.i18n.Tr "repo.issues.context.quote_reply"}}</div>
|
<div class="item context quote-reply {{if .diff}}quote-reply-diff{{end}}" data-target="{{.item.ID}}">{{.ctx.i18n.Tr "repo.issues.context.quote_reply"}}</div>
|
||||||
{{if or .ctx.Permission.IsAdmin .IsCommentPoster .ctx.HasIssuesOrPullsWritePermission}}
|
{{if or .ctx.Permission.IsAdmin .IsCommentPoster .ctx.HasIssuesOrPullsWritePermission}}
|
||||||
|
|
|
@ -939,6 +939,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ui.comments {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.comment {
|
.comment {
|
||||||
> .content {
|
> .content {
|
||||||
> div:first-child {
|
> div:first-child {
|
||||||
|
@ -1048,12 +1052,39 @@
|
||||||
border: none !important;
|
border: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.comment-header {
|
||||||
|
background: transparent;
|
||||||
|
border-bottom: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
|
||||||
|
&::after,
|
||||||
|
&::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.avatar.image {
|
.avatar.image {
|
||||||
width: 28px;
|
width: 28px;
|
||||||
height: 28px;
|
height: 28px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.comment-code-cloud {
|
||||||
|
.segment.reactions {
|
||||||
|
border-top: none !important;
|
||||||
|
|
||||||
|
.ui.label {
|
||||||
|
border: 1px solid;
|
||||||
|
padding: 6px !important;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
button.comment-form-reply {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.event {
|
.event {
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue