From 98c27e7ddfb7681a74e5f281d2a17abe7b2fa4c7 Mon Sep 17 00:00:00 2001 From: amirdaraby Date: Fri, 12 Dec 2025 22:56:39 +0330 Subject: [PATCH 1/3] add: copy code button --- _site/scripts/script.js | 18 ++++++++++++++++++ _site/styles/style.css | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/_site/scripts/script.js b/_site/scripts/script.js index ea9dd0b..daaad7c 100644 --- a/_site/scripts/script.js +++ b/_site/scripts/script.js @@ -92,6 +92,7 @@ function updateCode() { e.appendChild(code); }); })(e); + addCopyButton(e); } } @@ -116,6 +117,23 @@ function addCommentStyle(code) { } } +function addCopyButton(pre) { + pre.style.position = "relative"; + + const btn = document.createElement("button"); + btn.classList.add("copy-btn"); + btn.textContent = "Copy"; + + btn.addEventListener("click", () => { + navigator.clipboard.writeText(pre.textContent.trim()).then(() => { + btn.textContent = "Copied"; + setTimeout(() => btn.textContent = "Copy", 700); + }); + }); + + pre.insertBefore(btn, pre.firstChild); +} + let tocLevel = 4; function disableTOC() { diff --git a/_site/styles/style.css b/_site/styles/style.css index cb7876b..dac6b63 100644 --- a/_site/styles/style.css +++ b/_site/styles/style.css @@ -748,6 +748,24 @@ ul.toplinks li img { opacity: 0.7; } +.copy-btn { + position: absolute; + top: 8px; + right: 8px; + border-radius: 8px; + padding: 2px 6px; + background: rgba(0,0,0,0.8); + color: #fff; + border: none; + cursor: pointer; + opacity: 0.7; + transition: opacity 0.2s ease, background 0.2s ease; +} + +.copy-btn:hover { + opacity: 1; +} + /* test image */ /*body > nav, main { From 68b1a92dcbd08e5f1fabf50c12e36d53d6ed0a30 Mon Sep 17 00:00:00 2001 From: amirdaraby Date: Sat, 13 Dec 2025 12:13:49 +0330 Subject: [PATCH 2/3] add copy button to all pre tags --- _site/scripts/script.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_site/scripts/script.js b/_site/scripts/script.js index daaad7c..af43b3a 100644 --- a/_site/scripts/script.js +++ b/_site/scripts/script.js @@ -60,6 +60,7 @@ function updateCode() { if (!e.dataset['codesrc']) { for (const code of e.querySelectorAll('code')) { addCommentStyle(code); + addCopyButton(e); } continue; } @@ -90,9 +91,9 @@ function updateCode() { code.textContent = text; addCommentStyle(code); e.appendChild(code); + addCopyButton(e); }); })(e); - addCopyButton(e); } } From 28ac8ecb8d6b61d77858e14dc71dd90535d87baf Mon Sep 17 00:00:00 2001 From: amirdaraby Date: Sat, 13 Dec 2025 12:22:10 +0330 Subject: [PATCH 3/3] fix copy code buttons --- _site/scripts/script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_site/scripts/script.js b/_site/scripts/script.js index af43b3a..58f2775 100644 --- a/_site/scripts/script.js +++ b/_site/scripts/script.js @@ -126,7 +126,7 @@ function addCopyButton(pre) { btn.textContent = "Copy"; btn.addEventListener("click", () => { - navigator.clipboard.writeText(pre.textContent.trim()).then(() => { + navigator.clipboard.writeText(pre.querySelector("code").textContent.trim()).then(() => { btn.textContent = "Copied"; setTimeout(() => btn.textContent = "Copy", 700); });