Explicitly use async for saveWorldInfo

4acf68cc30f60da7c1281fa12ba826bab11871d1

Wolfsblvt <wolfsblvt@gmail.com>

1 files changed, +70 -69Ignore whitespace
public/scripts/world-info.js+70 -69
@@ -1848,7 +1848,7 @@ function displayWorldEntries(name, data, navigation = navigation_option.none, fl
18481848 nextText: '>',
18491849 formatNavigator: PAGINATION_TEMPLATE,
18501850 showNavigator: true,
18511851 callback: async function (/** @type {object[]} */ page) {
18521852 // We save costly performance by removing all events before emptying. Because we know there are no relevant event handlers reacting on removing elements
18531853 // This prevents jQuery from actually going through all registered events on the controls for each entry when removing it
18541854 worldEntriesList.find('*').off();
@@ -1875,7 +1875,8 @@ function displayWorldEntries(name, data, navigation = navigation_option.none, fl
18751875 Trigger %
18761876 </small>
18771877 </div>`;
18781878 const blocksmappedEntryBlocksPromises = page.map(async entry => await getWorldEntry(name, data, entry)).filter(x => x);
1879+ const blocks = await Promise.all(mappedEntryBlocksPromises);
18791880 const isCustomOrder = $('#world_info_sort_order').find(':selected').data('rule') === 'custom';
18801881 if (!isCustomOrder) {
18811882 blocks.forEach(block => {
@@ -2215,7 +2216,7 @@ function parseRegexFromString(input) {
22152216 }
22162217}
22172218
22182219async function getWorldEntry(name, data, entry) {
22192220 if (!data.entries[entry.uid]) {
22202221 return;
22212222 }
@@ -2266,7 +2267,7 @@ function getWorldEntry(name, data, entry) {
22662267 templateResult: item => templateStyling(item, { searchStyle: true }),
22672268 templateSelection: item => templateStyling(item),
22682269 });
22692270 input.on('change', async function (_, { skipReset, noSave } = {}) {
22702271 const uid = $(this).data('uid');
22712272 /** @type {string[]} */
22722273 const keys = ($(this).select2('data')).map(x => x.text);
@@ -2275,7 +2276,7 @@ function getWorldEntry(name, data, entry) {
22752276 if (!noSave) {
22762277 data.entries[uid][entryPropName] = keys;
22772278 setOriginalDataValue(data, uid, originalDataValueName, data.entries[uid][entryPropName]);
22782279 await saveWorldInfo(name, data);
22792280 }
22802281 });
22812282 input.on('select2:select', /** @type {function(*):void} */ event => updateWorldEntryKeyOptionsCache([event.params.data]));
@@ -2306,14 +2307,14 @@ function getWorldEntry(name, data, entry) {
23062307 template.find(`select[name="${entryPropName}"]`).hide();
23072308 input.show();
23082309
23092310 input.on('input', async function (_, { skipReset, noSave } = {}) {
23102311 const uid = $(this).data('uid');
23112312 const value = String($(this).val());
23122313 !skipReset && resetScrollHeight(this);
23132314 if (!noSave) {
23142315 data.entries[uid][entryPropName] = splitKeywordsAndRegexes(value);
23152316 setOriginalDataValue(data, uid, originalDataValueName, data.entries[uid][entryPropName]);
23162317 await saveWorldInfo(name, data);
23172318 }
23182319 });
23192320 input.val(entry[entryPropName].join(', ')).trigger('input', { skipReset: true });
@@ -2352,12 +2353,12 @@ function getWorldEntry(name, data, entry) {
23522353 event.stopPropagation();
23532354 });
23542355
23552356 selectiveLogicDropdown.on('input', async function () {
23562357 const uid = $(this).data('uid');
23572358 const value = Number($(this).val());
23582359 data.entries[uid].selectiveLogic = !isNaN(value) ? value : world_info_logic.AND_ANY;
23592360 setOriginalDataValue(data, uid, 'selectiveLogic', data.entries[uid].selectiveLogic);
23602361 await saveWorldInfo(name, data);
23612362 });
23622363
23632364 template
@@ -2372,7 +2373,7 @@ function getWorldEntry(name, data, entry) {
23722373 // exclude characters checkbox
23732374 const characterExclusionInput = template.find('input[name="character_exclusion"]');
23742375 characterExclusionInput.data('uid', entry.uid);
23752376 characterExclusionInput.on('input', async function () {
23762377 const uid = $(this).data('uid');
23772378 const value = $(this).prop('checked');
23782379 characterFilterLabel.text(value ? 'Exclude Character(s)' : 'Filter to Character(s)');
@@ -2406,7 +2407,7 @@ function getWorldEntry(name, data, entry) {
24062407 }
24072408
24082409 setOriginalDataValue(data, uid, 'character_filter', data.entries[uid].characterFilter);
24092410 await saveWorldInfo(name, data);
24102411 });
24112412 characterExclusionInput.prop('checked', entry.characterFilter?.isExclude ?? false).trigger('input');
24122413
@@ -2468,24 +2469,24 @@ function getWorldEntry(name, data, entry) {
24682469 );
24692470 }
24702471 setOriginalDataValue(data, uid, 'character_filter', data.entries[uid].characterFilter);
24712472 await saveWorldInfo(name, data);
24722473 });
24732474
24742475 // comment
24752476 const commentInput = template.find('textarea[name="comment"]');
24762477 const commentToggle = template.find('input[name="addMemo"]');
24772478 commentInput.data('uid', entry.uid);
24782479 commentInput.on('input', async function (_, { skipReset } = {}) {
24792480 const uid = $(this).data('uid');
24802481 const value = $(this).val();
24812482 !skipReset && resetScrollHeight(this);
24822483 data.entries[uid].comment = value;
24832484
24842485 setOriginalDataValue(data, uid, 'comment', data.entries[uid].comment);
24852486 await saveWorldInfo(name, data);
24862487 });
24872488 commentToggle.data('uid', entry.uid);
24882489 commentToggle.on('input', async function () {
24892490 const uid = $(this).data('uid');
24902491 const value = $(this).prop('checked');
24912492 //console.log(value)
@@ -2493,7 +2494,7 @@ function getWorldEntry(name, data, entry) {
24932494 .closest('.world_entry')
24942495 .find('.commentContainer');
24952496 data.entries[uid].addMemo = value;
24962497 await saveWorldInfo(name, data);
24972498 value ? commentContainer.show() : commentContainer.hide();
24982499 });
24992500
@@ -2511,13 +2512,13 @@ function getWorldEntry(name, data, entry) {
25112512
25122513 const contentInput = template.find('textarea[name="content"]');
25132514 contentInput.data('uid', entry.uid);
25142515 contentInput.on('input', async function (_, { skipCount } = {}) {
25152516 const uid = $(this).data('uid');
25162517 const value = $(this).val();
25172518 data.entries[uid].content = value;
25182519
25192520 setOriginalDataValue(data, uid, 'content', data.entries[uid].content);
25202521 await saveWorldInfo(name, data);
25212522
25222523 if (skipCount) {
25232524 return;
@@ -2541,13 +2542,13 @@ function getWorldEntry(name, data, entry) {
25412542 // selective
25422543 const selectiveInput = template.find('input[name="selective"]');
25432544 selectiveInput.data('uid', entry.uid);
25442545 selectiveInput.on('input', async function () {
25452546 const uid = $(this).data('uid');
25462547 const value = $(this).prop('checked');
25472548 data.entries[uid].selective = value;
25482549
25492550 setOriginalDataValue(data, uid, 'selective', data.entries[uid].selective);
25502551 await saveWorldInfo(name, data);
25512552
25522553 const keysecondary = $(this)
25532554 .closest('.world_entry')
@@ -2576,12 +2577,12 @@ function getWorldEntry(name, data, entry) {
25762577 /*
25772578 const constantInput = template.find('input[name="constant"]');
25782579 constantInput.data("uid", entry.uid);
25792580 constantInput.on("input", async function () {
25802581 const uid = $(this).data("uid");
25812582 const value = $(this).prop("checked");
25822583 data.entries[uid].constant = value;
25832584 setOriginalDataValue(data, uid, "constant", data.entries[uid].constant);
25842585 await saveWorldInfo(name, data);
25852586 });
25862587 constantInput.prop("checked", entry.constant).trigger("input");
25872588 */
@@ -2589,14 +2590,14 @@ function getWorldEntry(name, data, entry) {
25892590 // order
25902591 const orderInput = template.find('input[name="order"]');
25912592 orderInput.data('uid', entry.uid);
25922593 orderInput.on('input', async function () {
25932594 const uid = $(this).data('uid');
25942595 const value = Number($(this).val());
25952596
25962597 data.entries[uid].order = !isNaN(value) ? value : 0;
25972598 updatePosOrdDisplay(uid);
25982599 setOriginalDataValue(data, uid, 'insertion_order', data.entries[uid].order);
25992600 await saveWorldInfo(name, data);
26002601 });
26012602 orderInput.val(entry.order).trigger('input');
26022603 orderInput.css('width', 'calc(3em + 15px)');
@@ -2604,13 +2605,13 @@ function getWorldEntry(name, data, entry) {
26042605 // group
26052606 const groupInput = template.find('input[name="group"]');
26062607 groupInput.data('uid', entry.uid);
26072608 groupInput.on('input', async function () {
26082609 const uid = $(this).data('uid');
26092610 const value = String($(this).val()).trim();
26102611
26112612 data.entries[uid].group = value;
26122613 setOriginalDataValue(data, uid, 'extensions.group', data.entries[uid].group);
26132614 await saveWorldInfo(name, data);
26142615 });
26152616 groupInput.val(entry.group ?? '').trigger('input');
26162617 setTimeout(() => createEntryInputAutocomplete(groupInput, getInclusionGroupCallback(data), { allowMultiple: true }), 1);
@@ -2618,19 +2619,19 @@ function getWorldEntry(name, data, entry) {
26182619 // inclusion priority
26192620 const groupOverrideInput = template.find('input[name="groupOverride"]');
26202621 groupOverrideInput.data('uid', entry.uid);
26212622 groupOverrideInput.on('input', async function () {
26222623 const uid = $(this).data('uid');
26232624 const value = $(this).prop('checked');
26242625 data.entries[uid].groupOverride = value;
26252626 setOriginalDataValue(data, uid, 'extensions.group_override', data.entries[uid].groupOverride);
26262627 await saveWorldInfo(name, data);
26272628 });
26282629 groupOverrideInput.prop('checked', entry.groupOverride).trigger('input');
26292630
26302631 // group weight
26312632 const groupWeightInput = template.find('input[name="groupWeight"]');
26322633 groupWeightInput.data('uid', entry.uid);
26332634 groupWeightInput.on('input', async function () {
26342635 const uid = $(this).data('uid');
26352636 let value = Number($(this).val());
26362637 const min = Number($(this).attr('min'));
@@ -2647,46 +2648,46 @@ function getWorldEntry(name, data, entry) {
26472648
26482649 data.entries[uid].groupWeight = !isNaN(value) ? Math.abs(value) : 1;
26492650 setOriginalDataValue(data, uid, 'extensions.group_weight', data.entries[uid].groupWeight);
26502651 await saveWorldInfo(name, data);
26512652 });
26522653 groupWeightInput.val(entry.groupWeight ?? DEFAULT_WEIGHT).trigger('input');
26532654
26542655 // sticky
26552656 const sticky = template.find('input[name="sticky"]');
26562657 sticky.data('uid', entry.uid);
26572658 sticky.on('input', async function () {
26582659 const uid = $(this).data('uid');
26592660 const value = Number($(this).val());
26602661 data.entries[uid].sticky = !isNaN(value) ? value : null;
26612662
26622663 setOriginalDataValue(data, uid, 'extensions.sticky', data.entries[uid].sticky);
26632664 await saveWorldInfo(name, data);
26642665 });
26652666 sticky.val(entry.sticky > 0 ? entry.sticky : '').trigger('input');
26662667
26672668 // cooldown
26682669 const cooldown = template.find('input[name="cooldown"]');
26692670 cooldown.data('uid', entry.uid);
26702671 cooldown.on('input', async function () {
26712672 const uid = $(this).data('uid');
26722673 const value = Number($(this).val());
26732674 data.entries[uid].cooldown = !isNaN(value) ? value : null;
26742675
26752676 setOriginalDataValue(data, uid, 'extensions.cooldown', data.entries[uid].cooldown);
26762677 await saveWorldInfo(name, data);
26772678 });
26782679 cooldown.val(entry.cooldown > 0 ? entry.cooldown : '').trigger('input');
26792680
26802681 // delay
26812682 const delay = template.find('input[name="delay"]');
26822683 delay.data('uid', entry.uid);
26832684 delay.on('input', async function () {
26842685 const uid = $(this).data('uid');
26852686 const value = Number($(this).val());
26862687 data.entries[uid].delay = !isNaN(value) ? value : null;
26872688
26882689 setOriginalDataValue(data, uid, 'extensions.delay', data.entries[uid].delay);
26892690 await saveWorldInfo(name, data);
26902691 });
26912692 delay.val(entry.delay > 0 ? entry.delay : '').trigger('input');
26922693
@@ -2699,14 +2700,14 @@ function getWorldEntry(name, data, entry) {
26992700 const depthInput = template.find('input[name="depth"]');
27002701 depthInput.data('uid', entry.uid);
27012702
27022703 depthInput.on('input', async function () {
27032704 const uid = $(this).data('uid');
27042705 const value = Number($(this).val());
27052706
27062707 data.entries[uid].depth = !isNaN(value) ? value : 0;
27072708 updatePosOrdDisplay(uid);
27082709 setOriginalDataValue(data, uid, 'extensions.depth', data.entries[uid].depth);
27092710 await saveWorldInfo(name, data);
27102711 });
27112712 depthInput.val(entry.depth ?? DEFAULT_DEPTH).trigger('input');
27122713 depthInput.css('width', 'calc(3em + 15px)');
@@ -2718,7 +2719,7 @@ function getWorldEntry(name, data, entry) {
27182719
27192720 const probabilityInput = template.find('input[name="probability"]');
27202721 probabilityInput.data('uid', entry.uid);
27212722 probabilityInput.on('input', async function () {
27222723 const uid = $(this).data('uid');
27232724 const value = Number($(this).val());
27242725
@@ -2734,7 +2735,7 @@ function getWorldEntry(name, data, entry) {
27342735 }
27352736
27362737 setOriginalDataValue(data, uid, 'extensions.probability', data.entries[uid].probability);
27372738 await saveWorldInfo(name, data);
27382739 });
27392740 probabilityInput.val(entry.probability).trigger('input');
27402741 probabilityInput.css('width', 'calc(3em + 15px)');
@@ -2746,14 +2747,14 @@ function getWorldEntry(name, data, entry) {
27462747
27472748 const probabilityToggle = template.find('input[name="useProbability"]');
27482749 probabilityToggle.data('uid', entry.uid);
27492750 probabilityToggle.on('input', async function () {
27502751 const uid = $(this).data('uid');
27512752 const value = $(this).prop('checked');
27522753 data.entries[uid].useProbability = value;
27532754 const probabilityContainer = $(this)
27542755 .closest('.world_entry')
27552756 .find('.probabilityContainer');
27562757 await saveWorldInfo(name, data);
27572758 value ? probabilityContainer.show() : probabilityContainer.hide();
27582759
27592760 if (value && data.entries[uid].probability === null) {
@@ -2782,7 +2783,7 @@ function getWorldEntry(name, data, entry) {
27822783 // Prevent closing the drawer on clicking the input
27832784 event.stopPropagation();
27842785 });
27852786 positionInput.on('input', async function () {
27862787 const uid = $(this).data('uid');
27872788 const value = Number($(this).val());
27882789 data.entries[uid].position = !isNaN(value) ? value : 0;
@@ -2804,7 +2805,7 @@ function getWorldEntry(name, data, entry) {
28042805 // Write the original value as extensions field
28052806 setOriginalDataValue(data, uid, 'extensions.position', data.entries[uid].position);
28062807 setOriginalDataValue(data, uid, 'extensions.role', data.entries[uid].role);
28072808 await saveWorldInfo(name, data);
28082809 });
28092810
28102811 const roleValue = entry.position === world_info_position.atDepth ? String(entry.role ?? extension_prompt_roles.SYSTEM) : '';
@@ -2820,12 +2821,12 @@ function getWorldEntry(name, data, entry) {
28202821 /*
28212822 const disableInput = template.find('input[name="disable"]');
28222823 disableInput.data("uid", entry.uid);
28232824 disableInput.on("input", async function () {
28242825 const uid = $(this).data("uid");
28252826 const value = $(this).prop("checked");
28262827 data.entries[uid].disable = value;
28272828 setOriginalDataValue(data, uid, "enabled", !data.entries[uid].disable);
28282829 await saveWorldInfo(name, data);
28292830 });
28302831 disableInput.prop("checked", entry.disable).trigger("input");
28312832 */
@@ -2837,7 +2838,7 @@ function getWorldEntry(name, data, entry) {
28372838 // Prevent closing the drawer on clicking the input
28382839 event.stopPropagation();
28392840 });
28402841 entryStateSelector.on('input', async function () {
28412842 const uid = entry.uid;
28422843 const value = $(this).val();
28432844 switch (value) {
@@ -2878,7 +2879,7 @@ function getWorldEntry(name, data, entry) {
28782879 template.addClass('disabledWIEntry');
28792880 break;
28802881 }
28812882 await saveWorldInfo(name, data);
28822883
28832884 });
28842885
@@ -2898,52 +2899,52 @@ function getWorldEntry(name, data, entry) {
28982899 .prop('selected', true)
28992900 .trigger('input');
29002901
29012902 await saveWorldInfo(name, data);
29022903
29032904 // exclude recursion
29042905 const excludeRecursionInput = template.find('input[name="exclude_recursion"]');
29052906 excludeRecursionInput.data('uid', entry.uid);
29062907 excludeRecursionInput.on('input', async function () {
29072908 const uid = $(this).data('uid');
29082909 const value = $(this).prop('checked');
29092910 data.entries[uid].excludeRecursion = value;
29102911 setOriginalDataValue(data, uid, 'extensions.exclude_recursion', data.entries[uid].excludeRecursion);
29112912 await saveWorldInfo(name, data);
29122913 });
29132914 excludeRecursionInput.prop('checked', entry.excludeRecursion).trigger('input');
29142915
29152916 // prevent recursion
29162917 const preventRecursionInput = template.find('input[name="prevent_recursion"]');
29172918 preventRecursionInput.data('uid', entry.uid);
29182919 preventRecursionInput.on('input', async function () {
29192920 const uid = $(this).data('uid');
29202921 const value = $(this).prop('checked');
29212922 data.entries[uid].preventRecursion = value;
29222923 setOriginalDataValue(data, uid, 'extensions.prevent_recursion', data.entries[uid].preventRecursion);
29232924 await saveWorldInfo(name, data);
29242925 });
29252926 preventRecursionInput.prop('checked', entry.preventRecursion).trigger('input');
29262927
29272928 // delay until recursion
29282929 const delayUntilRecursionInput = template.find('input[name="delay_until_recursion"]');
29292930 delayUntilRecursionInput.data('uid', entry.uid);
29302931 delayUntilRecursionInput.on('input', async function () {
29312932 const uid = $(this).data('uid');
29322933 const value = $(this).prop('checked');
29332934 data.entries[uid].delayUntilRecursion = value;
29342935 setOriginalDataValue(data, uid, 'extensions.delay_until_recursion', data.entries[uid].delayUntilRecursion);
29352936 await saveWorldInfo(name, data);
29362937 });
29372938 delayUntilRecursionInput.prop('checked', entry.delayUntilRecursion).trigger('input');
29382939
29392940 // duplicate button
29402941 const duplicateButton = template.find('.duplicate_entry_button');
29412942 duplicateButton.data('uid', entry.uid);
29422943 duplicateButton.on('click', async function () {
29432944 const uid = $(this).data('uid');
29442945 const entry = duplicateWorldInfoEntry(data, uid);
29452946 if (entry) {
29462947 await saveWorldInfo(name, data);
29472948 updateEditor(entry.uid);
29482949 }
29492950 });
@@ -2951,18 +2952,18 @@ function getWorldEntry(name, data, entry) {
29512952 // delete button
29522953 const deleteButton = template.find('.delete_entry_button');
29532954 deleteButton.data('uid', entry.uid);
29542955 deleteButton.on('click', async function () {
29552956 const uid = $(this).data('uid');
29562957 deleteWorldInfoEntry(data, uid);
29572958 deleteOriginalDataValue(data, uid);
29582959 await saveWorldInfo(name, data);
29592960 updateEditor(navigation_option.previous);
29602961 });
29612962
29622963 // scan depth
29632964 const scanDepthInput = template.find('input[name="scanDepth"]');
29642965 scanDepthInput.data('uid', entry.uid);
29652966 scanDepthInput.on('input', async function () {
29662967 const uid = $(this).data('uid');
29672968 const isEmpty = $(this).val() === '';
29682969 const value = Number($(this).val());
@@ -2982,59 +2983,59 @@ function getWorldEntry(name, data, entry) {
29822983
29832984 data.entries[uid].scanDepth = !isEmpty && !isNaN(value) && value >= 0 && value <= MAX_SCAN_DEPTH ? Math.floor(value) : null;
29842985 setOriginalDataValue(data, uid, 'extensions.scan_depth', data.entries[uid].scanDepth);
29852986 await saveWorldInfo(name, data);
29862987 });
29872988 scanDepthInput.val(entry.scanDepth ?? null).trigger('input');
29882989
29892990 // case sensitive select
29902991 const caseSensitiveSelect = template.find('select[name="caseSensitive"]');
29912992 caseSensitiveSelect.data('uid', entry.uid);
29922993 caseSensitiveSelect.on('input', async function () {
29932994 const uid = $(this).data('uid');
29942995 const value = $(this).val();
29952996
29962997 data.entries[uid].caseSensitive = value === 'null' ? null : value === 'true';
29972998 setOriginalDataValue(data, uid, 'extensions.case_sensitive', data.entries[uid].caseSensitive);
29982999 await saveWorldInfo(name, data);
29993000 });
30003001 caseSensitiveSelect.val((entry.caseSensitive === null || entry.caseSensitive === undefined) ? 'null' : entry.caseSensitive ? 'true' : 'false').trigger('input');
30013002
30023003 // match whole words select
30033004 const matchWholeWordsSelect = template.find('select[name="matchWholeWords"]');
30043005 matchWholeWordsSelect.data('uid', entry.uid);
30053006 matchWholeWordsSelect.on('input', async function () {
30063007 const uid = $(this).data('uid');
30073008 const value = $(this).val();
30083009
30093010 data.entries[uid].matchWholeWords = value === 'null' ? null : value === 'true';
30103011 setOriginalDataValue(data, uid, 'extensions.match_whole_words', data.entries[uid].matchWholeWords);
30113012 await saveWorldInfo(name, data);
30123013 });
30133014 matchWholeWordsSelect.val((entry.matchWholeWords === null || entry.matchWholeWords === undefined) ? 'null' : entry.matchWholeWords ? 'true' : 'false').trigger('input');
30143015
30153016 // use group scoring select
30163017 const useGroupScoringSelect = template.find('select[name="useGroupScoring"]');
30173018 useGroupScoringSelect.data('uid', entry.uid);
30183019 useGroupScoringSelect.on('input', async function () {
30193020 const uid = $(this).data('uid');
30203021 const value = $(this).val();
30213022
30223023 data.entries[uid].useGroupScoring = value === 'null' ? null : value === 'true';
30233024 setOriginalDataValue(data, uid, 'extensions.use_group_scoring', data.entries[uid].useGroupScoring);
30243025 await saveWorldInfo(name, data);
30253026 });
30263027 useGroupScoringSelect.val((entry.useGroupScoring === null || entry.useGroupScoring === undefined) ? 'null' : entry.useGroupScoring ? 'true' : 'false').trigger('input');
30273028
30283029 // automation id
30293030 const automationIdInput = template.find('input[name="automationId"]');
30303031 automationIdInput.data('uid', entry.uid);
30313032 automationIdInput.on('input', async function () {
30323033 const uid = $(this).data('uid');
30333034 const value = $(this).val();
30343035
30353036 data.entries[uid].automationId = value;
30363037 setOriginalDataValue(data, uid, 'extensions.automation_id', data.entries[uid].automationId);
30373038 await saveWorldInfo(name, data);
30383039 });
30393040 automationIdInput.val(entry.automationId ?? '').trigger('input');
30403041 setTimeout(() => createEntryInputAutocomplete(automationIdInput, getAutomationIdCallback(data)), 1);