mirror of
https://github.com/Aroy-Art/Rinkusu.git
synced 2024-12-27 07:44:23 +01:00
Added code copy function
This commit is contained in:
parent
124b1fcbd7
commit
923efbc936
1 changed files with 64 additions and 0 deletions
|
@ -14,6 +14,70 @@ function imgIsLoaded(imgElement) {
|
|||
$(imgElement).removeClass("unloaded");
|
||||
}
|
||||
|
||||
|
||||
function createCopyButton(highlightDiv) {
|
||||
const button = document.createElement("button");
|
||||
button.className = "copy-code-button";
|
||||
button.type = "button";
|
||||
button.innerText = "Copy";
|
||||
button.addEventListener("click", () => copyCodeToClipboard(button, highlightDiv));
|
||||
addCopyButtonToDom(button, highlightDiv);
|
||||
}
|
||||
|
||||
async function copyCodeToClipboard(button, highlightDiv) {
|
||||
const codeToCopy = highlightDiv.querySelector(":last-child > .chroma > code").innerText;
|
||||
try {
|
||||
result = await navigator.permissions.query({ name: "clipboard-write" });
|
||||
if (result.state == "granted" || result.state == "prompt") {
|
||||
await navigator.clipboard.writeText(codeToCopy);
|
||||
} else {
|
||||
copyCodeBlockExecCommand(codeToCopy, highlightDiv);
|
||||
}
|
||||
} catch (_) {
|
||||
copyCodeBlockExecCommand(codeToCopy, highlightDiv);
|
||||
}
|
||||
finally {
|
||||
codeWasCopied(button);
|
||||
}
|
||||
}
|
||||
|
||||
function copyCodeBlockExecCommand(codeToCopy, highlightDiv) {
|
||||
const textArea = document.createElement("textArea");
|
||||
textArea.contentEditable = 'true'
|
||||
textArea.readOnly = 'false'
|
||||
textArea.className = "copyable-text-area";
|
||||
textArea.value = codeToCopy;
|
||||
highlightDiv.insertBefore(textArea, highlightDiv.firstChild);
|
||||
const range = document.createRange()
|
||||
range.selectNodeContents(textArea)
|
||||
const sel = window.getSelection()
|
||||
sel.removeAllRanges()
|
||||
sel.addRange(range)
|
||||
textArea.setSelectionRange(0, 999999)
|
||||
document.execCommand("copy");
|
||||
highlightDiv.removeChild(textArea);
|
||||
}
|
||||
|
||||
function codeWasCopied(button) {
|
||||
button.blur();
|
||||
button.innerText = "Copied!";
|
||||
setTimeout(function() {
|
||||
button.innerText = "Copy";
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
function addCopyButtonToDom(button, highlightDiv) {
|
||||
highlightDiv.insertBefore(button, highlightDiv.firstChild);
|
||||
const wrapper = document.createElement("div");
|
||||
wrapper.className = "highlight-wrapper";
|
||||
highlightDiv.parentNode.insertBefore(wrapper, highlightDiv);
|
||||
wrapper.appendChild(highlightDiv);
|
||||
}
|
||||
|
||||
document.querySelectorAll(".highlight")
|
||||
.forEach(highlightDiv => createCopyButton(highlightDiv));
|
||||
|
||||
|
||||
jQuery(function ($) {
|
||||
"use strict";
|
||||
|
||||
|
|
Loading…
Reference in a new issue