summaryrefslogtreecommitdiffstats
path: root/assets/js/copy-code.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/copy-code.js')
-rw-r--r--assets/js/copy-code.js42
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);
+ });
+})();