mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-30 19:08:37 +00:00 
			
		
		
		
	Use link in UI which returned a relative url but not html_url which contains an absolute url (#21986)
partially fix #19345 This PR add some `Link` methods for different objects. The `Link` methods are not different from `HTMLURL`, they are lack of the absolute URL. And most of UI `HTMLURL` have been replaced to `Link` so that users can visit them from a different domain or IP. This PR also introduces a new javascript configuration `window.config.reqAppUrl` which is different from `appUrl` which is still an absolute url but the domain has been replaced to the current requested domain.
This commit is contained in:
		| @@ -1,4 +1,5 @@ | ||||
| import {showTemporaryTooltip} from '../modules/tippy.js'; | ||||
| import {toAbsoluteUrl} from '../utils.js'; | ||||
|  | ||||
| const {copy_success, copy_error} = window.config.i18n; | ||||
|  | ||||
| @@ -50,7 +51,11 @@ export function initGlobalCopyToClipboardListener() { | ||||
|     // in case <button data-clipboard-text><svg></button>, so we just search | ||||
|     // up to 3 levels for performance | ||||
|     for (let i = 0; i < 3 && target; i++) { | ||||
|       const text = target.getAttribute('data-clipboard-text') || document.querySelector(target.getAttribute('data-clipboard-target'))?.value; | ||||
|       let txt = target.getAttribute('data-clipboard-text'); | ||||
|       if (txt && target.getAttribute('data-clipboard-text-type') === 'url') { | ||||
|         txt = toAbsoluteUrl(txt); | ||||
|       } | ||||
|       const text = txt || document.querySelector(target.getAttribute('data-clipboard-target'))?.value; | ||||
|  | ||||
|       if (text) { | ||||
|         e.preventDefault(); | ||||
|   | ||||
| @@ -2,4 +2,5 @@ window.config = { | ||||
|   csrfToken: 'test-csrf-token-123456', | ||||
|   pageData: {}, | ||||
|   i18n: {}, | ||||
|   appSubUrl: '', | ||||
| }; | ||||
|   | ||||
| @@ -133,3 +133,10 @@ export function convertImage(blob, mime) { | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| export function toAbsoluteUrl(relUrl) { | ||||
|   if (relUrl.startsWith('http://') || relUrl.startsWith('https://')) { | ||||
|     return relUrl; | ||||
|   } | ||||
|   return `${window.location.origin}${relUrl}`; | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import {expect, test} from 'vitest'; | ||||
| import { | ||||
|   basename, extname, isObject, uniq, stripTags, joinPaths, parseIssueHref, | ||||
|   prettyNumber, parseUrl, translateMonth, translateDay, blobToDataURI, | ||||
|   toAbsoluteUrl, | ||||
| } from './utils.js'; | ||||
|  | ||||
| test('basename', () => { | ||||
| @@ -136,3 +137,8 @@ test('blobToDataURI', async () => { | ||||
|   const blob = new Blob([JSON.stringify({test: true})], {type: 'application/json'}); | ||||
|   expect(await blobToDataURI(blob)).toEqual('data:application/json;base64,eyJ0ZXN0Ijp0cnVlfQ=='); | ||||
| }); | ||||
|  | ||||
| test('toAbsoluteUrl', () => { | ||||
|   expect(toAbsoluteUrl('')).toEqual('http://localhost:3000'); | ||||
|   expect(toAbsoluteUrl('/user/repo')).toEqual('http://localhost:3000/user/repo'); | ||||
| }); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user