diff options
| author | Arun Mathai <me@arunmathaisk.in> | 2025-01-14 17:27:28 +0530 | 
|---|---|---|
| committer | Arun Mathai <me@arunmathaisk.in> | 2025-01-16 10:36:25 +0530 | 
| commit | 156f1eb9623a54843a728936b08851cdb7aa21e3 (patch) | |
| tree | 2f2b16f94cd37d93026fa5532b8f06a7ac9eda09 /static | |
| parent | 86bb1d6cda6a59a05d24558c83b6e3c780138f96 (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')
| -rw-r--r-- | static/js/copy-code.js | 33 | 
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); +        }); +    }); +  }); +}); | 
