mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Backport #21728 Fixes: https://github.com/go-gitea/gitea/issues/21722 Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -4,6 +4,9 @@ import {invertFileFolding} from './file-fold.js';
 | 
			
		||||
import {createTippy} from '../modules/tippy.js';
 | 
			
		||||
import {copyToClipboard} from './clipboard.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) {
 | 
			
		||||
  if (window.history.pushState) {
 | 
			
		||||
    window.history.pushState(null, null, hash);
 | 
			
		||||
@@ -135,7 +138,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');
 | 
			
		||||
@@ -145,6 +148,7 @@ export function initRepoCodeView() {
 | 
			
		||||
      let $first;
 | 
			
		||||
      if (m) {
 | 
			
		||||
        $first = $list.filter(`[rel=${m[1]}]`);
 | 
			
		||||
        if ($first.length) {
 | 
			
		||||
          selectRange($list, $first, $list.filter(`[rel=${m[2]}]`));
 | 
			
		||||
 | 
			
		||||
          // show code view menu marker (don't show in blame page)
 | 
			
		||||
@@ -155,9 +159,11 @@ export function initRepoCodeView() {
 | 
			
		||||
          $('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]}]`);
 | 
			
		||||
        if ($first.length) {
 | 
			
		||||
          selectRange($list, $first);
 | 
			
		||||
 | 
			
		||||
          // show code view menu marker (don't show in blame page)
 | 
			
		||||
@@ -167,6 +173,7 @@ export function initRepoCodeView() {
 | 
			
		||||
 | 
			
		||||
          $('html, body').scrollTop($first.offset().top - 200);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }).trigger('hashchange');
 | 
			
		||||
  }
 | 
			
		||||
  $(document).on('click', '.fold-file', ({currentTarget}) => {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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);
 | 
			
		||||
});
 | 
			
		||||
		Reference in New Issue
	
	Block a user