Refactor: move showCharConnections

bb03c60c3935b18b7b57a5b5cb71d669078325e3

Wolfsblvt <wolfsblvt@gmail.com>

2 files changed, +54 -46Ignore whitespace
public/script.js+0 -46
@@ -236,9 +236,6 @@ import {
236236 setPersonaDescription,
237237 initUserAvatar,
238238 updatePersonaConnectionsAvatarList,
239- getConnectedPersonas,
240- askForPersonaSelection,
241- getCurrentConnectionObj,
242239 isPersonaPanelOpen,
243240} from './scripts/personas.js';
244241import { getBackgrounds, initBackgrounds, loadBackgroundSettings, background_settings } from './scripts/backgrounds.js';
@@ -10130,49 +10127,6 @@ jQuery(async function () {
1013010127 }
1013110128 });
1013210129
10133- $('#char_connections_button').on('click', async () => {
10134- let isRemoving = false;
10135-
10136- const connections = getConnectedPersonas();
10137- const message = t`The following personas are connected to the current character.\n\nClick on a persona to select it for the current character.\nShift + Click to unlink the persona from the character.`;
10138- const selectedPersona = await askForPersonaSelection(t`Persona Connections`, message, connections, {
10139- okButton: t`Ok`,
10140- highlightPersonas: true,
10141- targetedChar: getCurrentConnectionObj(),
10142- shiftClickHandler: (element, ev) => {
10143-
10144- const personaId = $(element).attr('data-pid');
10145-
10146- /** @type {import('./scripts/personas.js').PersonaConnection[]} */
10147- const connections = power_user.persona_descriptions[personaId]?.connections;
10148- if (connections) {
10149- console.log(`Unlocking persona ${personaId} from current character ${name2}`);
10150- power_user.persona_descriptions[personaId].connections = connections.filter(c => {
10151- if (menu_type == 'group_edit' && c.type == 'group' && c.id == selected_group) return false;
10152- else if (c.type == 'character' && c.id == characters[this_chid]?.avatar) return false;
10153- return true;
10154- });
10155- saveSettingsDebounced();
10156- updatePersonaConnectionsAvatarList();
10157- if (power_user.persona_show_notifications) {
10158- toastr.info(t`User persona ${power_user.personas[personaId]} is now unlocked from the current character ${name2}.`, t`Persona unlocked`);
10159- }
10160-
10161- isRemoving = true;
10162- $('#char_connections_button').trigger('click');
10163- }
10164- },
10165- });
10166-
10167- // One of the persona was selected. So load it.
10168- if (!isRemoving && selectedPersona) {
10169- setUserAvatar(selectedPersona, { toastPersonaNameChange: false });
10170- if (power_user.persona_show_notifications) {
10171- toastr.success(t`Selected persona ${power_user.personas[selectedPersona]} for current chat.`, t`Connected Persona Selected`);
10172- }
10173- }
10174- });
10175-
1017610130 $('#character_cross').click(function () {
1017710131 is_advanced_char_open = false;
1017810132 $('#character_popup').transition({
public/scripts/personas.js+54 -0
@@ -10,6 +10,7 @@ import {
1010 getRequestHeaders,
1111 getThumbnailUrl,
1212 groupToEntity,
13+ menu_type,
1314 name1,
1415 name2,
1516 reloadCurrentChat,
@@ -1363,6 +1364,55 @@ export function getConnectedPersonas(characterKey = undefined) {
13631364 return connectedPersonas;
13641365}
13651366
1367+
1368+/**
1369+ * Shows a popup with all personas connected to the currently selected character or group.
1370+ * In the popup, the user can select a persona to load for the current character or group, or shift-click to remove the connection.
1371+ * @return {Promise<void>}
1372+ */
1373+export async function showCharConnections() {
1374+ let isRemoving = false;
1375+
1376+ const connections = getConnectedPersonas();
1377+ const message = t`The following personas are connected to the current character.\n\nClick on a persona to select it for the current character.\nShift + Click to unlink the persona from the character.`;
1378+ const selectedPersona = await askForPersonaSelection(t`Persona Connections`, message, connections, {
1379+ okButton: t`Ok`,
1380+ highlightPersonas: true,
1381+ targetedChar: getCurrentConnectionObj(),
1382+ shiftClickHandler: (element, ev) => {
1383+
1384+ const personaId = $(element).attr('data-pid');
1385+
1386+ /** @type {PersonaConnection[]} */
1387+ const connections = power_user.persona_descriptions[personaId]?.connections;
1388+ if (connections) {
1389+ console.log(`Unlocking persona ${personaId} from current character ${name2}`);
1390+ power_user.persona_descriptions[personaId].connections = connections.filter(c => {
1391+ if (menu_type == 'group_edit' && c.type == 'group' && c.id == selected_group) return false;
1392+ else if (c.type == 'character' && c.id == characters[this_chid]?.avatar) return false;
1393+ return true;
1394+ });
1395+ saveSettingsDebounced();
1396+ updatePersonaConnectionsAvatarList();
1397+ if (power_user.persona_show_notifications) {
1398+ toastr.info(t`User persona ${power_user.personas[personaId]} is now unlocked from the current character ${name2}.`, t`Persona unlocked`);
1399+ }
1400+
1401+ isRemoving = true;
1402+ $('#char_connections_button').trigger('click');
1403+ }
1404+ },
1405+ });
1406+
1407+ // One of the persona was selected. So load it.
1408+ if (!isRemoving && selectedPersona) {
1409+ setUserAvatar(selectedPersona, { toastPersonaNameChange: false });
1410+ if (power_user.persona_show_notifications) {
1411+ toastr.success(t`Selected persona ${power_user.personas[selectedPersona]} for current chat.`, t`Connected Persona Selected`);
1412+ }
1413+ }
1414+}
1415+
13661416/**
13671417 * Retrieves the current connection object based on whether the current chat is with a char or a group.
13681418 *
@@ -1542,6 +1592,7 @@ function migrateNonPersonaUser() {
15421592 saveSettingsDebounced();
15431593}
15441594
1595+
15451596export function initPersonas() {
15461597 migrateNonPersonaUser();
15471598 $('#persona_delete_button').on('click', deleteUserAvatar);
@@ -1609,6 +1660,8 @@ export function initPersonas() {
16091660 $('#avatar_upload_file').trigger('click');
16101661 });
16111662
1663+ $('#char_connections_button').on('click', showCharConnections);
1664+
16121665 eventSource.on('charManagementDropdown', (target) => {
16131666 if (target === 'convert_to_persona') {
16141667 convertCharacterToPersona();
@@ -1617,3 +1670,4 @@ export function initPersonas() {
16171670 eventSource.on(event_types.CHAT_CHANGED, loadPersonaForCurrentChat);
16181671 switchPersonaGridView();
16191672}
1673+