diff --git a/public/scripts/extensions/connection-manager/index.js b/public/scripts/extensions/connection-manager/index.js index 483a9d97d..3b356f2f7 100644 --- a/public/scripts/extensions/connection-manager/index.js +++ b/public/scripts/extensions/connection-manager/index.js @@ -7,7 +7,7 @@ import { ARGUMENT_TYPE, SlashCommandArgument } from '../../slash-commands/SlashC import { enumIcons } from '../../slash-commands/SlashCommandCommonEnumsProvider.js'; import { enumTypes, SlashCommandEnumValue } from '../../slash-commands/SlashCommandEnumValue.js'; import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js'; -import { uuidv4 } from '../../utils.js'; +import { collapseSpaces, getUniqueName, uuidv4 } from '../../utils.js'; const MODULE_NAME = 'connection-manager'; const NONE = ''; @@ -71,8 +71,6 @@ const profilesProvider = () => [ */ const escapeArgument = (a) => a.replace(/"/g, '\\"').replace(/\|/g, '\\|'); -const collapseSpaces = (s) => s.replace(/\s+/g, ' ').trim(); -const makeUnique = (s, f, i) => { if (!f(s)) { return s; } else { while (f(`${s} (${i})`)) { i++; } return `${s} (${i})`; } }; /** * Finds the best match for the search value. @@ -150,7 +148,7 @@ async function createConnectionProfile(forceName = null) { const profileForDisplay = makeFancyProfile(profile); const template = await renderExtensionTemplateAsync(MODULE_NAME, 'profile', { profile: profileForDisplay }); const checkName = (n) => extension_settings.connectionManager.profiles.some(p => p.name === n); - const suggestedName = makeUnique(collapseSpaces(`${profile.api ?? ''} ${profile.model ?? ''} - ${profile.preset ?? ''}`), checkName, 1); + const suggestedName = getUniqueName(collapseSpaces(`${profile.api ?? ''} ${profile.model ?? ''} - ${profile.preset ?? ''}`), checkName); const name = forceName ?? await callGenericPopup(template, POPUP_TYPE.INPUT, suggestedName, { rows: 2 }); if (!name) { diff --git a/public/scripts/utils.js b/public/scripts/utils.js index 7e4deed0f..b63721c16 100644 --- a/public/scripts/utils.js +++ b/public/scripts/utils.js @@ -1436,6 +1436,15 @@ export function uuidv4() { }); } +/** + * Collapses multiple spaces in a strings into one. + * @param {string} s String to process + * @returns {string} String with collapsed spaces + */ +export function collapseSpaces(s) { + return s.replace(/\s+/g, ' ').trim(); +} + function postProcessText(text, collapse = true) { // Remove carriage returns text = text.replace(/\r/g, ''); @@ -2041,7 +2050,7 @@ export async function fetchFaFile(name) { style.remove(); return [...sheet.cssRules] .filter(rule => rule.style?.content) - .map(rule => rule.selectorText.split(/,\s*/).map(selector=>selector.split('::').shift().slice(1))) + .map(rule => rule.selectorText.split(/,\s*/).map(selector => selector.split('::').shift().slice(1))) ; } export async function fetchFa() { @@ -2068,7 +2077,7 @@ export async function showFontAwesomePicker(customList = null) { qry.placeholder = 'Filter icons'; qry.autofocus = true; const qryDebounced = debounce(() => { - const result = faList.filter(fa => fa.find(className=>className.includes(qry.value.toLowerCase()))); + const result = faList.filter(fa => fa.find(className => className.includes(qry.value.toLowerCase()))); for (const fa of faList) { if (!result.includes(fa)) { fas[fa].classList.add('hidden'); @@ -2090,7 +2099,7 @@ export async function showFontAwesomePicker(customList = null) { opt.classList.add('menu_button'); opt.classList.add('fa-solid'); opt.classList.add(fa[0]); - opt.title = fa.map(it=>it.slice(3)).join(', '); + opt.title = fa.map(it => it.slice(3)).join(', '); opt.dataset.result = POPUP_RESULT.AFFIRMATIVE.toString(); opt.addEventListener('click', () => value = fa[0]); grid.append(opt);