diff --git a/assets/js/code-copy.js b/assets/js/code-copy.js
index d56363e4..fcdc579a 100644
--- a/assets/js/code-copy.js
+++ b/assets/js/code-copy.js
@@ -1,33 +1,31 @@
function CopyCode(clipboard) {
- document.querySelectorAll('pre > code').forEach(function(codeBlock) {
- var button = document.createElement('button');
- button.className = 'code-copy';
- button.type = 'button';
- button.innerHTML = ' Copy';
+ document.querySelectorAll(".highlight").forEach((codeBlock) => {
+ const button = document.createElement("button");
+ button.className = "code-copy";
+ button.type = "button";
+ button.innerHTML = ' Copy';
- button.addEventListener('click', function() {
- // removes return carriage from copied text
- clipboard.writeText(codeBlock.textContent.replace(/\n$/g, "")).then(
- function() {
- button.blur(); /* Chrome fix */
- button.innerHTML = ' Copied!';
- setTimeout(function() {
- button.innerHTML = ' Copy';
- }, 2000);
- },
- function(error) {
- button.innerHTML = ' Error';
- console.error(error);
- }
- );
- });
+ button.addEventListener("click", async () => {
+ try {
+ await clipboard.writeText(
+ codeBlock.textContent
+ .replace(/^\s*\d+\s/gm, "") // remove line numbers
+ .replace(/^\s*|\s*$/g, "") // remove carriage returns at top and bottom of block
+ );
- var pre = codeBlock.parentNode;
- if (pre.parentNode.classList.contains('highlight')) {
- var highlight = pre.parentNode;
- highlight.parentNode.insertBefore(button, highlight);
- }
+ button.blur(); /* Chrome fix */
+ button.innerHTML = ' Copied!';
+ setTimeout(() => {
+ button.innerHTML = ' Copy';
+ }, 2000);
+ } catch (error) {
+ button.innerHTML = ' Error';
+ console.error(error);
+ }
});
+
+ codeBlock.parentNode.insertBefore(button, codeBlock);
+ });
}
CopyCode(navigator.clipboard);