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