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;