mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	@@ -1,6 +1,7 @@
 | 
				
			|||||||
import Vue from 'vue';
 | 
					import Vue from 'vue';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ContextPopup from '../components/ContextPopup.vue';
 | 
					import ContextPopup from '../components/ContextPopup.vue';
 | 
				
			||||||
 | 
					import {parseIssueHref} from '../utils.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function initContextPopups() {
 | 
					export default function initContextPopups() {
 | 
				
			||||||
  const refIssues = $('.ref-issue');
 | 
					  const refIssues = $('.ref-issue');
 | 
				
			||||||
@@ -10,7 +11,9 @@ export default function initContextPopups() {
 | 
				
			|||||||
    if ($(this).hasClass('ref-external-issue')) {
 | 
					    if ($(this).hasClass('ref-external-issue')) {
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    const [index, _issues, repo, owner] = $(this).attr('href').replace(/[#?].*$/, '').split('/').reverse();
 | 
					
 | 
				
			||||||
 | 
					    const {owner, repo, index} = parseIssueHref($(this).attr('href'));
 | 
				
			||||||
 | 
					    if (!owner) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const el = document.createElement('div');
 | 
					    const el = document.createElement('div');
 | 
				
			||||||
    el.className = 'ui custom popup hidden';
 | 
					    el.className = 'ui custom popup hidden';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,3 +57,9 @@ export function mqBinarySearch(feature, minValue, maxValue, step, unit) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  return mqBinarySearch(feature, minValue, mid - step, step, unit); // feature is < mid
 | 
					  return mqBinarySearch(feature, minValue, mid - step, step, unit); // feature is < mid
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function parseIssueHref(href) {
 | 
				
			||||||
 | 
					  const path = (href || '').replace(/[#?].*$/, '');
 | 
				
			||||||
 | 
					  const [_, owner, repo, type, index] = /([^/]+)\/([^/]+)\/(issues|pulls)\/([0-9]+)/.exec(path) || [];
 | 
				
			||||||
 | 
					  return {owner, repo, type, index};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
import {
 | 
					import {
 | 
				
			||||||
  basename, extname, isObject, uniq, stripTags, joinPaths,
 | 
					  basename, extname, isObject, uniq, stripTags, joinPaths, parseIssueHref,
 | 
				
			||||||
} from './utils.js';
 | 
					} from './utils.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('basename', () => {
 | 
					test('basename', () => {
 | 
				
			||||||
@@ -66,3 +66,21 @@ test('uniq', () => {
 | 
				
			|||||||
test('stripTags', () => {
 | 
					test('stripTags', () => {
 | 
				
			||||||
  expect(stripTags('<a>test</a>')).toEqual('test');
 | 
					  expect(stripTags('<a>test</a>')).toEqual('test');
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test('parseIssueHref', () => {
 | 
				
			||||||
 | 
					  expect(parseIssueHref('/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('/owner/repo/pulls/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('/sub/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('/sub/sub2/owner/repo/pulls/1')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('/sub/sub2/owner/repo/issues/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('/sub/sub2/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('https://example.com/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('https://example.com/owner/repo/pulls/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('https://example.com/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('https://example.com/sub/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/pulls/1')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/issues/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'});
 | 
				
			||||||
 | 
					  expect(parseIssueHref('')).toEqual({owner: undefined, repo: undefined, type: undefined, index: undefined});
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user