#363 Non-blocking bookmark creation

This commit is contained in:
SillyLossy
2023-05-22 17:01:16 +03:00
parent 03f2310c8b
commit 23f7fe0667
5 changed files with 63 additions and 63 deletions

View File

@ -2452,7 +2452,7 @@
</div> </div>
<div id="message_template" class="template_element"> <div id="message_template" class="template_element">
<div class="mes" mesid="${count_view_mes}" ch_name="${characterName}" is_user="${mes.is_user}" is_system="${mes.is_system}"> <div class="mes" mesid="" ch_name="" is_user="" is_system="" bookmark_link="">
<div class="for_checkbox"></div><input type="checkbox" class="del_checkbox"> <div class="for_checkbox"></div><input type="checkbox" class="del_checkbox">
<div class="mesAvatarWrapper"> <div class="mesAvatarWrapper">
<div class="avatar"> <div class="avatar">
@ -2467,6 +2467,7 @@
<span class="name_text">${characterName}</span> <span class="name_text">${characterName}</span>
<div class="mes_buttons"> <div class="mes_buttons">
<div title="Open bookmark chat" class="mes_bookmark fa-solid fa-bookmark"></div>
<div title="Generate Image" class="sd_message_gen fa-solid fa-paintbrush"></div> <div title="Generate Image" class="sd_message_gen fa-solid fa-paintbrush"></div>
<div title="Narrate" class="mes_narrate fa-solid fa-bullhorn"></div> <div title="Narrate" class="mes_narrate fa-solid fa-bullhorn"></div>
<div title="Prompt" class="mes_prompt fa-solid fa-square-poll-horizontal "></div> <div title="Prompt" class="mes_prompt fa-solid fa-square-poll-horizontal "></div>

View File

@ -1069,9 +1069,15 @@ function messageFormatting(mes, ch_name, isSystem, isUser) {
return mes; return mes;
} }
function getMessageFromTemplate({ mesId, characterName, isUser, avatarImg, bias, isSystem, title, timerValue, timerTitle } = {}) { function getMessageFromTemplate({ mesId, characterName, isUser, avatarImg, bias, isSystem, title, timerValue, timerTitle, bookmarkLink } = {}) {
const mes = $('#message_template .mes').clone(); const mes = $('#message_template .mes').clone();
mes.attr({ 'mesid': mesId, 'ch_name': characterName, 'is_user': isUser, 'is_system': !!isSystem }); mes.attr({
'mesid': mesId,
'ch_name': characterName,
'is_user': isUser,
'is_system': !!isSystem,
'bookmark_link': bookmarkLink,
});
mes.find('.avatar img').attr('src', avatarImg); mes.find('.avatar img').attr('src', avatarImg);
mes.find('.ch_name .name_text').text(characterName); mes.find('.ch_name .name_text').text(characterName);
mes.find('.mes_bias').html(bias); mes.find('.mes_bias').html(bias);
@ -1105,15 +1111,7 @@ function addCopyToCodeBlocks(messageElement) {
codeBlocks.get(i).appendChild(copyButton); codeBlocks.get(i).appendChild(copyButton);
copyButton.addEventListener('pointerup', function (event) { copyButton.addEventListener('pointerup', function (event) {
navigator.clipboard.writeText(codeBlocks.get(i).innerText); navigator.clipboard.writeText(codeBlocks.get(i).innerText);
const copiedMsg = document.createElement("div"); toastr.info('Copied!', '', { timeOut: 2000 });
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);
}); });
} }
} }
@ -1165,6 +1163,7 @@ function addOneMessage(mes, { type = "normal", insertAfter = null, scroll = true
mes.is_user, mes.is_user,
); );
const bias = messageFormatting(mes.extra?.bias ?? ""); const bias = messageFormatting(mes.extra?.bias ?? "");
const bookmarkLink = mes?.extra?.bookmark_link ?? '';
let params = { let params = {
mesId: count_view_mes, mesId: count_view_mes,
@ -1174,6 +1173,7 @@ function addOneMessage(mes, { type = "normal", insertAfter = null, scroll = true
bias: bias, bias: bias,
isSystem: isSystem, isSystem: isSystem,
title: title, title: title,
bookmarkLink: bookmarkLink,
...formatGenerationTimer(mes.gen_started, mes.gen_finished), ...formatGenerationTimer(mes.gen_started, mes.gen_finished),
}; };
@ -6026,15 +6026,7 @@ $(document).ready(function () {
var edit_mes_id = $(this).closest(".mes").attr("mesid"); var edit_mes_id = $(this).closest(".mes").attr("mesid");
var text = chat[edit_mes_id]["mes"]; var text = chat[edit_mes_id]["mes"];
navigator.clipboard.writeText(text); navigator.clipboard.writeText(text);
const copiedMsg = document.createElement("div"); toastr.info('Copied!', '', { timeOut: 2000 });
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) { } catch (err) {
console.error('Failed to copy: ', err); console.error('Failed to copy: ', err);
} }
@ -6220,8 +6212,9 @@ $(document).ready(function () {
showSwipeButtons(); showSwipeButtons();
}); });
$(document).on("click", ".mes_edit_copy", function () { $(document).on("click", ".mes_edit_copy", async function () {
if (!confirm('Create a copy of this message?')) { const confirmation = await callPopup('Create a copy of this message?', 'confirm');
if (!confirmation) {
return; return;
} }
@ -6241,8 +6234,9 @@ $(document).ready(function () {
}); });
$(document).on("click", ".mes_edit_delete", function () { $(document).on("click", ".mes_edit_delete", async function () {
if (!confirm("Are you sure you want to delete this message?")) { const confirmation = await callPopup("Are you sure you want to delete this message?", 'confirm');
if (!confirmation) {
return; return;
} }
@ -6439,8 +6433,14 @@ $(document).ready(function () {
select_rm_characters(); select_rm_characters();
}); });
$(document).on("click", ".select_chat_block, .bookmark_link", async function () { $(document).on("click", ".select_chat_block, .bookmark_link, .mes_bookmark", async function () {
let file_name = $(this).attr("file_name").replace(".jsonl", ""); let file_name = $(this).hasClass('mes_bookmark')
? $(this).closest('.mes').attr('bookmark_link')
: $(this).attr("file_name").replace(".jsonl", "");
if (!file_name) {
return;
}
if (selected_group) { if (selected_group) {
await openGroupChat(selected_group, file_name); await openGroupChat(selected_group, file_name);
@ -6605,10 +6605,6 @@ $(document).ready(function () {
}); });
}); });
$('#chat').on('scroll', () => {
$('.code-copied').css({ 'display': 'none' });
});
$(document).on('click', '.mes_img_enlarge', enlargeMessageImage); $(document).on('click', '.mes_img_enlarge', enlargeMessageImage);
$(document).on('click', '.mes_img_delete', deleteMessageImage); $(document).on('click', '.mes_img_delete', deleteMessageImage);

View File

@ -124,6 +124,26 @@ function showBookmarksButtons() {
} }
async function createNewBookmark() { async function createNewBookmark() {
if (!chat.length) {
toastr.warning('The chat is empty.', 'Bookmark creation failed');
return;
}
const mesId = chat.length - 1;
const lastMes = chat[mesId];
if (typeof lastMes.extra !== 'object') {
lastMes.extra = {};
}
if (lastMes.extra.bookmark_link) {
const confirm = await callPopup('Bookmark checkpoint for the last message already exists. Would you like to replace it?', 'confirm');
if (!confirm) {
return;
}
}
let name = await getBookmarkName(); let name = await getBookmarkName();
if (!name) { if (!name) {
@ -139,9 +159,11 @@ async function createNewBookmark() {
await saveChat(name, newMetadata); await saveChat(name, newMetadata);
} }
let mainMessage = stringFormat(system_messages[system_message_types.BOOKMARK_CREATED].mes, name, name); lastMes.extra['bookmark_link'] = name;
sendSystemMessage(system_message_types.BOOKMARK_CREATED, mainMessage); $(`.mes[mesid="${mesId}"]`).attr('bookmark_link', name);
await saveChatConditional(); await saveChatConditional();
toastr.success('Click the bookmark icon in the last message to open the checkpoint chat.', 'Bookmark created', { timeOut: 10000 });
} }
async function backToMainChat() { async function backToMainChat() {

View File

@ -11,15 +11,7 @@ function openContextTemplateEditor() {
function copyTemplateParameter(event) { function copyTemplateParameter(event) {
const text = $(event.target).text(); const text = $(event.target).text();
navigator.clipboard.writeText(text); navigator.clipboard.writeText(text);
const copiedMsg = document.createElement("div"); toastr.info('Copied!', '', { timeOut: 2000 });
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);
} }
jQuery(() => { jQuery(() => {

View File

@ -2297,25 +2297,25 @@ input[type="range"]::-webkit-slider-thumb {
margin-right: 30px; margin-right: 30px;
} }
.mes_prompt, .mes_buttons>div {
.mes_narrate,
.sd_message_gen,
.mes_copy,
.mes_edit {
cursor: pointer; cursor: pointer;
transition: 0.3s ease-in-out; transition: 0.3s ease-in-out;
filter: drop-shadow(0px 0px 2px black); filter: drop-shadow(0px 0px 2px black);
opacity: 0.2; opacity: 0.2;
} }
.mes_edit:hover, .mes_buttons>div:hover {
.mes_copy:hover,
.sd_message_gen:hover,
.mes_narrate:hover,
.mes_stop:hover {
opacity: 1; opacity: 1;
} }
.mes_bookmark {
display: none;
}
.mes:not([bookmark_link='']) .mes_bookmark {
display: inline-block;
}
.mes_edit_buttons { .mes_edit_buttons {
display: none; display: none;
flex-direction: row; flex-direction: row;
@ -3611,17 +3611,6 @@ label[for="extensions_autoconnect"] {
opacity: 0.8; opacity: 0.8;
} }
.code-copied {
position: absolute;
z-index: 10000;
font-size: var(--mainFontSize);
color: var(--SmartThemeBodyColor);
background-color: var(--SmartThemeFastUIBGColor);
border-radius: 5px;
padding: 6px;
border: 1px solid var(--grey30a);
}
.inline-drawer-icon { .inline-drawer-icon {
display: block; display: block;
cursor: pointer; cursor: pointer;