From 119d2cb6e4abb4da90f0da6c908d52e4c26a49a4 Mon Sep 17 00:00:00 2001 From: Roger Luo Date: Thu, 18 Mar 2021 10:02:38 +0800 Subject: [PATCH] Create new issue from code (#14863) * Feat: add reference in new issue with permalink menu for code view. * Fix: recover index.js file. * Add comments and redo ci. * Fix code convention * Fix code. Co-authored-by: Lauris BH Co-authored-by: 6543 <6543@obermui.de> --- routers/repo/issue.go | 1 + templates/repo/issue/comment_tab.tmpl | 5 +- templates/repo/view_file.tmpl | 9 ++++ web_src/js/index.js | 69 +++++++++++++++++++++++++++ web_src/less/_repository.less | 7 +++ 5 files changed, 89 insertions(+), 2 deletions(-) diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 9f04c54816..15459cd0e6 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -781,6 +781,7 @@ func NewIssue(ctx *context.Context) { ctx.Data["TitleQuery"] = title body := ctx.Query("body") ctx.Data["BodyQuery"] = body + ctx.Data["IsProjectsEnabled"] = ctx.Repo.CanRead(models.UnitTypeProjects) ctx.Data["IsAttachmentEnabled"] = setting.Attachment.Enabled upload.AddUploadContext(ctx, "comment") diff --git a/templates/repo/issue/comment_tab.tmpl b/templates/repo/issue/comment_tab.tmpl index d24f7a22ad..28a9b24edc 100644 --- a/templates/repo/issue/comment_tab.tmpl +++ b/templates/repo/issue/comment_tab.tmpl @@ -4,8 +4,9 @@
- +
{{.i18n.Tr "loading"}} diff --git a/templates/repo/view_file.tmpl b/templates/repo/view_file.tmpl index 15a8a589f1..9beddfb912 100644 --- a/templates/repo/view_file.tmpl +++ b/templates/repo/view_file.tmpl @@ -111,6 +111,15 @@ {{end}} + {{end}} {{end}}
diff --git a/web_src/js/index.js b/web_src/js/index.js index ccd9276059..6c30d14fbb 100644 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -2167,6 +2167,45 @@ function searchRepositories() { }); } +function showCodeViewMenu() { + // Get clicked tr + const $code_tr = $('.code-view td.lines-code.active').parent(); + + // Reset code line marker + $('.code-view-menu-list').appendTo($('.code-view')); + $('.code-line-marker').remove(); + + // Generate new one + const icon_wrap = $('
', { + class: 'code-line-marker' + }).prependTo($code_tr.find('td:eq(0)').get(0)).hide(); + + const a_wrap = $('', { + class: 'code-line-link' + }).appendTo(icon_wrap); + + $('', { + class: 'dropdown icon', + style: 'margin: 0px;' + }).appendTo(a_wrap); + + icon_wrap.css({ + left: '-7px', + display: 'block', + }); + + $('.code-view-menu-list').css({ + 'min-width': '220px', + }); + + // Popup the menu + $('.code-line-link').popup({ + popup: $('.code-view-menu-list'), + on: 'click', + lastResort: 'bottom left', + }); +} + function initCodeView() { if ($('.code-view .lines-num').length > 0) { $(document).on('click', '.lines-num span', function (e) { @@ -2179,6 +2218,9 @@ function initCodeView() { } selectRange($list, $list.filter(`[rel=${$select.attr('id')}]`), (e.shiftKey ? $list.filter('.active').eq(0) : null)); deSelect(); + + // show code view menu marker + showCodeViewMenu(); }); $(window).on('hashchange', () => { @@ -2193,6 +2235,10 @@ function initCodeView() { if (m) { $first = $list.filter(`[rel=${m[1]}]`); selectRange($list, $first, $list.filter(`[rel=${m[2]}]`)); + + // show code view menu marker + showCodeViewMenu(); + $('html, body').scrollTop($first.offset().top - 200); return; } @@ -2200,6 +2246,10 @@ function initCodeView() { if (m) { $first = $list.filter(`[rel=L${m[2]}]`); selectRange($list, $first); + + // show code view menu marker + showCodeViewMenu(); + $('html, body').scrollTop($first.offset().top - 200); } }).trigger('hashchange'); @@ -2752,11 +2802,30 @@ function selectRange($list, $select, $from) { } $list.filter(classes.join(',')).addClass('active'); changeHash(`#L${a}-L${b}`); + + // add hashchange to permalink + const $issue = $('a.ref-in-new-issue'); + const matched = $issue.attr('href').match(/%23L\d+$|%23L\d+-L\d+$/); + if (matched) { + $issue.attr('href', $issue.attr('href').replace($issue.attr('href').substr(matched.index), `%23L${a}-L${b}`)); + } else { + $issue.attr('href', `${$issue.attr('href')}%23L${a}-L${b}`); + } + return; } } $select.addClass('active'); changeHash(`#${$select.attr('rel')}`); + + // add hashchange to permalink + const $issue = $('a.ref-in-new-issue'); + const matched = $issue.attr('href').match(/%23L\d+$|%23L\d+-L\d+$/); + if (matched) { + $issue.attr('href', $issue.attr('href').replace($issue.attr('href').substr(matched.index), `%23${$select.attr('rel')}`)); + } else { + $issue.attr('href', `${$issue.attr('href')}%23${$select.attr('rel')}`); + } } $(() => { diff --git a/web_src/less/_repository.less b/web_src/less/_repository.less index b750cf8c07..7cb71d8ba0 100644 --- a/web_src/less/_repository.less +++ b/web_src/less/_repository.less @@ -3145,3 +3145,10 @@ td.blob-excerpt { transform: scale(105%); box-shadow: 0 .5rem 1rem var(--color-shadow) !important; } + +.code-line-marker { + width: 13px; + height: 20px; + background-color: rgb(34 36 38 / 15%); + position: absolute; +}