Merge pull request #2635 from SillyTavern/independent-WI-disable Split WI Entry 'disable' into separate toggle

9af640cdf86841b46ebdb91a42bddd98bb197c19

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
4 files changed, +40 -41Ignore whitespace
public/css/world-info.css+12 -0
@@ -120,6 +120,14 @@
120 flex-wrap: wrap;120 flex-wrap: wrap;
121}121}
122122
123.world_entry .inline-drawer-header {
124 cursor: initial;
125}
126
127.world_entry .killSwitch {
128 cursor: pointer;
129}
130
123.world_entry_form_control input[type=button] {131.world_entry_form_control input[type=button] {
124 cursor: pointer;132 cursor: pointer;
125}133}
@@ -173,6 +181,10 @@
173 width: 7em;181 width: 7em;
174}182}
175183
184.world_entry .killSwitch.fa-toggle-on {
185 color: var(--SmartThemeQuoteColor);
186}
187
176.wi-card-entry {188.wi-card-entry {
177 border: 1px solid;189 border: 1px solid;
178 border-color: var(--SmartThemeBorderColor);190 border-color: var(--SmartThemeBorderColor);
public/index.html+5 -4
@@ -5298,21 +5298,22 @@
5298 <div class="world_entry">5298 <div class="world_entry">
5299 <form class="world_entry_form wi-card-entry">5299 <form class="world_entry_form wi-card-entry">
5300 <div class="inline-drawer wide100p">5300 <div class="inline-drawer wide100p">
5301 <div class="inline-drawer-toggle inline-drawer-header gap5px padding0">5301 <div class="inline-drawer-header gap5px padding0">
5302 <span class="drag-handle">&#9776;</span>5302 <span class="drag-handle">&#9776;</span>
5303 <div class="gap5px world_entry_thin_controls wide100p alignitemscenter">5303 <div class="gap5px world_entry_thin_controls wide100p alignitemscenter">
5304 <div class="fa-fw fa-solid fa-circle-chevron-down inline-drawer-icon down"></div>5304 <div class="inline-drawer-toggle fa-fw fa-solid fa-circle-chevron-down inline-drawer-icon down"></div>
5305 <div class="fa-solid fa-toggle-on killSwitch" name="entryKillSwitch" title="Toggle entry's active state."></div>
5305 <div class="flex-container alignitemscenter wide100p">5306 <div class="flex-container alignitemscenter wide100p">
5307
5306 <div class="WIEntryTitleAndStatus flex-container flex1 alignitemscenter">5308 <div class="WIEntryTitleAndStatus flex-container flex1 alignitemscenter">
5309
5307 <div class="flex-container flex1">5310 <div class="flex-container flex1">
5308 <textarea class="text_pole" rows="1" name="comment" maxlength="5000" data-i18n="[placeholder]Entry Title/Memo" placeholder="Entry Title/Memo"></textarea>5311 <textarea class="text_pole" rows="1" name="comment" maxlength="5000" data-i18n="[placeholder]Entry Title/Memo" placeholder="Entry Title/Memo"></textarea>
5309 </div>5312 </div>
5310 <!-- <span class="world_entry_form_position_value"></span> -->
5311 <select data-i18n="[title]WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled" title="WI Entry Status:&#13;🔵 Constant&#13;🟢 Normal&#13;🔗 Vectorized&#13;❌ Disabled" name="entryStateSelector" class="text_pole widthNatural margin0">5313 <select data-i18n="[title]WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled" title="WI Entry Status:&#13;🔵 Constant&#13;🟢 Normal&#13;🔗 Vectorized&#13;❌ Disabled" name="entryStateSelector" class="text_pole widthNatural margin0">
5312 <option value="constant" title="Constant" data-i18n="[title]WI_Entry_Status_Constant">🔵</option>5314 <option value="constant" title="Constant" data-i18n="[title]WI_Entry_Status_Constant">🔵</option>
5313 <option value="normal" title="Normal" data-i18n="[title]WI_Entry_Status_Normal">🟢</option>5315 <option value="normal" title="Normal" data-i18n="[title]WI_Entry_Status_Normal">🟢</option>
5314 <option value="vectorized" title="Vectorized" data-i18n="[title]WI_Entry_Status_Vectorized">🔗</option>5316 <option value="vectorized" title="Vectorized" data-i18n="[title]WI_Entry_Status_Vectorized">🔗</option>
5315 <option value="disabled" title="Disabled" data-i18n="[title]WI_Entry_Status_Disabled">❌</option>
5316 </select>5317 </select>
5317 </div>5318 </div>
5318 <div class="WIEnteryHeaderControls flex-container">5319 <div class="WIEnteryHeaderControls flex-container">
public/scripts/templates/worldInfoKeywordHeaders.html+1 -1
@@ -1,6 +1,6 @@
1<div id="WIEntryHeaderTitlesPC" class="flex-container wide100p spaceBetween justifyCenter textAlignCenter" style="padding:0 4.5em;">1<div id="WIEntryHeaderTitlesPC" class="flex-container wide100p spaceBetween justifyCenter textAlignCenter" style="padding:0 4.5em;">
2 <small class="flex1" data-i18n="Title/Memo">Title/Memo</small>2 <small class="flex1" data-i18n="Title/Memo">Title/Memo</small>
3 <small style="width: calc(3.5em + 15px)" data-i18n="Status">Status</small>3 <small style="width: calc(3.5em + 15px)" data-i18n="Strategy">Strategy</small>
4 <small style="width: calc(3.5em + 30px)" data-i18n="Position">Position</small>4 <small style="width: calc(3.5em + 30px)" data-i18n="Position">Position</small>
5 <small style="width: calc(3.5em + 20px)" data-i18n="Depth">Depth</small>5 <small style="width: calc(3.5em + 20px)" data-i18n="Depth">Depth</small>
6 <small style="width: calc(3.5em + 20px)" data-i18n="Order">Order</small>6 <small style="width: calc(3.5em + 20px)" data-i18n="Order">Order</small>
public/scripts/world-info.js+22 -36
@@ -2859,21 +2859,7 @@ async function getWorldEntry(name, data, entry) {
2859 //add UID above content box (less important doesn't need to be always visible)2859 //add UID above content box (less important doesn't need to be always visible)
2860 template.find('.world_entry_form_uid_value').text(`(UID: ${entry.uid})`);2860 template.find('.world_entry_form_uid_value').text(`(UID: ${entry.uid})`);
28612861
2862 // disable2862 //new tri-state selector for constant/normal/vectorized
2863 /*
2864 const disableInput = template.find('input[name="disable"]');
2865 disableInput.data("uid", entry.uid);
2866 disableInput.on("input", async function () {
2867 const uid = $(this).data("uid");
2868 const value = $(this).prop("checked");
2869 data.entries[uid].disable = value;
2870 setOriginalDataValue(data, uid, "enabled", !data.entries[uid].disable);
2871 await saveWorldInfo(name, data);
2872 });
2873 disableInput.prop("checked", entry.disable).trigger("input");
2874 */
2875
2876 //new tri-state selector for constant/normal/disabled
2877 const entryStateSelector = template.find('select[name="entryStateSelector"]');2863 const entryStateSelector = template.find('select[name="entryStateSelector"]');
2878 entryStateSelector.data('uid', entry.uid);2864 entryStateSelector.data('uid', entry.uid);
2879 entryStateSelector.on('click', function (event) {2865 entryStateSelector.on('click', function (event) {
@@ -2886,49 +2872,43 @@ async function getWorldEntry(name, data, entry) {
2886 switch (value) {2872 switch (value) {
2887 case 'constant':2873 case 'constant':
2888 data.entries[uid].constant = true;2874 data.entries[uid].constant = true;
2889 data.entries[uid].disable = false;
2890 data.entries[uid].vectorized = false;2875 data.entries[uid].vectorized = false;
2891 setWIOriginalDataValue(data, uid, 'enabled', true);
2892 setWIOriginalDataValue(data, uid, 'constant', true);2876 setWIOriginalDataValue(data, uid, 'constant', true);
2893 setWIOriginalDataValue(data, uid, 'extensions.vectorized', false);2877 setWIOriginalDataValue(data, uid, 'extensions.vectorized', false);
2894 template.removeClass('disabledWIEntry');
2895 break;2878 break;
2896 case 'normal':2879 case 'normal':
2897 data.entries[uid].constant = false;2880 data.entries[uid].constant = false;
2898 data.entries[uid].disable = false;
2899 data.entries[uid].vectorized = false;2881 data.entries[uid].vectorized = false;
2900 setWIOriginalDataValue(data, uid, 'enabled', true);
2901 setWIOriginalDataValue(data, uid, 'constant', false);2882 setWIOriginalDataValue(data, uid, 'constant', false);
2902 setWIOriginalDataValue(data, uid, 'extensions.vectorized', false);2883 setWIOriginalDataValue(data, uid, 'extensions.vectorized', false);
2903 template.removeClass('disabledWIEntry');
2904 break;2884 break;
2905 case 'vectorized':2885 case 'vectorized':
2906 data.entries[uid].constant = false;2886 data.entries[uid].constant = false;
2907 data.entries[uid].disable = false;
2908 data.entries[uid].vectorized = true;2887 data.entries[uid].vectorized = true;
2909 setWIOriginalDataValue(data, uid, 'enabled', true);
2910 setWIOriginalDataValue(data, uid, 'constant', false);2888 setWIOriginalDataValue(data, uid, 'constant', false);
2911 setWIOriginalDataValue(data, uid, 'extensions.vectorized', true);2889 setWIOriginalDataValue(data, uid, 'extensions.vectorized', true);
2912 template.removeClass('disabledWIEntry');
2913 break;
2914 case 'disabled':
2915 data.entries[uid].constant = false;
2916 data.entries[uid].disable = true;
2917 data.entries[uid].vectorized = false;
2918 setWIOriginalDataValue(data, uid, 'enabled', false);
2919 setWIOriginalDataValue(data, uid, 'constant', false);
2920 setWIOriginalDataValue(data, uid, 'extensions.vectorized', false);
2921 template.addClass('disabledWIEntry');
2922 break;2890 break;
2923 }2891 }
2924 await saveWorldInfo(name, data);2892 await saveWorldInfo(name, data);
29252893
2926 });2894 });
29272895
2896 const entryKillSwitch = template.find('div[name="entryKillSwitch"]');
2897 entryKillSwitch.data('uid', entry.uid);
2898 entryKillSwitch.on('click', async function (event) {
2899 const uid = entry.uid;
2900 data.entries[uid].disable = !data.entries[uid].disable;
2901 const isActive = !data.entries[uid].disable;
2902 setWIOriginalDataValue(data, uid, 'enabled', isActive);
2903 template.toggleClass('disabledWIEntry', !isActive);
2904 entryKillSwitch.toggleClass('fa-toggle-off', !isActive);
2905 entryKillSwitch.toggleClass('fa-toggle-on', isActive);
2906 await saveWorldInfo(name, data);
2907
2908 });
2909
2928 const entryState = function () {2910 const entryState = function () {
2929 if (entry.disable === true) {2911 if (entry.constant === true) {
2930 return 'disabled';
2931 } else if (entry.constant === true) {
2932 return 'constant';2912 return 'constant';
2933 } else if (entry.vectorized === true) {2913 } else if (entry.vectorized === true) {
2934 return 'vectorized';2914 return 'vectorized';
@@ -2936,6 +2916,12 @@ async function getWorldEntry(name, data, entry) {
2936 return 'normal';2916 return 'normal';
2937 }2917 }
2938 };2918 };
2919
2920 const isActive = !entry.disable;
2921 template.toggleClass('disabledWIEntry', !isActive);
2922 entryKillSwitch.toggleClass('fa-toggle-off', !isActive);
2923 entryKillSwitch.toggleClass('fa-toggle-on', isActive);
2924
2939 template2925 template
2940 .find(`select[name="entryStateSelector"] option[value=${entryState()}]`)2926 .find(`select[name="entryStateSelector"] option[value=${entryState()}]`)
2941 .prop('selected', true)2927 .prop('selected', true)