/*
Source:
- https://simplernerd.com/hugo-add-copy-to-clipboard-button/
*/
const svgCopy =
''
const svgCheck =
''
const addCopyButtons = (clipboard) => {
// 1. Look for pre > code elements in the DOM
document.querySelectorAll('pre > code').forEach((codeBlock) => {
// 2. Create a button that will trigger a copy operation
const button = document.createElement('button')
button.className = 'clipboard-button'
button.setAttribute('data-toast-target', 'toast-copied-code-message')
button.setAttribute('aria-label', '{{ T "copyToClipboard" }}')
button.type = 'button'
button.innerHTML = svgCopy
button.addEventListener('click', () => {
const text = codeBlock.innerText.split('\n').filter(Boolean).join('\n')
clipboard.writeText(text).then(
() => {
button.blur()
button.innerHTML = svgCheck
setTimeout(() => (button.innerHTML = svgCopy), 2000)
},
// eslint-disable-next-line n/handle-callback-err
(error) => (button.innerHTML = 'Error')
)
})
// 3. Append the button directly before the pre tag
const pre = codeBlock.parentNode
pre.parentNode.insertBefore(button, pre)
})
}
if (navigator && navigator.clipboard) {
addCopyButtons(navigator.clipboard)
}
document.querySelectorAll('[data-clipboard]').forEach(trigger => {
const text = trigger.getAttribute('data-clipboard')
trigger.addEventListener('click', () => {
navigator.clipboard.writeText(text)
})
})