aboutsummaryrefslogtreecommitdiff
path: root/docs/_static/copy.js
blob: 7eb6060f386ba8cc8f5641c5ecee1c92d9285684 (plain) (blame)
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
const COPY = "fa-copy";
const COPIED = "fa-clipboard-check";

const copy = async (obj) => {
  // <div><span class="copy">  <i class="fas ...">the icon element</i>  </span><pre> code </pre></div>
  await navigator.clipboard.writeText(obj.children[1].innerText).then(
    () => {
      let icon = obj.children[0].children[0];
      icon.className = icon.className.replace(COPY, COPIED);
      setTimeout(() => (icon.className = icon.className.replace(COPIED, COPY)), 2500);
    },
    (r) => alert('Could not copy codeblock:\n' + r.toString())
  );
};

document.addEventListener("DOMContentLoaded", () => {
  let allCodeblocks = document.querySelectorAll("div[class='highlight']");

  for (let codeblock of allCodeblocks) {
      codeblock.parentNode.className += " relative-copy";
      let copyEl = document.createElement("span");
      copyEl.addEventListener('click', () => copy(codeblock));
      copyEl.className = "copy";
      copyEl.setAttribute("aria-label", "Copy Code");
      copyEl.setAttribute("title", "Copy Code");

      let copyIcon = document.createElement("i");
      copyIcon.className = "fas " + COPY;
      copyEl.append(copyIcon);

      codeblock.prepend(copyEl);
  }
});