From 119d2cb6e4abb4da90f0da6c908d52e4c26a49a4 Mon Sep 17 00:00:00 2001 From: Roger Luo Date: Thu, 18 Mar 2021 10:02:38 +0800 Subject: 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> --- web_src/js/index.js | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'web_src/js') 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')}`); + } } $(() => { -- cgit v1.2.3