69 lines
2.0 KiB
JavaScript
Raw Normal View History

2025-01-12 00:52:51 +08:00
(function () {
function showValueBoxCodeHelp() {
document
.getElementById("copy-clipboard-not-supported")
.classList.remove("d-none");
}
function selectValueBoxCode() {
const codeElement = document.getElementById("value-box-code");
// Create a range and select all of the text within the element
const range = document.createRange();
range.selectNodeContents(codeElement);
// Create a selection and add the range to it
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
let copyButtonUpdateTimer = null;
function resetCopyButtonText() {
const btn = document.getElementById("copy-code-to-clipboard");
if (!btn) return;
btn.innerText = "Copy to clipboard";
}
window.copyValueBoxCode = function () {
const code = document.getElementById("value-box-code").innerText;
const btn = document.getElementById("copy-code-to-clipboard");
clearTimeout(copyButtonUpdateTimer);
navigator.clipboard
.writeText(code)
.then(() => {
btn.innerText = "Copied!";
copyButtonUpdateTimer = setTimeout(resetCopyButtonText, 2000);
})
.catch(() => {
btn.innerText = "Copy failed";
copyButtonUpdateTimer = setTimeout(resetCopyButtonText, 2000);
showValueBoxCodeHelp();
selectValueBoxCode();
});
};
document.addEventListener("show.bs.modal", function () {
if (!document.getElementById("value-box-code")) return;
navigator.permissions.query({ name: "clipboard-write" }).then((result) => {
const allowed = result.state == "granted" || result.state == "prompt";
if (!allowed) {
// clipboard isn't supported, hide the copy button
document
.getElementById("copy-code-to-clipboard")
.classList.add("d-none");
// fall back to manual copy/paste with a little help
showValueBoxCodeHelp();
selectValueBoxCode();
}
});
});
})();