const copiedText = document.getElementById('copy-success').textContent; const initCopyText = document.getElementById('copy-init').textContent; const changeIcon = (copyDiv, className) => { copyDiv.classList.add(className); copyDiv.setAttribute("aria-label", copiedText); setTimeout(() => { copyDiv.classList.remove(className); copyDiv.setAttribute("aria-label", initCopyText); }, 2500); }; const addCopyEventListenerToDiv = (copyDiv, block) => { copyDiv.addEventListener("click", () => copyCodeAndChangeIcon(copyDiv, block)); }; const copyCodeAndChangeIcon = async (copyDiv, block) => { const code = block.querySelector('table') ? getTableCode(block) : getNonTableCode(block); try { await navigator.clipboard.writeText(code); changeIcon(copyDiv, "checked"); } catch (error) { changeIcon(copyDiv, "error"); } }; const getNonTableCode = (block) => { return [...block.querySelectorAll('code')] .map(code => code.textContent) .join(''); }; const getTableCode = (block) => { return [...block.querySelectorAll('tr')] .map(row => row.querySelector('td:last-child')?.innerText ?? '') .join(''); }; document.querySelectorAll("pre").forEach((block) => { const copyDiv = document.createElement("div"); copyDiv.setAttribute("role", "button"); copyDiv.setAttribute("aria-label", initCopyText); copyDiv.setAttribute("title", initCopyText); copyDiv.className = "copy-code"; block.prepend(copyDiv); addCopyEventListenerToDiv(copyDiv, block); });