UNPKG

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
(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)}})}});