Template
1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo synced 2024-11-24 02:36:10 +01:00

Ignore line anchor links with leading zeroes (#21728) (#21777)

This commit is contained in:
silverwind 2022-11-11 17:45:40 +01:00 committed by GitHub
parent f321cdced7
commit e609ef9585
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 15 deletions

View file

@ -2,6 +2,9 @@ import $ from 'jquery';
import {svg} from '../svg.js'; import {svg} from '../svg.js';
import {invertFileFolding} from './file-fold.js'; import {invertFileFolding} from './file-fold.js';
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) { function changeHash(hash) {
if (window.history.pushState) { if (window.history.pushState) {
window.history.pushState(null, null, hash); window.history.pushState(null, null, hash);
@ -114,7 +117,7 @@ export function initRepoCodeView() {
}); });
$(window).on('hashchange', () => { $(window).on('hashchange', () => {
let m = window.location.hash.match(/^#(L\d+)-(L\d+)$/); let m = window.location.hash.match(rangeAnchorRegex);
let $list; let $list;
if ($('div.blame').length) { if ($('div.blame').length) {
$list = $('.code-view td.lines-code.blame-code'); $list = $('.code-view td.lines-code.blame-code');
@ -124,27 +127,31 @@ export function initRepoCodeView() {
let $first; let $first;
if (m) { if (m) {
$first = $list.filter(`[rel=${m[1]}]`); $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) // show code view menu marker (don't show in blame page)
if ($('div.blame').length === 0) { if ($('div.blame').length === 0) {
showLineButton(); 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) { if (m) {
$first = $list.filter(`[rel=L${m[2]}]`); $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) // show code view menu marker (don't show in blame page)
if ($('div.blame').length === 0) { if ($('div.blame').length === 0) {
showLineButton(); showLineButton();
}
$('html, body').scrollTop($first.offset().top - 200);
} }
$('html, body').scrollTop($first.offset().top - 200);
} }
}).trigger('hashchange'); }).trigger('hashchange');
} }

View file

@ -0,0 +1,17 @@
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);
});