25 lines
801 B
TypeScript
25 lines
801 B
TypeScript
import { onMounted, onUpdated } from 'vue'
|
|
import { copyText } from '@/utils/format'
|
|
|
|
export function useCopyCode() {
|
|
function copyCodeBlock() {
|
|
const codeBlockWrapper = document.querySelectorAll('.code-block-wrapper')
|
|
codeBlockWrapper.forEach((wrapper) => {
|
|
const copyBtn = wrapper.querySelector('.code-block-header__copy')
|
|
const codeBlock = wrapper.querySelector('.code-block-body')
|
|
if (copyBtn && codeBlock) {
|
|
copyBtn.addEventListener('click', () => {
|
|
if (navigator.clipboard?.writeText)
|
|
navigator.clipboard.writeText(codeBlock.textContent ?? '')
|
|
else
|
|
copyText({ text: codeBlock.textContent ?? '', origin: true })
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
onMounted(() => copyCodeBlock())
|
|
|
|
onUpdated(() => copyCodeBlock())
|
|
}
|