mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Add autocomplete for WI inclusion groups
This commit is contained in:
@ -1286,6 +1286,7 @@ function getWorldEntry(name, data, entry) {
|
|||||||
saveWorldInfo(name, data);
|
saveWorldInfo(name, data);
|
||||||
});
|
});
|
||||||
groupInput.val(entry.group ?? '').trigger('input');
|
groupInput.val(entry.group ?? '').trigger('input');
|
||||||
|
setTimeout(() => createInclusionGroupAutocomplete(groupInput, data), 1);
|
||||||
|
|
||||||
// probability
|
// probability
|
||||||
if (entry.probability === undefined) {
|
if (entry.probability === undefined) {
|
||||||
@ -1615,6 +1616,46 @@ function getWorldEntry(name, data, entry) {
|
|||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an autocomplete for the inclusion group.
|
||||||
|
* @param {JQuery<HTMLElement>} input Input element to attach the autocomplete to
|
||||||
|
* @param {any} data WI data
|
||||||
|
*/
|
||||||
|
function createInclusionGroupAutocomplete(input, data) {
|
||||||
|
function getGroups(input, output) {
|
||||||
|
const groups = new Set();
|
||||||
|
for (const entry of Object.values(data.entries)) {
|
||||||
|
if (entry.group) {
|
||||||
|
groups.add(String(entry.group));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const haystack = Array.from(groups);
|
||||||
|
haystack.sort((a, b) => a.localeCompare(b));
|
||||||
|
const needle = input.term.toLowerCase();
|
||||||
|
const hasExactMatch = haystack.findIndex(x => x.toLowerCase() == needle) !== -1;
|
||||||
|
const result = haystack.filter(x => x.toLowerCase().includes(needle));
|
||||||
|
|
||||||
|
if (input.term && !hasExactMatch) {
|
||||||
|
result.unshift(input.term);
|
||||||
|
}
|
||||||
|
|
||||||
|
output(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(input).autocomplete({
|
||||||
|
minLength: 0,
|
||||||
|
source: getGroups,
|
||||||
|
select: function (event, ui) {
|
||||||
|
$(input).val(ui.item.value).trigger('input').trigger('blur');
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
$(input).on('focus', function () {
|
||||||
|
$(input).autocomplete('search', String($(input).val()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async function deleteWorldInfoEntry(data, uid) {
|
async function deleteWorldInfoEntry(data, uid) {
|
||||||
if (!data || !('entries' in data)) {
|
if (!data || !('entries' in data)) {
|
||||||
return;
|
return;
|
||||||
@ -2843,4 +2884,14 @@ jQuery(() => {
|
|||||||
closeOnSelect: false,
|
closeOnSelect: false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$('#WorldInfo').on('scroll', () => {
|
||||||
|
$('.world_entry input[name="group"]').each((_, el) => {
|
||||||
|
const instance = $(el).autocomplete('instance');
|
||||||
|
|
||||||
|
if (instance !== undefined) {
|
||||||
|
$(el).autocomplete('close');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user