Git with a cup of tea, painless self-hosted git service Mirror for internal git.with.parts use https://git.with.parts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
gitea/web_src/js/features/clipboard.js

43 lines
1.4 KiB

// For all DOM elements with [data-clipboard-target] or [data-clipboard-text], this copy-to-clipboard will work for them
// TODO: replace these with toast-style notifications
function onSuccess(btn) {
if (!btn.dataset.content) return;
$(btn).popup('destroy');
btn.dataset.content = btn.dataset.success;
$(btn).popup('show');
btn.dataset.content = btn.dataset.original;
}
function onError(btn) {
if (!btn.dataset.content) return;
$(btn).popup('destroy');
btn.dataset.content = btn.dataset.error;
$(btn).popup('show');
btn.dataset.content = btn.dataset.original;
}
export default function initGlobalCopyToClipboardListener() {
document.addEventListener('click', async (e) => {
let target = e.target;
// 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++) {
let text;
if (target.dataset.clipboardText) {
text = target.dataset.clipboardText;
} else if (target.dataset.clipboardTarget) {
text = document.querySelector(target.dataset.clipboardTarget)?.value;
}
if (text) {
e.preventDefault();
try {
await navigator.clipboard.writeText(text);
onSuccess(target);
} catch {
onError(target);
}
break;
}
target = target.parentElement;
}
});
}