Alternate Thoughts Display (#2)
This PR adds an optional alternate display mode for RPG Companion thoughts. When enabled, thoughts are shown as compact expandable cards directly below the relevant latest character message. When disabled, RPG Companion keeps its original corner/overlay thought bubbles, so the existing behavior is preserved unless the user explicitly switches modes. The new display mode is built on top of RPG Companion’s existing thoughts system rather than replacing it. Thought UI now updates more reliably across new generations, swipe changes, message deletion, chat reload/re-entry, and live mode toggling, so thoughts stay attached to the correct visible message instead of lingering on stale UI. It also improves restoration of RPG Companion state after reopening a chat, making thoughts and related tracker data more consistent with the current chat view.
This commit is contained in:
@@ -150,7 +150,10 @@ import {
|
||||
onMessageSent,
|
||||
onMessageReceived,
|
||||
onCharacterChanged,
|
||||
onChatLoaded,
|
||||
onMessageDeleted,
|
||||
onMessageSwiped,
|
||||
scheduleChatStateRehydration,
|
||||
updatePersonaAvatar,
|
||||
clearExtensionPrompts,
|
||||
onGenerationEnded,
|
||||
@@ -229,6 +232,7 @@ async function addExtensionSettings() {
|
||||
// Enabling extension - initialize UI
|
||||
await initUI();
|
||||
loadChatData(); // Load chat data for current chat
|
||||
scheduleChatStateRehydration();
|
||||
updateChatThoughts(); // Create thought bubbles if data exists
|
||||
injectCheckpointButton(); // Re-add checkpoint buttons
|
||||
updateAllCheckpointIndicators(); // Update button states
|
||||
@@ -367,6 +371,12 @@ async function initUI() {
|
||||
updateChatThoughts();
|
||||
});
|
||||
|
||||
$('#rpg-toggle-inline-thoughts').on('change', function() {
|
||||
extensionSettings.thoughtsInChatStyle = $(this).prop('checked') ? 'inline' : 'corner';
|
||||
saveSettings();
|
||||
updateChatThoughts();
|
||||
});
|
||||
|
||||
$('#rpg-toggle-html-prompt').on('change', function() {
|
||||
extensionSettings.enableHtmlPrompt = $(this).prop('checked');
|
||||
// console.log('[RPG Companion] Toggle enableHtmlPrompt changed to:', extensionSettings.enableHtmlPrompt);
|
||||
@@ -1047,6 +1057,7 @@ async function initUI() {
|
||||
$('#rpg-toggle-quests').prop('checked', extensionSettings.showQuests);
|
||||
$('#rpg-toggle-lock-icons').prop('checked', extensionSettings.showLockIcons ?? true);
|
||||
$('#rpg-toggle-thoughts-in-chat').prop('checked', extensionSettings.showThoughtsInChat);
|
||||
$('#rpg-toggle-inline-thoughts').prop('checked', (extensionSettings.thoughtsInChatStyle || 'corner') === 'inline');
|
||||
$('#rpg-toggle-html-prompt').prop('checked', extensionSettings.enableHtmlPrompt);
|
||||
$('#rpg-toggle-dialogue-coloring').prop('checked', extensionSettings.enableDialogueColoring);
|
||||
$('#rpg-toggle-deception').prop('checked', extensionSettings.enableDeceptionSystem ?? false);
|
||||
@@ -1283,6 +1294,7 @@ jQuery(async () => {
|
||||
// Load chat-specific data for current chat
|
||||
try {
|
||||
loadChatData();
|
||||
scheduleChatStateRehydration();
|
||||
// Initialize FAB widgets and strip widgets with any loaded data
|
||||
updateFabWidgets();
|
||||
updateStripWidgets();
|
||||
@@ -1353,6 +1365,9 @@ jQuery(async () => {
|
||||
[event_types.GENERATION_STOPPED]: onGenerationEnded,
|
||||
[event_types.GENERATION_ENDED]: onGenerationEnded,
|
||||
[event_types.CHAT_CHANGED]: [onCharacterChanged, updatePersonaAvatar, restoreCheckpointOnLoad, clearSessionAvatarPrompts],
|
||||
[event_types.CHAT_LOADED]: onChatLoaded,
|
||||
[event_types.MESSAGE_DELETED]: onMessageDeleted,
|
||||
[event_types.MESSAGE_SWIPE_DELETED]: onMessageDeleted,
|
||||
[event_types.MESSAGE_SWIPED]: onMessageSwiped,
|
||||
[event_types.USER_MESSAGE_RENDERED]: updatePersonaAvatar,
|
||||
[event_types.SETTINGS_UPDATED]: updatePersonaAvatar
|
||||
|
||||
Reference in New Issue
Block a user