diff options
Diffstat (limited to 'assets/js/copy-code.js')
| -rw-r--r-- | assets/js/copy-code.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/assets/js/copy-code.js b/assets/js/copy-code.js new file mode 100644 index 0000000..a18bf6c --- /dev/null +++ b/assets/js/copy-code.js @@ -0,0 +1,42 @@ +// copy-code.js +(function() { + // Add copy button to all code blocks + const codeBlocks = document.querySelectorAll('pre, .highlight'); + + codeBlocks.forEach(block => { + // Create copy button + const btn = document.createElement('button'); + btn.className = 'code-copy-btn'; + btn.textContent = 'copy'; + btn.type = 'button'; + btn.setAttribute('aria-label', 'Copy code'); + + // Get code text + const code = block.querySelector('code'); + const text = code ? code.textContent : block.textContent; + + // Copy on click + btn.addEventListener('click', async function() { + try { + await navigator.clipboard.writeText(text); + + // Show feedback + const originalText = btn.textContent; + btn.textContent = 'copied!'; + btn.classList.add('copied'); + + setTimeout(() => { + btn.textContent = originalText; + btn.classList.remove('copied'); + }, 2000); + } catch (err) { + console.error('Failed to copy:', err); + btn.textContent = 'error'; + } + }); + + // Add button to block + block.style.position = 'relative'; + block.appendChild(btn); + }); +})(); |
