github.com/imran-kn/cilium-fork@v1.6.9/Documentation/_static/copybutton.js (about) 1 function runWhenDOMLoaded(cb) { 2 if (document.readyState !== "loading") { 3 cb(); 4 } else if (document.addEventListener) { 5 document.addEventListener("DOMContentLoaded", cb); 6 } else { 7 document.attachEvent("onreadystatechange", function() { 8 if (document.readyState == "complete") cb(); 9 }); 10 } 11 } 12 13 function codeCellId(index) { 14 return "codecell" + index; 15 } 16 17 function clearSelection() { 18 if (window.getSelection) { 19 window.getSelection().removeAllRanges(); 20 } else if (document.selection) { 21 document.selection.empty(); 22 } 23 } 24 25 function addCopyButtonToCodeCells() { 26 if (window.ClipboardJS === undefined) { 27 setTimeout(addCopyButtonToCodeCells, 1000); 28 return; 29 } 30 var codeCells = document.querySelectorAll("pre"); 31 codeCells.forEach(function(codeCell, index) { 32 var wrapper = document.createElement("div"); 33 wrapper.className = "code-wrapper"; 34 codeCell.parentNode.insertBefore(wrapper, codeCell); 35 wrapper.appendChild(codeCell); 36 var id = codeCellId(index); 37 codeCell.setAttribute("id", id); 38 function clipboardButton(id) { 39 var linesCount = codeCell.textContent.trim().split("\n").length; 40 var buttonHtml = []; 41 buttonHtml.push('<div class="copybutton-wrapper">'); 42 buttonHtml.push( 43 '<img class="copy-icon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACiUExURUdwTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkEv5MAAAA1dFJOUwAwnr/H5BShnG3DCRPPm5OdyC4jGzHhB7o4AmkDyTJE1vn6ymWjbAHtTIQE6dwNoGH71I2zlJ78SQAAAI9JREFUKM/t0kcOwkAMhWGnTZhUOoQWeu8w979aJEDiOWhGOQD/wpL1LbwxER32ivUU9E0e6zXsngDOfWLJGBZVwl36i6H4FL3mCDGfeqygDegkFjYZ9wEbQ37ZVoCu5Oj/sSLaBnSCTjPUYSv2upkOqSeigRbJcPPdYs1xNYMlPbHvvWyXgOcHe/vbdUPmCj5KFX8s6tJBAAAAAElFTkSuQmCC" alt="" />' 44 ); 45 buttonHtml.push( 46 '<a class="copybutton" data-clipboard-mode="first-line" data-clipboard-target="#' + 47 id + 48 '">' 49 ); 50 buttonHtml.push(linesCount > 1 ? "Copy First Line" : "Copy Line"); 51 buttonHtml.push("</a>"); 52 if (linesCount > 1) { 53 buttonHtml.push( 54 '<a class="copybutton" data-clipboard-mode="all" data-clipboard-target="#' + 55 id + 56 '">' 57 ); 58 buttonHtml.push("Copy All"); 59 buttonHtml.push("</a>"); 60 } 61 buttonHtml.push("</div>"); 62 return buttonHtml.join("\n"); 63 } 64 codeCell.insertAdjacentHTML("afterend", clipboardButton(id)); 65 }); 66 67 new ClipboardJS(".copybutton", { 68 text: function(trigger) { 69 var parent = trigger.parentNode.parentNode; 70 var code = parent.querySelector("pre"); 71 var mode = trigger.getAttribute("data-clipboard-mode"); 72 if (mode === "first-line") { 73 return code.textContent 74 .split("\n")[0] 75 .trim() 76 .replace(/^\$/, "") 77 .trim(); 78 } else { 79 return code.textContent; 80 } 81 } 82 }); 83 } 84 85 runWhenDOMLoaded(addCopyButtonToCodeCells);