flow-web/static/scripts/copy-to-clipboard.js
Andreas Widen a4a5c7daa5
Initial commit.
Signed-off-by: Andreas Widen <aw@luflow.net>
2026-07-27 17:57:03 +02:00

39 lines
1.1 KiB
JavaScript

/* luflow.net web site */
/* Public domain 2025. All rights waived */
// copy code button:
let copyButtonLabel = 'Copy';
let codeBlocks = Array.from(document.querySelectorAll('pre'));
for (let codeBlock of codeBlocks) {
let wrapper = document.createElement('div');
wrapper.style.position = 'relative';
let copyButton = document.createElement('button');
copyButton.className = 'copy-code';
copyButton.innerHTML = copyButtonLabel;
codeBlock.setAttribute('tabindex', '0');
codeBlock.appendChild(copyButton);
// wrap codebock with relative parent element:
codeBlock.parentNode.insertBefore(wrapper, codeBlock);
wrapper.appendChild(codeBlock);
copyButton.addEventListener('click', async () => {
await copyCode(codeBlock, copyButton);
});
}
async function copyCode(block, button) {
let code = block.querySelector('code');
let text = code.innerText;
await navigator.clipboard.writeText(text);
// visual feedback that task is completed:
button.innerText = 'Copied!';
setTimeout(() => {
button.innerText = copyButtonLabel;
}, 700);
}