diff options
Diffstat (limited to 'web_src/js')
-rw-r--r-- | web_src/js/features/clipboard.js | 7 | ||||
-rw-r--r-- | web_src/js/test/setup.js | 1 | ||||
-rw-r--r-- | web_src/js/utils.js | 7 | ||||
-rw-r--r-- | web_src/js/utils.test.js | 6 |
4 files changed, 20 insertions, 1 deletions
diff --git a/web_src/js/features/clipboard.js b/web_src/js/features/clipboard.js index f8486cdc6c..07c439504e 100644 --- a/web_src/js/features/clipboard.js +++ b/web_src/js/features/clipboard.js @@ -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(); diff --git a/web_src/js/test/setup.js b/web_src/js/test/setup.js index 7c208eb0d2..e0e2c71e29 100644 --- a/web_src/js/test/setup.js +++ b/web_src/js/test/setup.js @@ -2,4 +2,5 @@ window.config = { csrfToken: 'test-csrf-token-123456', pageData: {}, i18n: {}, + appSubUrl: '', }; diff --git a/web_src/js/utils.js b/web_src/js/utils.js index 01c076aeba..b9cd69e15a 100644 --- a/web_src/js/utils.js +++ b/web_src/js/utils.js @@ -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}`; +} diff --git a/web_src/js/utils.test.js b/web_src/js/utils.test.js index 1df0caa211..4efe916231 100644 --- a/web_src/js/utils.test.js +++ b/web_src/js/utils.test.js @@ -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'); +}); |