mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-08-20 06:31:35 +02:00
The modal was broken in two ways: - On small screens, the input box was partially hanging outside the modal. Fixed with flexbox and increased modal width. - The clipboard copy was not working because the modal had both `data-clipboard-text` and `data-clipboard-target`, while we only support one of those. Made a small tweak in clipboard as well so that it will still fall back to target if text is empty. (cherry picked from commit 94512ee0628dc0d2b697441a4355ace54b6515cd)
33 lines
1.2 KiB
JavaScript
33 lines
1.2 KiB
JavaScript
import {showTemporaryTooltip} from '../modules/tippy.js';
|
|
import {toAbsoluteUrl} from '../utils.js';
|
|
import {clippie} from 'clippie';
|
|
|
|
const {copy_success, copy_error} = window.config.i18n;
|
|
|
|
// Enable clipboard copy from HTML attributes. These properties are supported:
|
|
// - data-clipboard-text: Direct text to copy
|
|
// - data-clipboard-target: Holds a selector for a <input> or <textarea> whose content is copied
|
|
// - data-clipboard-text-type: When set to 'url' will convert relative to absolute urls
|
|
export function initGlobalCopyToClipboardListener() {
|
|
document.addEventListener('click', async (e) => {
|
|
const target = e.target.closest('[data-clipboard-text], [data-clipboard-target]');
|
|
if (!target) return;
|
|
|
|
e.preventDefault();
|
|
|
|
let text = target.getAttribute('data-clipboard-text');
|
|
if (!text) {
|
|
text = document.querySelector(target.getAttribute('data-clipboard-target'))?.value;
|
|
}
|
|
|
|
if (text && target.getAttribute('data-clipboard-text-type') === 'url') {
|
|
text = toAbsoluteUrl(text);
|
|
}
|
|
|
|
if (text) {
|
|
const success = await clippie(text);
|
|
showTemporaryTooltip(target, success ? copy_success : copy_error);
|
|
}
|
|
});
|
|
}
|