diff options
author | Giteabot <teabot@gitea.io> | 2024-01-07 23:40:29 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-07 23:40:29 +0800 |
commit | def178ce323e6c300e02b9aa225227178e5ca2e1 (patch) | |
tree | 71a8105f7d4a912ef4b2f9730b3d5e4d8a0e9ca1 | |
parent | 2399b4d483162e182fc09a3c7ffaf6359a0b4d90 (diff) | |
download | gitea-def178ce323e6c300e02b9aa225227178e5ca2e1.tar.gz gitea-def178ce323e6c300e02b9aa225227178e5ca2e1.zip |
Fix incorrect URL for "Reference in New Issue" (#28716) (#28723)
Backport #28716 by wxiaoguang
Gitea prefers to use relative URLs in code (to make multiple domain work
for some users)
So it needs to use `toAbsoluteUrl` to generate a full URL when click
"Reference in New Issues"
And add some comments in the test code
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
-rw-r--r-- | tests/integration/issue_test.go | 19 | ||||
-rw-r--r-- | web_src/js/features/repo-issue.js | 3 |
2 files changed, 21 insertions, 1 deletions
diff --git a/tests/integration/issue_test.go b/tests/integration/issue_test.go index b1080c998a..4b3f581c2b 100644 --- a/tests/integration/issue_test.go +++ b/tests/integration/issue_test.go @@ -607,3 +607,22 @@ func TestUpdateIssueDeadline(t *testing.T) { assert.EqualValues(t, "2022-04-06", apiIssue.Deadline.Format("2006-01-02")) } + +func TestIssueReferenceURL(t *testing.T) { + defer tests.PrepareTestEnv(t)() + session := loginUser(t, "user2") + + issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1}) + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issue.RepoID}) + + req := NewRequest(t, "GET", fmt.Sprintf("%s/issues/%d", repo.FullName(), issue.Index)) + resp := session.MakeRequest(t, req, http.StatusOK) + htmlDoc := NewHTMLParser(t, resp.Body) + + // the "reference" uses relative URLs, then JS code will convert them to absolute URLs for current origin, in case users are using multiple domains + ref, _ := htmlDoc.Find(`.timeline-item.comment.first .reference-issue`).Attr("data-reference") + assert.EqualValues(t, "/user2/repo1/issues/1#issue-1", ref) + + ref, _ = htmlDoc.Find(`.timeline-item.comment:not(.first) .reference-issue`).Attr("data-reference") + assert.EqualValues(t, "/user2/repo1/issues/1#issuecomment-2", ref) +} diff --git a/web_src/js/features/repo-issue.js b/web_src/js/features/repo-issue.js index 2cc0730af6..0be118db31 100644 --- a/web_src/js/features/repo-issue.js +++ b/web_src/js/features/repo-issue.js @@ -4,6 +4,7 @@ import {showTemporaryTooltip, createTippy} from '../modules/tippy.js'; import {hideElem, showElem, toggleElem} from '../utils/dom.js'; import {setFileFolding} from './file-fold.js'; import {getComboMarkdownEditor, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.js'; +import {toAbsoluteUrl} from '../utils.js'; const {appSubUrl, csrfToken} = window.config; @@ -527,7 +528,7 @@ export function initRepoIssueReferenceIssue() { const $this = $(this); const content = $(`#${$this.data('target')}`).text(); const poster = $this.data('poster-username'); - const reference = $this.data('reference'); + const reference = toAbsoluteUrl($this.data('reference')); const $modal = $($this.data('modal')); $modal.find('textarea[name="content"]').val(`${content}\n\n_Originally posted by @${poster} in ${reference}_`); $modal.modal('show'); |