personal-blog/public/js/code-copy.js

36 lines
926 B
JavaScript

(() => {
function createCopyButton(codeNode) {
const copyBtn = document.createElement('button')
copyBtn.className = 'code-copy-btn'
copyBtn.type = 'button'
copyBtn.innerText = 'copy'
let resetTimer
copyBtn.addEventListener('click', () => {
navigator.clipboard.writeText(codeNode.innerText).then(() => {
copyBtn.innerText = 'copied!'
}).then(() => {
clearTimeout(resetTimer)
resetTimer = setTimeout(() => {
copyBtn.innerText = 'copy'
}, 1000)
})
})
return copyBtn
}
document.querySelectorAll('pre > code')
.forEach((codeNode) => {
const copyBtn = createCopyButton(codeNode);
const preNode = codeNode.parentNode
codeNode.parentNode.insertBefore(copyBtn, codeNode)
})
document.querySelectorAll('.highlight table > tbody > tr > td:first-child .code-copy-btn')
.forEach((btn) => {
btn.remove()
})
})()