summaryrefslogtreecommitdiff
path: root/static/js
diff options
context:
space:
mode:
authorArun Mathai <me@arunmathaisk.in>2025-01-14 17:27:28 +0530
committerArun Mathai <me@arunmathaisk.in>2025-01-16 10:36:25 +0530
commit156f1eb9623a54843a728936b08851cdb7aa21e3 (patch)
tree2f2b16f94cd37d93026fa5532b8f06a7ac9eda09 /static/js
parent86bb1d6cda6a59a05d24558c83b6e3c780138f96 (diff)
feat(copy-code): To allow user to copy contents within code block to clipboard
fix(ui): corrections told by tomfran fix(ui): add more contrast to button. fix(ui): loading js as deferred
Diffstat (limited to 'static/js')
-rw-r--r--static/js/copy-code.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/static/js/copy-code.js b/static/js/copy-code.js
new file mode 100644
index 0000000..67fd936
--- /dev/null
+++ b/static/js/copy-code.js
@@ -0,0 +1,33 @@
+document.addEventListener("DOMContentLoaded", function () {
+ const codeBlocks = document.querySelectorAll("pre");
+
+ codeBlocks.forEach((codeBlock) => {
+ const copyButton = document.createElement("button");
+ copyButton.className = "copy-code-button";
+ copyButton.textContent = "copy";
+
+ // Insert the button inside the <pre> block
+ codeBlock.appendChild(copyButton);
+
+ copyButton.addEventListener("click", function () {
+ const code = codeBlock.querySelector("code");
+ // Get the code content
+ const textToCopy = code.textContent || code.innerText;
+
+ // Use the Clipboard API to copy the text
+ navigator.clipboard
+ .writeText(textToCopy)
+ .then(() => {
+ // Change button text to "Copied"
+ copyButton.textContent = "copied";
+
+ setTimeout(() => {
+ copyButton.textContent = "copy";
+ }, 2000); // Reset the button text after 2 seconds
+ })
+ .catch((err) => {
+ console.error("Unable to copy text:", err);
+ });
+ });
+ });
+});