]> source.dussan.org Git - gitea.git/commitdiff
Create new issue from code (#14863)
authorRoger Luo <rogerluo410@gmail.com>
Thu, 18 Mar 2021 02:02:38 +0000 (10:02 +0800)
committerGitHub <noreply@github.com>
Thu, 18 Mar 2021 02:02:38 +0000 (22:02 -0400)
* 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 <lauris@nix.lv>
Co-authored-by: 6543 <6543@obermui.de>
routers/repo/issue.go
templates/repo/issue/comment_tab.tmpl
templates/repo/view_file.tmpl
web_src/js/index.js
web_src/less/_repository.less

index 9f04c548164bc888a3cde8039424930519d6adcd..15459cd0e6d3bc6eb19679d0850ce96ae46395ac 100644 (file)
@@ -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")
index d24f7a22ad33d7f204812d1bc1833340207c85b0..28a9b24edc5b4c0932d0014618a741596d5d46ab 100644 (file)
@@ -4,8 +4,9 @@
 </div>
 <div class="field">
        <div class="ui bottom active tab" data-tab="write">
-               <textarea id="content" class="edit_area js-quick-submit" name="content" tabindex="4" data-id="issue-{{.RepoName}}" data-url="{{.Repository.APIURL}}/markdown" data-context="{{.Repo.RepoLink}}">
-{{if .BodyQuery}}{{.BodyQuery}}{{else if .IssueTemplate}}{{.IssueTemplate}}{{else if .PullRequestTemplate}}{{.PullRequestTemplate}}{{else}}{{.content}}{{end}}</textarea>
+               <textarea id="content" class="edit_area js-quick-submit" name="content" tabindex="4" data-id="issue-{{.RepoName}}" data-url="{{.Repository.APIURL}}/markdown" data-context="{{.Repo.RepoLink}}">
+                       {{- if .BodyQuery}}{{.BodyQuery}}{{else if .IssueTemplate}}{{.IssueTemplate}}{{else if .PullRequestTemplate}}{{.PullRequestTemplate}}{{else}}{{.content}}{{end -}}
+               </textarea>
        </div>
        <div class="ui bottom tab markdown" data-tab="preview">
                {{.i18n.Tr "loading"}}
index 15a8a589f120cb01777d6f6d206e0597fa8859d4..9beddfb9122cd92a3ba332272ab113876b9a9b61 100644 (file)
                                                {{end}}
                                        </tbody>
                                </table>
+                               <div class="code-view-menu-list ui fluid popup transition hidden">
+                                       <div class="ui column relaxed equal height">
+                                               <div class="column">
+                                                       <div class="ui link list">
+                                                               <a class="item ref-in-new-issue" href="{{.RepoLink}}/issues/new?body={{URLJoin AppUrl .RepoLink}}/src/commit/{{.CommitID}}/{{EscapePound .TreePath}}">{{.i18n.Tr "repo.issues.context.reference_issue"}}</a>
+                                                       </div>
+                                               </div>
+                                       </div>
+                               </div>
                                {{end}}
                        {{end}}
                </div>
index ccd9276059151a0000df32c6df4ffc61b51593da..6c30d14fbb5751d4eaee727d7865620d06478655 100644 (file)
@@ -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 = $('<div>', {
+    class: 'code-line-marker'
+  }).prependTo($code_tr.find('td:eq(0)').get(0)).hide();
+
+  const a_wrap = $('<a>', {
+    class: 'code-line-link'
+  }).appendTo(icon_wrap);
+
+  $('<i>', {
+    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')}`);
+  }
 }
 
 $(() => {
index b750cf8c077fb26ab524e2ee9f060739cda71aab..7cb71d8ba0442cd8f7ffb510db22ab1bdee25da2 100644 (file)
@@ -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;
+}