diff options
author | kqlio67 <166700875+kqlio67@users.noreply.github.com> | 2024-10-27 19:17:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-27 19:17:00 +0100 |
commit | 0f8ecee2273f53ddcd40c617e337e9b1ca313a5e (patch) | |
tree | 89ad60026d2ee0f250a2dbd26e1e2dab5237fa7b /g4f/gui/client/static/js/chat.v1.js | |
parent | Update (docs/providers-and-models.md g4f/models.py g4f/Provider/nexra/) (diff) | |
parent | Merge pull request #2302 from foxfire52/copy-patch (diff) | |
download | gpt4free-0f8ecee2273f53ddcd40c617e337e9b1ca313a5e.tar gpt4free-0f8ecee2273f53ddcd40c617e337e9b1ca313a5e.tar.gz gpt4free-0f8ecee2273f53ddcd40c617e337e9b1ca313a5e.tar.bz2 gpt4free-0f8ecee2273f53ddcd40c617e337e9b1ca313a5e.tar.lz gpt4free-0f8ecee2273f53ddcd40c617e337e9b1ca313a5e.tar.xz gpt4free-0f8ecee2273f53ddcd40c617e337e9b1ca313a5e.tar.zst gpt4free-0f8ecee2273f53ddcd40c617e337e9b1ca313a5e.zip |
Diffstat (limited to 'g4f/gui/client/static/js/chat.v1.js')
-rw-r--r-- | g4f/gui/client/static/js/chat.v1.js | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/g4f/gui/client/static/js/chat.v1.js b/g4f/gui/client/static/js/chat.v1.js index 10b5c1f0..9bf07046 100644 --- a/g4f/gui/client/static/js/chat.v1.js +++ b/g4f/gui/client/static/js/chat.v1.js @@ -57,6 +57,25 @@ function filter_message(text) { ) } +function fallback_clipboard (text) { + var textBox = document.createElement("textarea"); + textBox.value = text; + textBox.style.top = "0"; + textBox.style.left = "0"; + textBox.style.position = "fixed"; + document.body.appendChild(textBox); + textBox.focus(); + textBox.select(); + try { + var success = document.execCommand('copy'); + var msg = success ? 'succeeded' : 'failed'; + console.log('Clipboard Fallback: Copying text command ' + msg); + } catch (e) { + console.error('Clipboard Fallback: Unable to copy', e); + } + document.body.removeChild(textBox); +} + hljs.addPlugin(new CopyButtonPlugin()); let typesetPromise = Promise.resolve(); const highlight = (container) => { @@ -88,18 +107,31 @@ const register_message_buttons = async () => { }) } }); + document.querySelectorAll(".message .fa-clipboard").forEach(async (el) => { if (!("click" in el.dataset)) { el.dataset.click = "true"; el.addEventListener("click", async () => { const message_el = el.parentElement.parentElement.parentElement; const copyText = await get_message(window.conversation_id, message_el.dataset.index); - navigator.clipboard.writeText(copyText); + + try { + if (!navigator.clipboard) { + throw new Error("navigator.clipboard: Clipboard API unavailable."); + } + await navigator.clipboard.writeText(copyText); + } catch (e) { + console.error(e); + console.error("Clipboard API writeText() failed! Fallback to document.exec(\"copy\")..."); + fallback_clipboard(copyText); + } + el.classList.add("clicked"); setTimeout(() => el.classList.remove("clicked"), 1000); }) } }); + document.querySelectorAll(".message .fa-volume-high").forEach(async (el) => { if (!("click" in el.dataset)) { el.dataset.click = "true"; |