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 {