mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-01-20 21:41:32 +01:00
Merge pull request #2568 from SillyTavern/wi-apply-sorting-order-fix
Fix apply WI sorting to order field
This commit is contained in:
commit
1ad57e6ff6
@ -3662,8 +3662,8 @@
|
||||
<div id="OpenAllWIEntries" class="menu_button fa-solid fa-expand" title="Open all Entries" data-i18n="[title]Open all Entries"></div>
|
||||
<div id="CloseAllWIEntries" class="menu_button fa-solid fa-compress" title="Close all Entries" data-i18n="[title]Close all Entries"></div>
|
||||
<div id="world_popup_new" class="menu_button fa-solid fa-plus" title="New Entry" data-i18n="[title]New Entry"></div>
|
||||
<div id="world_backfill_memos" class="menu_button fa-solid fa-notes-medical" title="Fill empty Memo/Titles with Keywords" data-i18n="[title]Fill empty Memo/Titles with Keywords"></div><div id="world_apply_custom_sorting" class="menu_button fa-solid fa-solid fa-arrow-down-9-1"
|
||||
title="Apply custom sorting as Order" data-i18n="[title]Apply custom sorting as Order"></div>
|
||||
<div id="world_backfill_memos" class="menu_button fa-solid fa-notes-medical" title="Fill empty Memo/Titles with Keywords" data-i18n="[title]Fill empty Memo/Titles with Keywords"></div>
|
||||
<div id="world_apply_current_sorting" class="menu_button fa-solid fa-solid fa-arrow-down-9-1" title="Apply current sorting as Order" data-i18n="[title]Apply current sorting as Order"></div>
|
||||
<div id="world_import_button" class="menu_button fa-solid fa-file-import" title="Import World Info" data-i18n="[title]Import World Info"></div>
|
||||
<div id="world_popup_export" class="menu_button fa-solid fa-file-export" title="Export World Info" data-i18n="[title]Export World Info"></div>
|
||||
<div id="world_duplicate" class="menu_button fa-solid fa-paste" title="Duplicate World Info" data-i18n="[title]Duplicate World Info"></div>
|
||||
|
@ -10822,7 +10822,7 @@ jQuery(async function () {
|
||||
//newSlider.val(manualInput)
|
||||
//handleSlideEvent.call(newSlider, null, { value: parseFloat(manualInput) }, 'manual');
|
||||
valueBeforeManualInput = manualInput;
|
||||
$(masterElement).val($(this).val()).trigger('input');
|
||||
$(masterElement).val($(this).val()).trigger('input', { forced: true });
|
||||
} else {
|
||||
//if value not ok, warn and reset to last known valid value
|
||||
toastr.warning(`Invalid value. Must be between ${$(this).attr('min')} and ${$(this).attr('max')}`);
|
||||
@ -10848,7 +10848,7 @@ jQuery(async function () {
|
||||
if (manualInput >= Number($(this).attr('min')) && manualInput <= Number($(this).attr('max'))) {
|
||||
valueBeforeManualInput = manualInput;
|
||||
//set the slider value to input value
|
||||
$(masterElement).val($(this).val()).trigger('input');
|
||||
$(masterElement).val($(this).val()).trigger('input', { forced: true });
|
||||
} else {
|
||||
//if value not ok, warn and reset to last known valid value
|
||||
toastr.warning(`Invalid value. Must be between ${$(this).attr('min')} and ${$(this).attr('max')}`);
|
||||
|
@ -3328,10 +3328,11 @@ $(document).ready(() => {
|
||||
|
||||
});
|
||||
|
||||
$('#chat_width_slider').on('input', function (e) {
|
||||
$('#chat_width_slider').on('input', function (e, data) {
|
||||
const applyMode = data?.forced ? 'forced' : 'normal';
|
||||
power_user.chat_width = Number(e.target.value);
|
||||
localStorage.setItem(storage_keys.chat_width, power_user.chat_width);
|
||||
applyChatWidth();
|
||||
applyChatWidth(applyMode);
|
||||
setHotswapsDebounced();
|
||||
});
|
||||
|
||||
@ -3357,11 +3358,12 @@ $(document).ready(() => {
|
||||
saveSettingsDebounced();
|
||||
});
|
||||
|
||||
$('input[name="font_scale"]').on('input', async function (e) {
|
||||
$('input[name="font_scale"]').on('input', async function (e, data) {
|
||||
const applyMode = data?.forced ? 'forced' : 'normal';
|
||||
power_user.font_scale = Number(e.target.value);
|
||||
$('#font_scale_counter').val(power_user.font_scale);
|
||||
localStorage.setItem(storage_keys.font_scale, power_user.font_scale);
|
||||
await applyFontScale();
|
||||
await applyFontScale(applyMode);
|
||||
saveSettingsDebounced();
|
||||
});
|
||||
|
||||
|
@ -1931,39 +1931,43 @@ function displayWorldEntries(name, data, navigation = navigation_option.none, fl
|
||||
}
|
||||
});
|
||||
|
||||
$('#world_apply_custom_sorting').off('click').on('click', async () => {
|
||||
$('#world_apply_current_sorting').off('click').on('click', async () => {
|
||||
const entryCount = Object.keys(data.entries).length;
|
||||
const moreThan100 = entryCount > 100;
|
||||
|
||||
let content = '<span>Apply your custom sorting to the "Order" field. The Order values will go down from the chosen number.</span>';
|
||||
let content = '<span>Apply your current sorting to the "Order" field. The Order values will go down from the chosen number.</span>';
|
||||
if (moreThan100) {
|
||||
content += `<div class="m-t-1"><i class="fa-solid fa-triangle-exclamation" style="color: #FFD43B;"></i> More than 100 entries in this world. If you don't choose a number higher than that, the lower entries will default to 0.<br />(Usual default: 100)<br />Minimum: ${entryCount}</div>`;
|
||||
}
|
||||
|
||||
const result = await Popup.show.input('Apply Custom Sorting', content, '100', { okButton: 'Apply', cancelButton: 'Cancel' });
|
||||
const result = await Popup.show.input('Apply Current Sorting', content, '100', { okButton: 'Apply', cancelButton: 'Cancel' });
|
||||
if (!result) return;
|
||||
|
||||
const start = Number(result);
|
||||
if (isNaN(start) || start < 0) {
|
||||
toastr.error('Invalid number: ' + result, 'Apply Custom Sorting');
|
||||
toastr.error('Invalid number: ' + result, 'Apply Current Sorting');
|
||||
return;
|
||||
}
|
||||
if (start < entryCount) {
|
||||
toastr.warning('A number lower than the entry count has been chosen. All entries below that will default to 0.', 'Apply Custom Sorting');
|
||||
toastr.warning('A number lower than the entry count has been chosen. All entries below that will default to 0.', 'Apply Current Sorting');
|
||||
}
|
||||
|
||||
let counter = 0;
|
||||
for (const entry of Object.values(data.entries)) {
|
||||
const newOrder = Math.max(start - (entry.displayIndex ?? 0), 0);
|
||||
// We need to sort the entries here, as the data source isn't sorted
|
||||
const entries = Object.values(data.entries);
|
||||
sortEntries(entries);
|
||||
|
||||
let updated = 0, current = start;
|
||||
for (const entry of entries) {
|
||||
const newOrder = Math.max(current--, 0);
|
||||
if (entry.order === newOrder) continue;
|
||||
|
||||
entry.order = newOrder;
|
||||
setOriginalDataValue(data, entry.order, 'order', entry.order);
|
||||
counter++;
|
||||
updated++;
|
||||
}
|
||||
|
||||
if (counter > 0) {
|
||||
toastr.info(`Updated ${counter} Order values`, 'Apply Custom Sorting');
|
||||
if (updated > 0) {
|
||||
toastr.info(`Updated ${updated} Order values`, 'Apply Custom Sorting');
|
||||
await saveWorldInfo(name, data, true);
|
||||
updateEditor(navigation_option.previous);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user