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);