Skip to content

Commit 98212aa

Browse files
wxiaoguangStelios Malathouras
authored and
Stelios Malathouras
committed
Fix context popup error (go-gitea#17398)
* Fix context popup error
1 parent 2e51d39 commit 98212aa

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

web_src/js/features/contextpopup.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Vue from 'vue';
22

33
import ContextPopup from '../components/ContextPopup.vue';
4+
import {parseIssueHref} from '../utils.js';
45

56
export default function initContextPopups() {
67
const refIssues = $('.ref-issue');
@@ -10,7 +11,9 @@ export default function initContextPopups() {
1011
if ($(this).hasClass('ref-external-issue')) {
1112
return;
1213
}
13-
const [index, _issues, repo, owner] = $(this).attr('href').replace(/[#?].*$/, '').split('/').reverse();
14+
15+
const {owner, repo, index} = parseIssueHref($(this).attr('href'));
16+
if (!owner) return;
1417

1518
const el = document.createElement('div');
1619
el.className = 'ui custom popup hidden';

web_src/js/utils.js

+6
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,9 @@ export function mqBinarySearch(feature, minValue, maxValue, step, unit) {
5757
}
5858
return mqBinarySearch(feature, minValue, mid - step, step, unit); // feature is < mid
5959
}
60+
61+
export function parseIssueHref(href) {
62+
const path = (href || '').replace(/[#?].*$/, '');
63+
const [_, owner, repo, type, index] = /([^/]+)\/([^/]+)\/(issues|pulls)\/([0-9]+)/.exec(path) || [];
64+
return {owner, repo, type, index};
65+
}

web_src/js/utils.test.js

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {
2-
basename, extname, isObject, uniq, stripTags, joinPaths,
2+
basename, extname, isObject, uniq, stripTags, joinPaths, parseIssueHref,
33
} from './utils.js';
44

55
test('basename', () => {
@@ -66,3 +66,21 @@ test('uniq', () => {
6666
test('stripTags', () => {
6767
expect(stripTags('<a>test</a>')).toEqual('test');
6868
});
69+
70+
test('parseIssueHref', () => {
71+
expect(parseIssueHref('/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
72+
expect(parseIssueHref('/owner/repo/pulls/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'});
73+
expect(parseIssueHref('/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
74+
expect(parseIssueHref('/sub/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
75+
expect(parseIssueHref('/sub/sub2/owner/repo/pulls/1')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'});
76+
expect(parseIssueHref('/sub/sub2/owner/repo/issues/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
77+
expect(parseIssueHref('/sub/sub2/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
78+
expect(parseIssueHref('https://example.com/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
79+
expect(parseIssueHref('https://example.com/owner/repo/pulls/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'});
80+
expect(parseIssueHref('https://example.com/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
81+
expect(parseIssueHref('https://example.com/sub/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
82+
expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/pulls/1')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'});
83+
expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/issues/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
84+
expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
85+
expect(parseIssueHref('')).toEqual({owner: undefined, repo: undefined, type: undefined, index: undefined});
86+
});

0 commit comments

Comments
 (0)