diff --git a/public/index.html b/public/index.html index effe9e262..2fdc5b937 100644 --- a/public/index.html +++ b/public/index.html @@ -2303,8 +2303,10 @@
${characterName} - -
+
+
+
+
diff --git a/public/script.js b/public/script.js index 64410b89b..a2649805f 100644 --- a/public/script.js +++ b/public/script.js @@ -1010,25 +1010,28 @@ function addCopyToCodeBlocks(messageElement) { const codeBlocks = $(messageElement).find("pre code"); for (let i = 0; i < codeBlocks.length; i++) { hljs.highlightElement(codeBlocks.get(i)); - const copyButton = document.createElement('i'); - copyButton.classList.add('fa-solid', 'fa-copy', 'code-copy'); - copyButton.title = 'Copy code'; - codeBlocks.get(i).appendChild(copyButton); - copyButton.addEventListener('click', function (event) { - navigator.clipboard.writeText(codeBlocks.get(i).innerText); - const copiedMsg = document.createElement("div"); - copiedMsg.classList.add('code-copied'); - copiedMsg.innerText = "Copied!"; - copiedMsg.style.top = `${event.clientY - 55}px`; - copiedMsg.style.left = `${event.clientX - 55}px`; - document.body.append(copiedMsg); - setTimeout(() => { - document.body.removeChild(copiedMsg); - }, 2500); - }); + if (navigator.clipboard !== undefined) { + const copyButton = document.createElement('i'); + copyButton.classList.add('fa-solid', 'fa-copy', 'code-copy'); + copyButton.title = 'Copy code'; + codeBlocks.get(i).appendChild(copyButton); + copyButton.addEventListener('pointerup', function (event) { + navigator.clipboard.writeText(codeBlocks.get(i).innerText); + const copiedMsg = document.createElement("div"); + copiedMsg.classList.add('code-copied'); + copiedMsg.innerText = "Copied!"; + copiedMsg.style.top = `${event.clientY - 55}px`; + copiedMsg.style.left = `${event.clientX - 55}px`; + document.body.append(copiedMsg); + setTimeout(() => { + document.body.removeChild(copiedMsg); + }, 1000); + }); + } } } + function addOneMessage(mes, { type = "normal", insertAfter = null, scroll = true } = {}) { var messageText = mes["mes"]; @@ -1369,7 +1372,7 @@ class StreamingProcessor { } $(`#chat .mes[mesid="${messageId}"] .mes_stop`).css({ 'display': 'block' }); - $(`#chat .mes[mesid="${messageId}"] .mes_edit`).css({ 'display': 'none' }); + $(`#chat .mes[mesid="${messageId}"] .mes_buttons`).css({ 'display': 'none' }); } hideStopButton(messageId) { @@ -1378,7 +1381,7 @@ class StreamingProcessor { } $(`#chat .mes[mesid="${messageId}"] .mes_stop`).css({ 'display': 'none' }); - $(`#chat .mes[mesid="${messageId}"] .mes_edit`).css({ 'display': 'block' }); + $(`#chat .mes[mesid="${messageId}"] .mes_buttons`).css({ 'display': 'block' }); } onStartStreaming(text) { @@ -1460,7 +1463,7 @@ class StreamingProcessor { activateSendButtons(); showSwipeButtons(); setGenerationProgress(0); - $('.mes_edit:last').show(); + $('.mes_buttons:last').show(); generatedPromtCache = ''; } @@ -2296,7 +2299,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, activateSendButtons(); showSwipeButtons(); setGenerationProgress(0); - $('.mes_edit:last').show(); + $('.mes_buttons:last').show(); }; function onError(jqXHR, exception) { @@ -2433,7 +2436,7 @@ function throwCircuitBreakerError() { activateSendButtons(); setGenerationProgress(0); showSwipeButtons(); - $('.mes_edit:last').show(); + $('.mes_buttons:last').show(); throw new Error('Generate circuit breaker interruption'); } @@ -3401,7 +3404,7 @@ function messageEditDone(div) { mesBlock.find(".mes_text").empty(); mesBlock.find(".mes_edit_buttons").css("display", "none"); - mesBlock.find(".mes_edit").css("display", "inline-block"); + mesBlock.find(".mes_buttons").css("display", "inline-block"); mesBlock.find(".mes_text").append( messageFormatting( text, @@ -4147,7 +4150,7 @@ $(document).ready(function () { if (run_generate && !is_send_press && parseInt(chat[chat.length - 1]['swipe_id']) === chat[chat.length - 1]['swipes'].length) { console.log('caught here 2'); is_send_press = true; - $('.mes_edit:last').hide(); + $('.mes_buttons:last').hide(); Generate('swipe'); } else { if (parseInt(chat[chat.length - 1]['swipe_id']) !== chat[chat.length - 1]['swipes'].length) { @@ -5294,6 +5297,39 @@ $(document).ready(function () { $("#load_select_chat_div").css("display", "block"); }); + if (navigator.clipboard === undefined) { + // No clipboard support + $(".mes_copy").remove(); + } + else { + $(document).on("pointerup", ".mes_copy", function () { + if (this_chid !== undefined || selected_group) { + const message = $(this).closest(".mes"); + + if (message.data("isSystem")) { + return; + } + try { + var edit_mes_id = $(this).closest(".mes").attr("mesid"); + var text = chat[edit_mes_id]["mes"]; + navigator.clipboard.writeText(text); + const copiedMsg = document.createElement("div"); + copiedMsg.classList.add('code-copied'); + copiedMsg.innerText = "Copied!"; + copiedMsg.style.top = `${event.clientY - 55}px`; + copiedMsg.style.left = `${event.clientX - 55}px`; + document.body.append(copiedMsg); + setTimeout(() => { + document.body.removeChild(copiedMsg); + }, 1000); + } catch (err) { + console.error('Failed to copy: ', err); + } + } + }); + } + + //******************** //***Message Editor*** $(document).on("click", ".mes_edit", function () { @@ -5324,7 +5360,7 @@ $(document).ready(function () { messageEditDone(mes_edited); } $(this).closest(".mes_block").find(".mes_text").empty(); - $(this).css("display", "none"); + $(this).closest(".mes_block").find(".mes_buttons").css("display", "none"); $(this).closest(".mes_block").find(".mes_edit_buttons").css("display", "inline-flex"); var edit_mes_id = $(this).closest(".mes").attr("mesid"); this_edit_mes_id = edit_mes_id; @@ -5373,7 +5409,7 @@ $(document).ready(function () { $(this).closest(".mes_block").find(".mes_text").empty(); $(this).closest(".mes_edit_buttons").css("display", "none"); - $(this).closest(".mes_block").find(".mes_edit").css("display", "inline-block"); + $(this).closest(".mes_block").find(".mes_buttons").css("display", "inline-block"); $(this) .closest(".mes_block") .find(".mes_text") diff --git a/public/style.css b/public/style.css index 512218233..9ef9e6efd 100644 --- a/public/style.css +++ b/public/style.css @@ -2093,9 +2093,16 @@ input[type="range"]::-webkit-slider-thumb { width: 20px; opacity: 0.5; } - -.mes_edit { +.mes_buttons { float: right; + height: 20px; + grid-row-start: 1; + position: relative; + right: 0px; +} + +.mes_copy, +.mes_edit { cursor: pointer; transition: 0.3s ease-in-out; height: 20px; @@ -2105,10 +2112,18 @@ input[type="range"]::-webkit-slider-thumb { } .mes_edit:hover, +.mes_copy:hover, .mes_stop:hover { opacity: 1; } +.last_mes .mes_copy { + grid-row-start: 1; + position: relative; + right: -30px; +} + + .last_mes .mes_edit, .last_mes .mes_edit_buttons, .last_mes .mes_stop {