diff --git a/public/index.html b/public/index.html
index efbd89d28..0322c9143 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1438,8 +1438,8 @@
-
-
+
+
@@ -1780,7 +1780,7 @@
- Back to main chat
+ Back to parent chat
diff --git a/public/script.js b/public/script.js
index 8c59b6a35..cc4147fab 100644
--- a/public/script.js
+++ b/public/script.js
@@ -2254,7 +2254,8 @@ function resultCheckStatusNovel() {
$("#api_button_novel").css("display", "inline-block");
}
-async function saveChat(chat_name) {
+async function saveChat(chat_name, withMetadata) {
+ const metadata = { ...chat_metadata, ...(withMetadata || {}) };
let file_name = chat_name ?? characters[this_chid].chat;
chat.forEach(function (item, i) {
if (item["is_group"]) {
@@ -2275,7 +2276,7 @@ async function saveChat(chat_name) {
user_name: default_user_name,
character_name: name2,
create_date: chat_create_date,
- chat_metadata: chat_metadata,
+ chat_metadata: metadata,
},
...chat,
];
diff --git a/public/scripts/bookmarks.js b/public/scripts/bookmarks.js
index ea1e2cdf7..c90aa1fc6 100644
--- a/public/scripts/bookmarks.js
+++ b/public/scripts/bookmarks.js
@@ -7,6 +7,8 @@ import {
system_message_types,
this_chid,
openCharacterChat,
+ chat_metadata,
+ callPopup,
} from "../script.js";
import { selected_group } from "./group-chats.js";
@@ -36,27 +38,40 @@ async function getExistingChatNames() {
}
}
-async function getBookmarkName(currentChat) {
+async function getBookmarkName() {
const chatNames = await getExistingChatNames();
- let mainChat = getMainChatName(currentChat);
- let newChat = Date.now();
- let friendlyName = '';
+ const popupText = `Enter the bookmark name:
+ Using existing name will overwrite your bookmark chat.
+
Leave empty to auto-generate.`;
+ let name = await callPopup(popupText, 'input');
- for (let i = 0; i < 1000; i++) {
- friendlyName = `${bookmarkNameToken}${i}`;
- newChat = `${mainChat} ${friendlyName}`;
- if (!chatNames.includes(newChat)) {
- break;
+ if (name === false) {
+ return null;
+ }
+ else if (name === '') {
+ for (let i = 0; i < 1000; i++) {
+ name = bookmarkNameToken + i;
+ if (!chatNames.includes(name)) {
+ break;
+ }
}
}
- return { newChat, friendlyName };
+
+ return name;
}
-function getMainChatName(currentChat) {
- if (currentChat.includes(bookmarkNameToken)) {
- currentChat = currentChat.substring(0, currentChat.lastIndexOf(bookmarkNameToken)).trim();
+function getMainChatName() {
+ if (chat_metadata) {
+ if (chat_metadata['main_chat']) {
+ return chat_metadata['main_chat'];
+ }
+ else if (characters[this_chid].chat && characters[this_chid].chat.includes(bookmarkNameToken)) {
+ const tokenIndex = characters[this_chid].chat.lastIndexOf(bookmarkNameToken);
+ chat_metadata['main_chat'] = characters[this_chid].chat.substring(0, tokenIndex).trim();
+ return chat_metadata['main_chat'];
+ }
}
- return currentChat;
+ return null;
}
function showBookmarksButtons() {
@@ -67,7 +82,7 @@ function showBookmarksButtons() {
$("#option_new_bookmark").hide();
}
// In main chat
- else if (!characters[this_chid].chat.includes(bookmarkNameToken)) {
+ else if (!chat_metadata['main_chat']) {
$("#option_back_to_main").hide();
$("#option_new_bookmark").show();
@@ -91,10 +106,15 @@ $(document).ready(function () {
throw new Error();
}
- let { newChat, friendlyName } = await getBookmarkName(characters[this_chid].chat);
+ let name = await getBookmarkName(characters[this_chid].chat);
- saveChat(newChat);
- let mainMessage = stringFormat(system_messages[system_message_types.BOOKMARK_CREATED].mes, newChat, friendlyName);
+ if (!name) {
+ return;
+ }
+
+ const newMetadata = { main_chat: characters[this_chid].chat };
+ saveChat(name, newMetadata);
+ let mainMessage = stringFormat(system_messages[system_message_types.BOOKMARK_CREATED].mes, name, name);
sendSystemMessage(system_message_types.BOOKMARK_CREATED, mainMessage);
saveChat();
});
diff --git a/public/style.css b/public/style.css
index 374589e9f..2f11a89b5 100644
--- a/public/style.css
+++ b/public/style.css
@@ -367,6 +367,10 @@ code {
column-gap: 10px;
}
+.options-content a div:first-child {
+ min-width: 20px;
+}
+
.options-content img {
width: calc(var(--mainFontSize) + .5rem);
margin-right: 5px;