| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| (function () { |
| 'use strict'; |
|
|
| function addCopyButton(pre) { |
| var code = pre.querySelector('code'); |
| if (!code) { |
| return; |
| } |
| var firstChild = code.firstChild; |
| if (!firstChild) { |
| return; |
| } |
| var button = document.createElement('button'); |
| button.textContent = '\uD83D\uDCCE'; |
| button.style.position = 'relative'; |
| button.style.float = 'right'; |
| button.style.fontSize = '1em'; |
| button.style.background = 'none'; |
| button.style.border = 'none'; |
| button.style.cursor = 'pointer'; |
| button.addEventListener('click', function () { |
| var range = document.createRange(); |
| range.selectNodeContents(code); |
| range.setStartBefore(firstChild); |
| var selection = window.getSelection(); |
| selection.removeAllRanges(); |
| selection.addRange(range); |
|
|
| try { |
| var success = document.execCommand('copy'); |
| if (success) { |
| button.textContent = '\u2714'; |
| setTimeout(function () { |
| button.textContent = '\uD83D\uDCCE'; |
| }, 2000); |
| } else { |
| button.textContent = '\u2716'; |
| } |
| } catch (e) { |
| console.error(e); |
| button.textContent = '\u2716'; |
| } |
|
|
| selection.removeAllRanges(); |
| }); |
| code.insertBefore(button, firstChild); |
| } |
|
|
| function handleNewElements(mutationsList, observer) { |
| for (var mutation of mutationsList) { |
| if (mutation.type === 'childList') { |
| for (var node of mutation.addedNodes) { |
| if (node.nodeName === 'PRE') { |
| addCopyButton(node); |
| } |
| } |
| } |
| } |
| } |
|
|
| var observer = new MutationObserver(handleNewElements); |
| observer.observe(document.documentElement, { childList: true, subtree: true }); |
|
|
| document.querySelectorAll('pre').forEach(addCopyButton); |
| })(); |
|
|