Skip to content

Commit 56a8929

Browse files
KN4CK3Rzeripath6543
authored
Comment - Reference in new issue (#14366)
* Implemented "Reference in new issue" * Fixed menu style on "pulls/x/files" because "button" has a style. * Added context menu for PR file comments. * Use only a single modal for every comment. * Use current repository as default. Added search filter. * Added suggested changes. * Fixed assignment. Co-authored-by: Andrew Thornton <[email protected]> Co-authored-by: 6543 <[email protected]>
1 parent 1c230f6 commit 56a8929

File tree

6 files changed

+92
-6
lines changed

6 files changed

+92
-6
lines changed

options/locale/locale_en-US.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,6 +1068,7 @@ issues.commented_at = `commented <a href="#%s">%s</a>`
10681068
issues.delete_comment_confirm = Are you sure you want to delete this comment?
10691069
issues.context.copy_link = Copy Link
10701070
issues.context.quote_reply = Quote Reply
1071+
issues.context.reference_issue = Reference in new issue
10711072
issues.context.edit = Edit
10721073
issues.context.delete = Delete
10731074
issues.no_content = There is no content yet.
@@ -1225,6 +1226,7 @@ issues.review.resolve_conversation = Resolve conversation
12251226
issues.review.un_resolve_conversation = Unresolve conversation
12261227
issues.review.resolved_by = marked this conversation as resolved
12271228
issues.assignee.error = Not all assignees was added due to an unexpected error.
1229+
issues.reference_issue.body = Body
12281230

12291231
pulls.desc = Enable pull requests and code reviews.
12301232
pulls.new = New Pull Request

templates/repo/diff/box.tmpl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@
164164
</div>
165165
{{end}}
166166

167+
{{template "repo/issue/view_content/reference_issue_dialog" .}}
168+
167169
{{if .IsSplitStyle}}
168170
<script>
169171
document.addEventListener('DOMContentLoaded', () => {

templates/repo/issue/view_content.tmpl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
</div>
5353
{{end}}
5454
{{template "repo/issue/view_content/add_reaction" Dict "ctx" $ "ActionURL" (Printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index)}}
55-
{{template "repo/issue/view_content/context_menu" Dict "ctx" $ "item" .Issue "delete" false "diff" false "IsCommentPoster" $.IsIssuePoster}}
55+
{{template "repo/issue/view_content/context_menu" Dict "ctx" $ "item" .Issue "delete" false "issue" true "diff" false "IsCommentPoster" $.IsIssuePoster}}
5656
{{end}}
5757
</div>
5858
</div>
@@ -210,6 +210,8 @@
210210
</div>
211211
</div>
212212

213+
{{template "repo/issue/view_content/reference_issue_dialog" .}}
214+
213215
<div class="hide" id="no-content">
214216
<span class="no-content">{{.i18n.Tr "repo.issues.no_content"}}</span>
215217
</div>

templates/repo/issue/view_content/context_menu.tmpl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
{{svg "octicon-kebab-horizontal"}}
55
</a>
66
<div class="menu">
7-
{{if .issue}}
8-
<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>
9-
{{else}}
10-
<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>
11-
{{end}}
7+
{{ $referenceUrl := "" }}
8+
{{ if .issue }}
9+
{{ $referenceUrl = Printf "%s%s/issues/%d#%s" AppUrl .ctx.Repository.FullName .ctx.Issue.Index .item.HashTag }}
10+
{{ else }}
11+
{{ $referenceUrl = Printf "%s%s/pulls/%d/files#%s" AppUrl .ctx.Repository.FullName .ctx.Issue.Index .item.HashTag }}
12+
{{ end }}
13+
<div class="item context clipboard" data-clipboard-text="{{$referenceUrl}}">{{.ctx.i18n.Tr "repo.issues.context.copy_link"}}</div>
1214
<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>
15+
<div class="item context reference-issue" data-target="{{.item.ID}}" data-modal="#reference-issue-modal" data-poster="{{.item.Poster.GetDisplayName}}" data-reference="{{$referenceUrl}}">{{.ctx.i18n.Tr "repo.issues.context.reference_issue"}}</div>
1316
{{if or .ctx.Permission.IsAdmin .IsCommentPoster .ctx.HasIssuesOrPullsWritePermission}}
1417
<div class="divider"></div>
1518
<div class="item context edit-content">{{.ctx.i18n.Tr "repo.issues.context.edit"}}</div>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<div class="ui small modal" id="reference-issue-modal">
2+
<div class="header">
3+
{{.i18n.Tr "repo.issues.context.reference_issue"}}
4+
</div>
5+
<div class="content" style="text-align:left">
6+
<form class="ui form" action="{{ Printf "%s/issues/new" .Repository.Link }}" method="post">
7+
{{.CsrfTokenHtml}}
8+
<div class="ui segment content">
9+
<div class="field">
10+
<span class="text"><strong>{{.i18n.Tr "repository"}}</strong></span>
11+
<div class="ui search normal selection dropdown issue_reference_repository_search">
12+
<div class="default text">{{.Repository.FullName}}</div>
13+
<div class="menu"></div>
14+
</div>
15+
</div>
16+
<div class="field">
17+
<span class="text"><strong>{{.i18n.Tr "repo.milestones.title"}}</strong></span>
18+
<input name="title" value="" autofocus required maxlength="255" autocomplete="off">
19+
</div>
20+
<div class="field">
21+
<span class="text"><strong>{{.i18n.Tr "repo.issues.reference_issue.body"}}</strong></span>
22+
<textarea name="content" class="form-control"></textarea>
23+
</div>
24+
<div class="text right">
25+
<button class="ui green button">{{.i18n.Tr "repo.issues.create"}}</button>
26+
</div>
27+
</div>
28+
</form>
29+
</div>
30+
</div>

web_src/js/index.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,27 @@ async function initRepository() {
932932
event.preventDefault();
933933
});
934934

935+
// Reference issue
936+
$(document).on('click', '.reference-issue', function (event) {
937+
const $this = $(this);
938+
939+
$this.closest('.dropdown').find('.menu').toggle('visible');
940+
941+
const content = $(`#comment-${$this.data('target')}`).text();
942+
const subject = content.split('\n', 1)[0].slice(0, 255);
943+
944+
const poster = $this.data('poster');
945+
const reference = $this.data('reference');
946+
947+
const $modal = $($this.data('modal'));
948+
$modal.find('input[name="title"').val(subject);
949+
$modal.find('textarea[name="content"]').val(`${content}\n\n_Originally posted by @${poster} in ${reference}_`);
950+
951+
$modal.modal('show');
952+
953+
event.preventDefault();
954+
});
955+
935956
// Edit issue or comment content
936957
$(document).on('click', '.edit-content', async function (event) {
937958
$(this).closest('.dropdown').find('.menu').toggle('visible');
@@ -2337,6 +2358,31 @@ function initTemplateSearch() {
23372358
changeOwner();
23382359
}
23392360

2361+
function initIssueReferenceRepositorySearch() {
2362+
$('.issue_reference_repository_search')
2363+
.dropdown({
2364+
apiSettings: {
2365+
url: `${AppSubUrl}/api/v1/repos/search?q={query}&limit=20`,
2366+
onResponse(response) {
2367+
const filteredResponse = {success: true, results: []};
2368+
$.each(response.data, (_r, repo) => {
2369+
filteredResponse.results.push({
2370+
name: htmlEscape(repo.full_name),
2371+
value: repo.full_name
2372+
});
2373+
});
2374+
return filteredResponse;
2375+
},
2376+
cache: false,
2377+
},
2378+
onChange(_value, _text, $choice) {
2379+
const $form = $choice.closest('form');
2380+
$form.attr('action', `${AppSubUrl}/${_text}/issues/new`);
2381+
},
2382+
fullTextSearch: true
2383+
});
2384+
}
2385+
23402386
$(document).ready(async () => {
23412387
// Show exact time
23422388
$('.time-since').each(function () {
@@ -2553,6 +2599,7 @@ $(document).ready(async () => {
25532599
initPullRequestReview();
25542600
initRepoStatusChecker();
25552601
initTemplateSearch();
2602+
initIssueReferenceRepositorySearch();
25562603
initContextPopups();
25572604
initTableSort();
25582605
initNotificationsTable();

0 commit comments

Comments
 (0)