diff --git a/public/index.html b/public/index.html index bdf12f7b8..2992b4e97 100644 --- a/public/index.html +++ b/public/index.html @@ -4904,7 +4904,7 @@
-
+
@@ -4920,7 +4920,7 @@
-
+
@@ -4952,7 +4952,7 @@
-
+
diff --git a/public/script.js b/public/script.js index eea7430c1..fc9c94334 100644 --- a/public/script.js +++ b/public/script.js @@ -466,6 +466,10 @@ let rawPromptPopper = Popper.createPopper(document.getElementById('dialogue_popu placement: 'right', }); +// Saved here for performance reasons +const messageTemplate = $('#message_template .mes'); +const chatElement = $('#chat'); + let dialogueResolve = null; let dialogueCloseStop = false; let chat_metadata = {}; @@ -1524,7 +1528,7 @@ async function printMessages() { for (let i = startIndex; i < chat.length; i++) { const item = chat[i]; - addOneMessage(item, { scroll: i === chat.length - 1, forceId: i }); + addOneMessage(item, { scroll: i === chat.length - 1, forceId: i, showSwipes: false }); } // Scroll to bottom when all images are loaded @@ -1542,6 +1546,11 @@ async function printMessages() { } } + $('#chat .mes').removeClass('last_mes'); + $('#chat .mes').last().addClass('last_mes'); + hideSwipeButtons(); + showSwipeButtons(); + function incrementAndCheck() { imagesLoaded++; if (imagesLoaded === images.length) { @@ -1822,7 +1831,7 @@ function getMessageFromTemplate({ tokenCount, extra, } = {}) { - const mes = $('#message_template .mes').clone(); + const mes = messageTemplate.clone(); mes.attr({ 'mesid': mesId, 'ch_name': characterName, @@ -1916,8 +1925,8 @@ export function addCopyToCodeBlocks(messageElement) { } -function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true, insertBefore = null, forceId = null } = {}) { - var messageText = mes['mes']; +function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true, insertBefore = null, forceId = null, showSwipes = true } = {}) { + let messageText = mes['mes']; const momentDate = timestampToMoment(mes.send_date); const timestamp = momentDate.isValid() ? momentDate.format('LL LT') : ''; @@ -1932,7 +1941,7 @@ function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true mes.swipes = [mes.mes]; } - var avatarImg = getUserAvatar(user_avatar); + let avatarImg = getUserAvatar(user_avatar); const isSystem = mes.is_system; const title = mes.title; generatedPromptCache = ''; @@ -1968,17 +1977,7 @@ function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true ); const bias = messageFormatting(mes.extra?.bias ?? '', '', false, false, -1); let bookmarkLink = mes?.extra?.bookmark_link ?? ''; - // Verify bookmarked chat still exists - // Cohee: Commented out for now. I'm worried of performance issues. - /*if (bookmarkLink !== '') { - let chat_names = selected_group - ? getGroupChatNames(selected_group) - : Object.values(getPastCharacterChats()).map(({ file_name }) => file_name); - if (!chat_names.includes(bookmarkLink)) { - bookmarkLink = '' - } - }*/ let params = { mesId: forceId ?? chat.length - 1, characterName: mes.name, @@ -1995,22 +1994,18 @@ function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true ...formatGenerationTimer(mes.gen_started, mes.gen_finished, mes.extra?.token_count), }; - const HTMLForEachMes = getMessageFromTemplate(params); + const renderedMessage = getMessageFromTemplate(params); if (type !== 'swipe') { if (!insertAfter && !insertBefore) { - $('#chat').append(HTMLForEachMes); + chatElement.append(renderedMessage); } else if (insertAfter) { - const target = $('#chat').find(`.mes[mesid="${insertAfter}"]`); - $(HTMLForEachMes).insertAfter(target); - $(HTMLForEachMes).find('.swipe_left').css('display', 'none'); - $(HTMLForEachMes).find('.swipe_right').css('display', 'none'); + const target = chatElement.find(`.mes[mesid="${insertAfter}"]`); + $(renderedMessage).insertAfter(target); } else { - const target = $('#chat').find(`.mes[mesid="${insertBefore}"]`); - $(HTMLForEachMes).insertBefore(target); - $(HTMLForEachMes).find('.swipe_left').css('display', 'none'); - $(HTMLForEachMes).find('.swipe_right').css('display', 'none'); + const target = chatElement.find(`.mes[mesid="${insertBefore}"]`); + $(renderedMessage).insertBefore(target); } } @@ -2021,49 +2016,19 @@ function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true const isSmallSys = mes?.extra?.isSmallSys; newMessage.data('isSystem', isSystem); - if (isSystem) { - // newMessage.find(".mes_edit").hide(); - newMessage.find('.mes_prompt').hide(); //don't need prompt button for sys - } - if (isSmallSys === true) { newMessage.addClass('smallSysMes'); } - // don't need prompt button for user - if (params.isUser === true) { - newMessage.find('.mes_prompt').hide(); - //console.log(`hiding prompt for user mesID ${params.mesId}`); - } - //shows or hides the Prompt display button let mesIdToFind = type == 'swipe' ? params.mesId - 1 : params.mesId; //Number(newMessage.attr('mesId')); //if we have itemized messages, and the array isn't null.. - if (params.isUser === false && itemizedPrompts.length !== 0 && itemizedPrompts.length !== null) { - // console.log('looking through itemized prompts...'); - //console.log(`mesIdToFind = ${mesIdToFind} from ${params.avatarImg}`); - //console.log(`itemizedPrompts.length = ${itemizedPrompts.length}`) - //console.log(itemizedPrompts); - - for (var i = 0; i < itemizedPrompts.length; i++) { - //console.log(`itemized array item ${i} is MesID ${Number(itemizedPrompts[i].mesId)}, does it match ${Number(mesIdToFind)}?`); - if (Number(itemizedPrompts[i].mesId) === Number(mesIdToFind)) { - newMessage.find('.mes_prompt').show(); - //console.log(`showing button for mesID ${params.mesId} from ${params.characterName}`); - break; - - } /*else { - console.log(`no cache obj for mesID ${mesIdToFind}, hiding this prompt button`); - newMessage.find(".mes_prompt").hide(); - console.log(itemizedPrompts); - } */ + if (params.isUser === false && Array.isArray(itemizedPrompts) && itemizedPrompts.length > 0) { + const itemizedPrompt = itemizedPrompts.find(x => Number(x.mesId) === Number(mesIdToFind)); + if (itemizedPrompt) { + newMessage.find('.mes_prompt').show(); } - } else { - //console.log('itemizedprompt array empty null, or user, hiding this prompt buttons'); - //$(".mes_prompt").hide(); - newMessage.find('.mes_prompt').hide(); - //console.log(itemizedPrompts); } newMessage.find('.avatar img').on('error', function () { @@ -2072,38 +2037,36 @@ function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true }); if (type === 'swipe') { - const swipeMessage = $('#chat').find(`[mesid="${chat.length - 1}"]`); - swipeMessage.find('.mes_text').html(''); - swipeMessage.find('.mes_text').append(messageText); - appendMediaToMessage(mes, swipeMessage); - swipeMessage.attr('title', title); + const swipeMessage = chatElement.find(`[mesid="${chat.length - 1}"]`); + swipeMessage.find('.mes_text').html(messageText).attr('title', title); swipeMessage.find('.timestamp').text(timestamp).attr('title', `${params.extra.api} - ${params.extra.model}`); + appendMediaToMessage(mes, swipeMessage); if (power_user.timestamp_model_icon && params.extra?.api) { insertSVGIcon(swipeMessage, params.extra); } if (mes.swipe_id == mes.swipes.length - 1) { - swipeMessage.find('.mes_timer').text(params.timerValue); - swipeMessage.find('.mes_timer').attr('title', params.timerTitle); + swipeMessage.find('.mes_timer').text(params.timerValue).attr('title', params.timerTitle); swipeMessage.find('.tokenCounterDisplay').text(`${params.tokenCount}t`); } else { - swipeMessage.find('.mes_timer').html(''); - swipeMessage.find('.tokenCounterDisplay').html(''); + swipeMessage.find('.mes_timer').empty(); + swipeMessage.find('.tokenCounterDisplay').empty(); } } else { const messageId = forceId ?? chat.length - 1; - $('#chat').find(`[mesid="${messageId}"]`).find('.mes_text').append(messageText); + chatElement.find(`[mesid="${messageId}"] .mes_text`).append(messageText); appendMediaToMessage(mes, newMessage); - hideSwipeButtons(); + showSwipes && hideSwipeButtons(); } addCopyToCodeBlocks(newMessage); - $('#chat .mes').last().addClass('last_mes'); - $('#chat .mes').eq(-2).removeClass('last_mes'); - - hideSwipeButtons(); - showSwipeButtons(); + if (showSwipes) { + $('#chat .mes').last().addClass('last_mes'); + $('#chat .mes').eq(-2).removeClass('last_mes'); + hideSwipeButtons(); + showSwipeButtons(); + } // Don't scroll if not inserting last if (!insertAfter && !insertBefore && scroll) { @@ -2177,7 +2140,6 @@ function formatGenerationTimer(gen_started, gen_finished, tokenCount) { function scrollChatToBottom() { if (power_user.auto_scroll_chat_to_bottom) { - const chatElement = $('#chat'); let position = chatElement[0].scrollHeight; if (power_user.waifuMode) {