copy-code-snippet
Version:
Zero-dependency Javascript utility that automatically adds "Copy" buttons to your `<pre><code>` blocks - perfect for blogs, docs, and any site that displays code.
19 lines (18 loc) • 1.36 kB
JavaScript
(function(o,n){typeof exports=="object"&&typeof module<"u"?module.exports=n():typeof define=="function"&&define.amd?define(n):(o=typeof globalThis<"u"?globalThis:o||self,o.copyCodeSnippet=n())})(this,function(){"use strict";const o={selector:"pre code",buttonText:"Copy",buttonClassName:"copy-btn",copiedText:"Copied!",timeout:1e3,position:"top-right",disableDefaultStyle:!1},n=()=>{const i=document.createElement("style");i.textContent=`
.copy-btn {
position: absolute;
top: 8px;
right: 8px;
padding: 5px 10px;
font-size: 12px;
background: #333;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
z-index: 100;
}
.copy-btn:hover {
background: #555;
}
`,document.head.appendChild(i)};return(i={})=>{const t={...o,...i};document.querySelectorAll(t.selector).forEach(s=>{const p=s.parentElement;if(p){t.disableDefaultStyle||n();const e=document.createElement("button");e.innerText=t.buttonText,e.className=t.buttonClassName,e.addEventListener("click",()=>{const d=s.innerHTML;navigator.clipboard.writeText(d).then(()=>{e.innerText=t.copiedText,setTimeout(()=>e.innerText=t.buttonText,t.timeout)})}),p.style.position="relative",e.style.position="absolute",e.style.top="8px",t.position==="top-left"?e.style.left="8px":e.style.right="8px",p.appendChild(e)}})}});