summaryrefslogtreecommitdiff
path: root/static/js/copy-code.js
blob: ee7cdc7aa6d9be0b29779fcb70fca10848a56a4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
document.addEventListener("DOMContentLoaded", function () {
  const codeBlocks = document.querySelectorAll(".highlight")

  codeBlocks.forEach((codeBlock) => {
    if (codeBlock.className == "mermaid") return
    const copyButton = document.createElement("button")
    copyButton.className = "copy-code-button"
    copyButton.textContent = "copy"
    const copyButtonContainer = document.createElement("div")
    copyButtonContainer.className = "copy-code-container"
    copyButtonContainer.appendChild(copyButton)

    // 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)
        })
    })
  })
})