import ClipboardJS from 'clipboard/dist/clipboard'; // These icons must be inline to avoid rendering bugs. const clipboardIcon = ``; const clipboardCopiedIcon = ``; // Copy to Clipboard. let codeBlocks = document.querySelectorAll('.markdown pre'); codeBlocks.forEach((element, key) => { // Add wrapper to code block. var wrapper = document.createElement('div'); ['relative', 'code-block-wrapper'].forEach((value) => { wrapper.classList.add(value); }); element.parentNode.insertBefore(wrapper, element); wrapper.appendChild(element); // Copy to clipboard button. let copyToClipboardBtn = document.createElement('button'); copyToClipboardBtn.innerHTML = clipboardIcon; copyToClipboardBtn.id = `clipButton-${key}`; ['md:block', 'hidden'].forEach((value) => { copyToClipboardBtn.classList.add(value); }); copyToClipboardBtn.setAttribute('aria-label', 'Copy to Clipboard'); copyToClipboardBtn.setAttribute('title', 'Copy to Clipboard'); copyToClipboardBtn.classList.add('copyBtn'); wrapper.appendChild(copyToClipboardBtn); let copyToClipboard = new ClipboardJS(`#${copyToClipboardBtn.id}`); copyToClipboard.on('success', (element) => { copyToClipboardBtn.innerHTML = clipboardCopiedIcon; element.clearSelection(); setTimeout(() => { copyToClipboardBtn.innerHTML = clipboardIcon; }, 1500); }); // Code Element. let codeElement = element.querySelector('code'); codeElement.id = `clipText-${key}`; copyToClipboardBtn.dataset.clipboardTarget = `#${codeElement.id}`; });