mirror of
https://github.com/Aroy-Art/Rinkusu.git
synced 2024-12-28 15:14:22 +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");
|
$(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 ($) {
|
jQuery(function ($) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue