Ignore line anchor links with leading zeroes (#21728)
Fixes: https://github.com/go-gitea/gitea/issues/21722 Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
parent
50dd32ede4
commit
9db221780f
2 changed files with 39 additions and 15 deletions
|
@ -5,6 +5,8 @@ import {createTippy, showTemporaryTooltip} from '../modules/tippy.js';
|
|||
import {copyToClipboard} from './clipboard.js';
|
||||
|
||||
const {i18n} = window.config;
|
||||
export const singleAnchorRegex = /^#(L|n)([1-9][0-9]*)$/;
|
||||
export const rangeAnchorRegex = /^#(L[1-9][0-9]*)-(L[1-9][0-9]*)$/;
|
||||
|
||||
function changeHash(hash) {
|
||||
if (window.history.pushState) {
|
||||
|
@ -149,7 +151,7 @@ export function initRepoCodeView() {
|
|||
});
|
||||
|
||||
$(window).on('hashchange', () => {
|
||||
let m = window.location.hash.match(/^#(L\d+)-(L\d+)$/);
|
||||
let m = window.location.hash.match(rangeAnchorRegex);
|
||||
let $list;
|
||||
if ($('div.blame').length) {
|
||||
$list = $('.code-view td.lines-code.blame-code');
|
||||
|
@ -159,27 +161,31 @@ export function initRepoCodeView() {
|
|||
let $first;
|
||||
if (m) {
|
||||
$first = $list.filter(`[rel=${m[1]}]`);
|
||||
selectRange($list, $first, $list.filter(`[rel=${m[2]}]`));
|
||||
if ($first.length) {
|
||||
selectRange($list, $first, $list.filter(`[rel=${m[2]}]`));
|
||||
|
||||
// show code view menu marker (don't show in blame page)
|
||||
if ($('div.blame').length === 0) {
|
||||
showLineButton();
|
||||
// show code view menu marker (don't show in blame page)
|
||||
if ($('div.blame').length === 0) {
|
||||
showLineButton();
|
||||
}
|
||||
|
||||
$('html, body').scrollTop($first.offset().top - 200);
|
||||
return;
|
||||
}
|
||||
|
||||
$('html, body').scrollTop($first.offset().top - 200);
|
||||
return;
|
||||
}
|
||||
m = window.location.hash.match(/^#(L|n)(\d+)$/);
|
||||
m = window.location.hash.match(singleAnchorRegex);
|
||||
if (m) {
|
||||
$first = $list.filter(`[rel=L${m[2]}]`);
|
||||
selectRange($list, $first);
|
||||
if ($first.length) {
|
||||
selectRange($list, $first);
|
||||
|
||||
// show code view menu marker (don't show in blame page)
|
||||
if ($('div.blame').length === 0) {
|
||||
showLineButton();
|
||||
// show code view menu marker (don't show in blame page)
|
||||
if ($('div.blame').length === 0) {
|
||||
showLineButton();
|
||||
}
|
||||
|
||||
$('html, body').scrollTop($first.offset().top - 200);
|
||||
}
|
||||
|
||||
$('html, body').scrollTop($first.offset().top - 200);
|
||||
}
|
||||
}).trigger('hashchange');
|
||||
}
|
||||
|
|
18
web_src/js/features/repo-code.test.js
Normal file
18
web_src/js/features/repo-code.test.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
import {test, expect} from 'vitest';
|
||||
import {singleAnchorRegex, rangeAnchorRegex} from './repo-code.js';
|
||||
|
||||
test('singleAnchorRegex', () => {
|
||||
expect(singleAnchorRegex.test('#L0')).toEqual(false);
|
||||
expect(singleAnchorRegex.test('#L1')).toEqual(true);
|
||||
expect(singleAnchorRegex.test('#L01')).toEqual(false);
|
||||
expect(singleAnchorRegex.test('#n0')).toEqual(false);
|
||||
expect(singleAnchorRegex.test('#n1')).toEqual(true);
|
||||
expect(singleAnchorRegex.test('#n01')).toEqual(false);
|
||||
});
|
||||
|
||||
test('rangeAnchorRegex', () => {
|
||||
expect(rangeAnchorRegex.test('#L0-L10')).toEqual(false);
|
||||
expect(rangeAnchorRegex.test('#L1-L10')).toEqual(true);
|
||||
expect(rangeAnchorRegex.test('#L01-L10')).toEqual(false);
|
||||
expect(rangeAnchorRegex.test('#L1-L01')).toEqual(false);
|
||||
});
|
Loading…
Reference in a new issue